* LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0001 00001 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B 00002 * 00003 * LEDIT WAS WRITTEN TO RUN WITH ONE OF THE STANDARD P800 MONITORS, WHICH 00004 * PROVIDED THE IO. THIS VERSION IS CHANGED IN SUCH A WAY THAT IT CAN RUN AS 00005 * A STAND ALONE PROGRAM, TO BE A TEST FOR THE P860 SIMULATOR AND ALL ITS 00006 * SUPPORTED PERIPHERALS. 00007 * 00008 * THE FOLLOWING PERIPHERALS ARE SUPPORTED: 00009 * - TTY (KEYBOARD/PRINTER) EDITOR CONTROL, RECORD INPUT/PRINT 00010 * - PTR (PAPER TAPE READER) RECORD INPUT 00011 * - CRD (CARD READER) RECORD INPUT 00012 * - PTP (PAPER TAPE PUNCH) RECORD OUTPUT 00013 * - LPT (LINE PRINTER) PRINTING 00014 * 00015 * TTY,PTR AND PTP ARE CONNECTED TO THE PROGRAMMED IO CHANNEL; THE CARD READER 00016 * AND LINE PRINTER ARE CONNECTED TO A MULTIPLEX CHANNEL. 00017 * 00018 * THE SIMULATED CARD READER USES 16 BITS TO STORE CHARACTER CODES. FOR THE 00019 * REAL CARD READER THE CHARACTERS ARE CODED IN 12 BIT HOLLERITH, WHICH CODES 00020 * ARE STORED IN THE LOWEST 12 BIT OF THE 2 BYTE CHARACTERS OF THE SIMULATED 00021 * READER. THE UTILITY '2CDR.PL' CONVERTS A TEXT FILE TO CARD FILE FORMAT 00022 * (WITH A .CRD EXTENSION). THIS UTILITY EITHER CONVERTS ASCII CHARACTER CODES 00023 * TO 2 BYTE 12-BIT HOLLERITH CHARACTER CODES OR TO 2 BYTE 8-BIT ASCII CODE. 00024 * SO FOR BOTH TYPES OF CONVERSION, THE SIMULATED CARD READER HAS TO HANDLE 00025 * 16 BIT FOR EACH CHARACTER; FOR THE 2ND TYPE HOWEVER THE CONVERSION IS 00026 * EASIER. BECAUSE THE SIMULATED CARDREADER IS CONNECTED VIA A MULTIPLEX 00027 * CHANNEL, ITS NEEDS WORD TRANSFER TO MOVE THE CHARACTERS FROM THE CARDREADER 00028 * CONTROL UNIT TO MEMORY. THIS PROGRAM USES THE 2ND TYPE OF CARD CHARACTER 00029 * CODES, SO DOES NOT NEED THE HOLLERITH=>ASCII CONVERSION (THIS BECAUSE 00030 * THE MAIN GOAL OF THE CARD READER SUPPORT IN THIS PROGRAM IS TO TEST THE 00031 * MULTIPLEX WORD INPUT LOGIC). 00032 * 00033 **************************************************************************** 00034 * PHILIPS P800 16 BIT COMPUTER SOFTWARE. 00035 * THE PROGRAM IS CREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) 00036 **************************************************************************** 00037 * * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0002 00038 * USAGE 00039 * ===== 00040 * THE FOLLOWING COMMANDS ARE SUPPORTED BY MEANS OF THE TTY: 00041 * (WHEN # IS PRINTED ON THE TTY, A COMMAND IS EXPECTED; WHEN A . (DOT) IS 00042 * PRINTED ON THE TTY, A RECORD NUMBER IS EXPECTED). 00043 * 1) R[A|P|C] 00044 * INPUT RECORDS, STARTING AT RECORD (LINE NUMBER), WHERE 'A' MEANS 00045 * READING FROM THE TTY, 'P' READING FROM PTR AND 'C' READING FROM THE 00046 * PUNCHED CARD READER. READING STOPS WHEN THE 1ST TWO CHARACTERS OF A READ 00047 * RECORD CONTAIN THE CHARACTER COMBINATION :E (WHICH ARE THE 1ST TWO 00048 * CHARACTERS OF AN :EOS (END OF SEGMENT) OR :EOF (END OF FILE) SIGN. 00049 * TAB EXPANSION IS SUPPORTED FOR TTY AND PTR INPUT RECORDS ('\' IS THE TAB 00050 * CHARACTER). MAXIMUM (EXPANDED) INPUT RECORD LENGTH IS 130 CHARACTERS. 00051 * 2) P[A|U|P| ] 00052 * OUTPUT RECORDS, STARTING WITH RECORD NUMBER AND ENDING WITH 00053 * RECORD NUMBER , WHERE 'A' MEANS THAT THE OUTPUT IS PRINTED ON THE TTY, 00054 * 'U' THAT OUTPUT IS PUNCHED ON THE PAPER TAPE PUNCHER, 'P' THAT OUTPUT IS 00055 * PRINTED ON THE LINE PRINTER, AND ' ' (SPACE) THAT OUTPUT IS ALSO PRINTED 00056 * ON THE LINE PRINTER BUT WITHOUT LINE NUMBERS. PUNCHED OUTPUT CAN BE READ 00057 * FOR INSTANCE BY THE ASSEMBLER. 00058 * 3) / 00059 * DELETE RECORD WITH RECORD NUMBER 00060 * 4) = 00061 * REPLACE RECORD WITH RECORD NUMBER 00062 * 5) < 00063 * INSERT RECORD BEFORE RECORD NUMBER 00064 * 5) ? 00065 * PRINT SINGLE RECORD WITH RECORD NUMBER ON CONSOLE (TTY) 00066 * 7) T[A|F|X|] 00067 * SET TABS: 'A' FOR RECORDS FORMATTED FOR THE ASSEMBLER, 'F' FOR RECORDS 00068 * FORMATTED FOR THE FORTRAN COMPILER, 'X' FOR SOME TEXT FORMAT. ANY OTHER 00069 * CHARACTER REMOVES ANY TAB SETTING. 00070 * 8) ^ 00071 * PACKS THE TEXT BUFFER; WHEN RECORDS ARE DELETED, ALL RECORDS GET A 00072 * CONSECUTIVE RECORD NUMBER. 00073 * 9) $[Y|E] 00074 * THE $ CONFIRMED WITH A 'Y' DELETES ALL RECORDS FROM THE TEXT BUFFER AND * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0003 00075 * REINITIALIZES THE EDITOR TO RECEIVE NEW RECORDS. 00076 * THE $ CONFIRMED WITH A 'E' STOPS THE EDITOR. 00077 * 00078 * SOME COMMANDS CAN BE REPEATED BY TYPING A '.' (DOT) WHEN A NEXT COMMAND IS 00079 * EXPECTED. THE PREVIOUS COMMAND IS EXECUTED THEN, WHILE THE LINE NUMBER IS 00080 * INCREMENTED WITH 1. THESE COMMANDS ARE: /, =, <, ? (THE REPEAT COMMAND 00081 * ITSELF CAN ALSO BE REPEATED). 00082 * * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0004 00083 EJECT 00084 IDENT LEDIT 00085 0000 572E RF TEXT TO START ADDRESS 00086 * GENERATION DATA 00087 * MAXIMUM CORE = 16K WORDS!; MAXIMUM NUMBER OF RECORDS IS 1000 [0..999] 00088 HCOR EQU /7FFE 16K 00089 MAXL EQU 500 500 RECORDS DEFAULT [0..499] 00090 * 00091 0002 030A A TX1TAB DATA /030A TEXT TAB'S: 10,20,50 00092 0004 1432 A DATA /1432 00093 0006 0308 A ASMTAB DATA /0308 ASSEMBLER TAB'S: 8,20,41 00094 0008 1429 A DATA /1429 00095 000A 0107 A FORTAB DATA /0107 FORTRAN TAB'S: 7 00096 NOTAB EQU 0 NO TAB SETTING 00097 * DEFAULT TAB SETTING: EITHER NOTAB, ASMTAB, FORTAB, OTHER 00098 DEFTAB EQU ASMTAB 00099 * 00100 TOPCOR EQU HCOR-2 00101 MAXL2 EQU MAXL+MAXL NUMBER OF RECORDS * 2 00102 LTABM EQU TOPCOR-MAXL2 00103 LTAB EQU LTABM+2 RECORD POINTER TABLE 00104 CHAD EQU A9 CHARACTER ADDRESS 00105 RENU EQU A10 LINE NUMBER 00106 NULL EQU A11 0 00107 WA EQU A12 WRITE CHAR TO TTY 00108 RA EQU A13 READ CHAR FROM TTY 00109 LST EQU A14 LINKSTACK POINTER * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0005 00110 EJECT 00111 * -- COMMAND TABLE 00112 N EQU 18 NUMBER OF COMMANDS * 2 00113 NN EQU -N NUMBER OF COMMANDS * 2 NEGATIVE 00114 * 00115 000C 2420 A CTAB DATA '$ ' KILL 00116 000E 5220 A DATA 'R ' READ 00117 0010 5020 A DATA 'P ' WRITE 00118 0012 2F20 A DATA '/ ' DELETE 00119 0014 3D20 A DATA '= ' REPLACE 00120 0016 3F20 A DATA '? ' CONSOLE 00121 0018 5420 A DATA 'T ' TABS 00122 001A 3C00 A DATA /3C00 < INSERT 00123 001C 5E00 A DATA /5E00 ^ PACK 00124 * 00125 001E 007C R JTAB DATA KILL 00126 0020 011C R DATA READ 00127 0022 01B2 R DATA WRITE 00128 0024 00CC R DATA DELETE 00129 0026 0164 R DATA REPLAC 00130 0028 01FE R DATA CONS 00131 002A 0184 R DATA TAB 00132 002C 00D6 R DATA INSERT 00133 002E 00F2 R DATA PACK * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0006 00134 EJECT 00135 * -- INIT 00136 0030 BF20 TEXT MLK 14 00137 0032 RES 7 LINKSTACK 00138 0040 LSTK RES 1 00139 0042 0672 R DATA BCOR A9-CHAD (CHARACTER ADDRESS IN TEXT BUFFER) 00140 0044 0000 A DATA 0 A10-RENU (LINE NUMBER = POINTER INTO LINE TABLE) 00141 0046 0000 A DATA 0 A11-NULL 00142 0048 0250 R DATA WASR A12-WRITE CHARACTER TO TELETYPE 00143 004A 0262 R DATA RASR A13-READ CHARACTER FROM TELETYPE 00144 004C 0040 R DATA LSTK A14-LINKSTACKPOINTER 00145 004E 5740 RF INIBUF INIT BUFFER 00146 * 00147 * -- COMMAND LOOP 00148 0050 F6A1 CI CF LST,NLCR 0052 027E R 00149 0054 0600 LDK A6,0 00150 0056 8641 ST A6,LPRFLG RESET LINEPRINTER FLAG 0058 02BE R 00151 005A 0623 LDK A6,'#' 00152 005C F693 CFR LST,WA WASR: SHOW PROMPT 00153 005E F697 CFR LST,RA RASR => COMMAND INTO A6 00154 0060 EE21 CCK A6,'. ' REPEAT ? 0062 2E20 A 00155 0064 503C RF(0) REPEAT YES 00156 0066 8641 ST A6,LAST SAVE COMMAND FOR REPEAT 0068 00AE R 00157 006A 8120 LDKL A1,NN COMMAND COUNTER 006C FFEE A 00158 006E EE45 NEXT CC A6,CTAB+N,A1 COMPARE COMMAND WITH TABLE 0070 001E R 00159 0072 8844 ABI(0) JTAB+N,A1 JUMP OVER TABLE 0074 0030 R 00160 0076 1102 ADK A1,2 CHECK NEXT COMMAND 00161 0078 582A RB(0) CI NO VALID COMMAND FOUND 00162 007A 5F0E RB NEXT * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0007 00163 EJECT 00164 * -- INITIALIZE MEMORY 00165 * 00166 007C 063F KILL LDK A6,'?' 00167 007E F693 CFR LST,WA WASR 00168 0080 F697 CFR LST,RA RASR 00169 0082 EE21 CCK A6,'Y ' 0084 5920 A 00170 0086 5008 RF(0) INIBUF KILL ! 00171 0088 EE21 CCK A6,'E ' EXIT ? 008A 4520 A 00172 008C 5C3E RB(4) CI NO 00173 * EXIT 00174 * LKM EXIT TO MONITOR 00175 * DATA 3 00176 008E 207F HLT 00177 * 00178 * -- KILL 00179 * -- INITIALIZE THE TEXT BUFFER 00180 0090 8120 INIBUF LDKL A1,BCOR BUFFER START 0092 0672 R 00181 0094 8184 LDR CHAD,A1 INIT CHAD 00182 0096 83A5 KL STR NULL,A1 STORE NULL 00183 0098 1102 ADK A1,2 00184 009A E920 CWK A1,TOPCOR 009C 7FFC A 00185 009E 5D0A RB(5) KL 00186 00A0 5F52 RB CI * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0008 00187 EJECT 00188 * -- REPEAT LAST COMMAND: VALID FOR CONSOLE PRINT, DELETE, INSERT AND REPLACE 00189 * 00190 00A2 92A0 REPEAT ADKL RENU,2 NEXT LINE 00A4 0002 A 00191 00A6 EAA0 CWK RENU,MAXL2 CHECK NEW RENU 00A8 03E8 A 00192 00AA 5E5C RB(6) CI 00193 00AC 8120 LDKL A1,0 00AE 0000 A 00194 LAST EQU *-2 LAST COMMAND 00195 00B0 E921 CCK A1,'/ ' DELETE ? 00B2 2F20 A 00196 00B4 501A RF(0) DELETE+4 00197 00B6 E921 CCK A1,/3C00 INSERT ? 00B8 3C00 A 00198 00BA 501E RF(0) INSERT+4 00199 00BC E921 CCK A1,'= ' REPLACE ? 00BE 3D20 A 00200 00C0 50A6 RF(0) REPLAC+4 00201 00C2 E921 CCK A1,'? ' CONSOLE ? 00C4 3F20 A 00202 00C6 8820 ABL(0) CONS+4 00C8 0202 R 00203 00CA 5F7C RB CI * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0009 00204 EJECT 00205 * -- DELETE RECORD 00206 * 00207 00CC F6A1 DELETE CF LST,LRENU READ LINENUMBER TO RENU (A10) 00CE 045E R 00208 00D0 83CB ST NULL,LTAB,RENU CLEAR RECORD POINTER 00D2 7C16 A 00209 00D4 5F86 RB CI 00210 * 00211 * -- INSERT RECORD 00212 * 00213 00D6 F6A1 INSERT CF LST,LRENU READ LINENUMBER TO RENU (A10) 00D8 045E R 00214 00DA B9A0 MLK 3 00215 00DC 7FFC A DATA TOPCOR 00216 00DE 7FFA A DATA TOPCOR-2 00217 00E0 7C16 A DATA LTAB 00218 00E2 930A ADR A3,RENU RECORD POINTER INTO RECORD TABLE 00219 00E4 E90C IL CWR A1,A3 00220 00E6 5080 RF(0) REPLAC+4 INPUT RECORD 00221 00E8 8428 LDR* A4,A2 SHIFT RECORDS ABOVE NEW ONE 00222 00EA 8425 STR A4,A1 00223 00EC 1902 SUK A1,2 00224 00EE 1A02 SUK A2,2 00225 00F0 5F0E RB IL 00226 * 00227 * -- PACK 00228 * 00229 00F2 8120 PACK LDKL A1,LTAB TABLE POINTER 00F4 7C16 A 00230 00F6 8224 PL LDR* A2,A1 TABLE ENTRY ZERO? 00231 00F8 500A RF(0) PC ZERO ENTRY FOUND; A1=POINTER 00232 00FA 1102 PT ADK A1,2 00233 00FC E920 CWK A1,TOPCOR 00FE 7FFC A 00234 0100 5D0C RB(5) PL CHECK NEXT TABLE ENTRY 00235 0102 5FB4 RB CI END OF TABLE * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0010 00236 * ZERO TABLE ENTRY; LOOK FOR A NON ZERO ONE 00237 0104 8304 PC LDR A3,A1 00238 0106 822C LDR* A2,A3 00239 0108 540A RF(4) PNZ NON ZERO ENTRY FOUND; A3=PONTER 00240 010A 1302 ADK A3,2 00241 010C EB20 CWK A3,TOPCOR 010E 7FFC A 00242 0110 5D0C RB(5) PC+2 00243 0112 5FC4 CIT RB CI NO NONZERO TABLE ENTRY 00244 * NON ZERO TABLE ENTRY FOUND (A3=POINTER) AFTER A ZERO ENTRY; CHANGE 00245 0114 8225 PNZ STR A2,A1 NONZERO ENTRY; STORE CONTENT IN ZERO ENTRY 00246 0116 0200 LDK A2,0 00247 0118 822D STR A2,A3 MAKE FOUND NONZERO ENTRY ZERO 00248 011A 5F22 RB PT * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0011 00249 EJECT 00250 * 00251 * -- READ RECORDS UNTIL :E[OS|OF] 00252 * 00253 011C F697 READ CFR LST,RA RASR 00254 011E EE21 CCK A6,'A ' 0120 4120 A 00255 0122 5034 RF(0) TEL FROM TELETYPE 00256 0124 EE21 CCK A6,'P ' 0126 5020 A 00257 0128 5008 RF(0) PTAP FROM PAPERTAPE (PTR) 00258 012A EE21 CCK A6,'C ' 012C 4320 A 00259 012E 502E RF(0) CARD FROM CARD READER (CRD) 00260 0130 5FE2 RB CI 00261 * 00262 * -- PAPERTAPE 00263 * 00264 0132 8120 PTAP LDKL A1,RHSR PAPERTAPE READ 0134 028A R 00265 0136 8141 ST A1,BYTEIN SET INPUT ROUTINE SWITCH 0138 046E R 00266 013A F6A1 CF LST,LRENU READ LINE NUMBER 013C 045E R 00267 013E F6A1 CF LST,NLCR 0140 027E R 00268 0142 F6A1 RIL CF LST,RLINE READ RECORD 0144 035A R 00269 0146 8140 LD A1,ISTAT STATUS ? 0148 034E R 00270 014A 5C3A RB(4) CIT :EOF, :EOS, ERROR (OR END OF TAPE) 00271 014C 92A0 ADKL RENU,2 RENU=RENU+2, NEXT LINE 014E 0002 A 00272 0150 EAA0 CWK RENU,MAXL2 0152 03E8 A 00273 0154 5E44 RB(6) CIT >= 00274 0156 5F16 RB RIL * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0012 00275 * 00276 * -- CONSOLE 00277 * 00278 0158 8120 TEL LDKL A1,RASR CONSOLE READ 015A 0262 R 00279 015C 5F28 RB PTAP+4 00280 * 00281 * -- CARD READER 00282 * 00283 015E 8120 CARD LDKL A1,RCRD READ FROM CARD READER 0160 04F0 R 00284 0162 5F2E RB PTAP+4 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0013 00285 EJECT 00286 * -- REPLACE 00287 * 00288 0164 F6A1 REPLAC CF LST,LRENU READ LINE NUMBER 0166 045E R 00289 0168 F6A1 CF LST,NLCR 016A 027E R 00290 016C 0620 LDK A6,' ' 00291 016E F693 CFR LST,WA WASR 00292 0170 F693 CFR LST,WA WASR 00293 0172 F693 CFR LST,WA WASR 00294 0174 F693 CFR LST,WA WASR 00295 * PRINT 4 BLANKS 00296 0176 8120 LDKL A1,RASR TELETYPE READ 0178 0262 R 00297 017A 8141 ST A1,BYTEIN SET INPUT ROUTINE SWITCH 017C 046E R 00298 017E F6A1 CF LST,RLINE READ LINE 0180 035A R 00299 0182 5F72 CIT1 RB CIT 00300 * 00301 * -- CHANGE TAB SETTING 00302 0184 F697 TAB CFR LST,RA RASR 00303 0186 EE21 CCK A6,'A ' 0188 4120 A 00304 018A 5014 RF(0) TA 00305 018C EE21 CCK A6,'F ' 018E 4620 A 00306 0190 5014 RF(0) TF 00307 0192 EE21 CCK A6,'X ' 0194 5820 A 00308 0196 5014 RF(0) T1 00309 0198 0100 LDK A1,NOTAB 00310 019A 8141 TS ST A1,TABTAB 019C 0350 R 00311 019E 5F8E RB CIT 00312 * * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0014 00313 * ASSEMBLER TAB'S 00314 01A0 8120 TA LDKL A1,ASMTAB 01A2 0006 R 00315 01A4 5F0C RB TS 00316 * FORTRAN TAB'S 00317 01A6 8120 TF LDKL A1,FORTAB 01A8 000A R 00318 01AA 5F12 RB TS 00319 * TEXT TAB'S 00320 01AC 8120 T1 LDKL A1,TX1TAB 01AE 0002 R 00321 01B0 5F18 RB TS * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0015 00322 EJECT 00323 * -- WRITE/PRINT RECORDS FROM TO 00324 * 00325 01B2 F697 WRITE CFR LST,RA RASR READ DESTINATION CHARACTER 00326 01B4 8641 ST A6,SA6 AND SAVE : A,U,P,.. 01B6 01C2 R 00327 01B8 F6A1 CF LST,LRENU START LINE NUMBER 01BA 045E R 00328 01BC F6A1 CF LST,DEC END LINE NUMBER 01BE 0430 R 00329 01C0 8620 LDKL A6,0 OUTPUT DEVICE: A,U,P,.. 01C2 0000 A 00330 SA6 EQU *-2 00331 END EQU *-2 00332 01C4 8141 ST A1,END SAVE END LINE NUMBER 01C6 01C2 R 00333 01C8 EE21 CCK A6,'U ' TEST DESTINATION 01CA 5520 A 00334 01CC 5046 RF(0) PUNCH PUNCH PAPERTAPE ON PTP 00335 01CE EE21 CCK A6,'A ' 01D0 4120 A 00336 01D2 5032 RF(0) LIST LIST ON TTY 00337 01D4 EE21 CCK A6,'P ' 01D6 5020 A 00338 01D8 5008 RF(0) PRINT LIST ON LPT 00339 01DA EE21 CCK A6,' ' 01DC 2020 A 00340 01DE 5058 RF(0) PRINTX LIST ON LPT WITHOUT LINENUMBERS 00341 01E0 5FD0 RB CIT 00342 * 00343 * -- LIST ON LINEPRINTER 00344 01E2 F6A1 PRINT CF LST,SLP SELECT LINE PRINTER OUTPUT AND START ON NEW PAGE 01E4 03DE R 00345 01E6 8520 PRL LDKL A5,BUFO+2 RESET BUFFER POINTER 01E8 02C2 R 00346 01EA F6A1 CF LST,PRENU RENU TO PRINT BUFFER 01EC 0400 R * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0016 00347 01EE F6A1 CF LST,PLINE RECORD TO PRINT BUFFER 01F0 039C R 00348 01F2 EAC0 CW RENU,END RENU ? 01F4 01C2 R 00349 01F6 5E76 RB(6) CIT1 >= 00350 01F8 92A0 ADKL RENU,2 RENU=RENU+2 01FA 0002 A 00351 01FC 5F18 RB PRL 00352 * 00353 * -- OUTPUT SINGLE RECORD ON CONSOLE 00354 01FE F6A1 CONS CF LST,LRENU READ LINENUMBER TO RENU (A10) 0200 045E R 00355 0202 83C1 ST NULL,END END = 0 0204 01C2 R 00356 * 00357 * -- LIST ON CONSOLE 00358 0206 F6A1 LIST CF LST,NLCR 0208 027E R 00359 020A 8120 LDKL A1,WASR SELECT CONSOLE OUTPUT 020C 0250 R 00360 020E 8141 ST A1,BYTOUT 0210 0626 R 00361 0212 5F2E RB PRL 00362 * 00363 * -- PUNCH (NO LINENUMBERS) 00364 0214 8120 PUNCH LDKL A1,PHSP SELECT PTP OUTPUT 0216 02AE R 00365 0218 8141 ST A1,BYTOUT 021A 0626 R 00366 021C F6A1 CF LST,LDTR PUNCH LEADER 021E 02A0 R 00367 0220 8520 PUL LDKL A5,BUFO+2 0222 02C2 R 00368 0224 F6A1 CF LST,PLINE RECORD TO PUNCH BUFFER 0226 039C R 00369 0228 92A0 ADKL RENU,2 RENU=RENU+2 022A 0002 A * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0017 00370 022C EAC0 CW RENU,END RENU ? 022E 01C2 R 00371 0230 5D12 RB(5) PUL 00372 0232 F6A1 CF LST,LDTR PUNCH TRAILER 0234 02A0 R 00373 0236 5FB6 RB CIT1 00374 * 00375 * -- PRINT ON LINEPRINTER WITHOUT LINENUMBERS 00376 0238 F6A1 PRINTX CF LST,SLP SELECT LINE PRINTER OUTPUT AND START ON NEW PAGE 023A 03DE R 00377 023C 8520 PRLX LDKL A5,BUFO+2 RESET BUFFER POINTER 023E 02C2 R 00378 0240 F6A1 CF LST,PLINE RECORD TO PRINT BUFFER 0242 039C R 00379 0244 92A0 ADKL RENU,2 RENU=RENU+2 0246 0002 A 00380 0248 EAC0 CW RENU,END RENU ? 024A 01C2 R 00381 024C 5D12 RB(5) PRLX 00382 024E 5FCE RB CIT1 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0018 00383 EJECT 00384 ************************************************************************* 00385 * BASIC IO SUBROUTINES (PROGRAMMED CHANNEL) * 00386 ************************************************************************* 00387 * ASSIGNMENTS 00388 ASR EQU /10 DEV ADDR 00389 HSR EQU /20 DEV ADDR 00390 HSP EQU /30 DEV ADDR 00391 S EQU 1 START 00392 H EQU 0 HALT 00393 * 00394 * WASR--OUTPUT ASCII FROM A6 TO TELETYPE 00395 * STATUS TO A7 00396 * 00397 0250 0700 WASR LDK A7,0 SELECT OUTPUT MODE 00398 0252 47D0 CIO A7,S,ASR 00399 0254 5C04 RB(4) *-2 00400 0256 4610 OTR A6,0,ASR OUTPUT CHAR 00401 0258 5C04 RB(4) *-2 00402 025A 4790 CIO A7,H,ASR STOP 00403 025C 4FD0 SST A7,ASR 00404 025E 5C04 RB(4) *-2 00405 0260 F03A RTN LST 00406 * 00407 * RASR--INPUT ASCII TO A6 FROM TELETYPE 00408 * STATUS TO A7 00409 * 00410 0262 0701 RASR LDK A7,1 SELECT INPUT MODE 00411 0264 47D0 CIO A7,S,ASR 00412 0266 5C04 RB(4) *-2 00413 0268 4E10 INR A6,0,ASR INPUT CHAR 00414 026A 5C04 RB(4) *-2 00415 026C 267F ANK A6,/7F MASK 7 BITS 00416 026E 4790 CIO A7,H,ASR STOP 00417 0270 4FD0 SST A7,ASR 00418 0272 5C04 RB(4) *-2 00419 0274 EE21 CCK A6,/0D20 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0019 0276 0D20 A 00420 0278 5402 RF(4) *+4 00421 027A 060A LDK A6,/0A REPLACE CR BY LF 00422 027C F03A RTN LST 00423 * 00424 * NLCR--PRINT NLCR ON TELETYPE 00425 * 00426 027E 8620 NLCR LDKL A6,/0D0A NLCR 0280 0D0A A 00427 0282 F693 CFR LST,WA WASR 00428 0284 E618 ECR A6,A6 00429 0286 F693 CFR LST,WA WASR 00430 0288 F03A RTN LST 00431 * 00432 * RHSR--READ OCTAD TO A6 FROM PTR 00433 * STATUS TO A7 00434 * 00435 028A 47E0 RHSR CIO A7,S,HSR 00436 028C 5C04 RB(4) *-2 00437 028E 4FE0 TI SST A7,HSR 00438 0290 5402 RF(4) IN NOT ACCEPTED 00439 0292 F03A RTN LST ACCEPTED:END OF TAPE OR ERROR 00440 0294 4E20 IN INR A6,0,HSR INPUT CHAR 00441 0296 5C0A RB(4) TI 00442 0298 47A0 CIO A7,H,HSR STOP 00443 029A 4FE0 SST A7,HSR 00444 029C 5C04 RB(4) *-2 00445 029E F03A RTN LST 00446 * 00447 * LDTR--PUNCH LEADER/TRAILER ON PTP 00448 * RETURN: A5,A6=0 A7=STATUS 00449 * 00450 02A0 057F LDTR LDK A5,/7F 00451 02A2 0600 LDK A6,0 00452 02A4 F6A1 CF LST,PHSP 02A6 02AE R 00453 02A8 1D01 SUK A5,1 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0020 00454 02AA 5C08 RB(4) *-6 00455 02AC F03A RTN LST 00456 * 00457 * PHSP--PUNCH OCTAD FROM A6 ON PTP 00458 * STATUS TO A7 00459 * 00460 02AE 47F0 PHSP CIO A7,S,HSP 00461 02B0 5C04 RB(4) *-2 00462 02B2 4630 OTR A6,0,HSP PUNCH 00463 02B4 5C04 RB(4) *-2 00464 02B6 47B0 CIO A7,H,HSP STOP 00465 02B8 4FF0 SST A7,HSP 00466 02BA 5C04 RB(4) *-2 00467 02BC F03A RTN LST * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0021 00468 EJECT 00469 ************************************************************************* 00470 * BUFFERS + IO ROUTINES FOR BUFFER IO * 00471 ************************************************************************* 00472 02BE 0000 A LPRFLG DATA 0 1 IF PRINT OUTPUT ON LINE PRINTER 00473 BUFA EQU * 00474 02C0 2020 A BUFO DATA /2020 TEXT OUTPUT BUFFER 00475 02C2 BUFI RES 67 TEXT INPUT BUFFER 00476 * 00477 * INPUT CB 00478 0348 02C2 R ICB DATA BUFI POINTER TO INPUT BUFFER 00479 034A 0082 A DATA 130 MAX REQUESTED RECORD LENGTH 00480 034C 0000 A ELI DATA 0 EFFECTIVE RECORD LENGTH 00481 034E 0000 A ISTAT DATA 0 RESULTING STATUS 00482 0350 0006 R TABTAB DATA DEFTAB DEFAULT TAB SETTING 00483 * 00484 * OUTPUT CB 00485 0352 02C0 R OCB DATA BUFO OUTPUT BUFFER 00486 0354 0000 A RLO DATA 0 REQUESTED RECORD LENGTH 00487 0356 0000 A DATA 0 EFFECTIVE RECORD LENGTH 00488 0358 0000 A DATA 0 STATUS 00489 * * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0022 00490 EJECT 00491 * RLINE -- READ A RECORD AND STORE INTO MEMORY 00492 * SLINE -- STORE A RECORD FROM INPUT BUFFER INTO MEMORY 00493 035A F6A1 RLINE CF LST,IREC INPUT RECORD 035C 0466 R 00494 035E 8240 LD A2,ELI EFFECTIVE LENGTH 0360 034C R 00495 * 00496 * INPUT READY; STORE RECORD INTO MEMORY 00497 0362 0100 SLINE LDK A1,0 CHAR COUNT 00498 0364 81CB ST CHAD,LTAB,RENU STORE CHAD(A9) AS START OF LINE IN TABLE AT RENU(A10) 0366 7C16 A 00499 0368 E227 SCR A2,CHAD STORE EFFECTIVE LENGTH OVER CHARACTER ADDRESS (CHAD=A9) 00500 036A 91A0 ADKL CHAD,1 036C 0001 A 00501 036E E908 SL CWR A1,A2 END OF RECORD? 00502 0370 5402 RF(4) *+4 00503 0372 F03A RT RTN LST 00504 0374 E344 LC A3,BUFI,A1 CHAR FROM BUFFER 0376 02C2 R 00505 0378 E327 SCR A3,CHAD STORE OVER CHAD(A9) 00506 037A E9A0 CWK CHAD,LTAB-20 END OF MEMORY? 037C 7C02 A 00507 037E 5608 RF(6) VOL => YES 00508 0380 91A0 ADKL CHAD,1 INCR CHARACTER ADDRESS 0382 0001 A 00509 0384 1101 ADK A1,1 INCR CHAR COUNT 00510 0386 5F1A RB SL 00511 * END OF MEMORY 00512 0388 0621 VOL LDK A6,'!' 00513 038A F693 CFR LST,WA WASR 00514 038C F693 CFR LST,WA WASR 00515 038E F693 CFR LST,WA WASR 00516 0390 83CB ST NULL,LTAB,RENU STORE NULL(A11) IN TABLE FOR RENU(A10) 0392 7C16 A 00517 0394 96A0 ADKL LST,4 ABNORMAL RETURN FROM SUBR 0396 0004 A * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0023 00518 0398 8F20 ABL CI TO COMMAND INPUT 039A 0050 R * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0024 00519 EJECT 00520 * PLINE -- RECORD TO OUTPUT BUFFER AND OUTPUT 00521 * RENU(A10) = POINTER TO RECORD 00522 * A5 = CHAR POINTER INTO BUFFER 00523 039C 844A PLINE LD A4,LTAB,RENU POINTER TO RECORD 039E 7C16 A 00524 03A0 553A RF(5) RPL EMPTY RECORD 00525 03A2 E330 LCR A3,A4 LENGTH 00526 03A4 23FF ANK A3,/FF 00527 03A6 5534 RF(5) RPL 00528 03A8 1401 PLL ADK A4,1 00529 03AA E130 LCR A1,A4 CHAR FROM MEMORY 00530 03AC E135 SCR A1,A5 INTO BUFFER 00531 03AE 1501 ADK A5,1 INCR OUTPUT BUFFER POINTER 00532 03B0 1B01 SUK A3,1 DECR LENGTH; READY? 00533 03B2 590C RB(1) PLL 00534 * 00535 03B4 9D20 WLINE SUKL A5,BUFO REQUESTED LENGHT 03B6 02C0 R 00536 03B8 8541 ST A5,RLO SET REQUESTED LENGTH 03BA 0354 R 00537 03BC 8140 LD A1,LPRFLG OUTPUT ON LINEPRINTER ? 03BE 02BE R 00538 03C0 5016 RF(0) XXX NO 00539 * FORM FEED IF 1ST TWO CHARS OF LINE ARE '$F' 00540 * REMAINING PART OF THAT LINE IS IGNORED 00541 03C2 8140 LD A1,BUFO+2 03C4 02C2 R 00542 03C6 E920 CWK A1,'$F' 03C8 2446 A 00543 03CA 5406 RF(4) PR 00544 03CC F6A1 CF LST,SLP DO A FORM FEED 03CE 03DE R 00545 03D0 F03A RTN LST 00546 03D2 F6A1 PR CF LST,LPREC LINEPRINTER 03D4 0632 R 00547 03D6 F03A RTN LST * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0025 00548 03D8 F6A1 XXX CF LST,OREC TELETYPE/PUNCHER 03DA 060C R 00549 03DC F03A RPL RTN LST 00550 * 00551 * SLP--SET LINEPRINTER AND SKIP TO A NEW PAGE 00552 03DE 0101 SLP LDK A1,1 00553 03E0 8141 ST A1,LPRFLG SET PRINTING ON LINEPRINTER 03E2 02BE R 00554 03E4 8120 LDKL A1,/0D0C TOP OF FORM 03E6 0D0C A 00555 03E8 8141 ST A1,BUFO SET CONTROL BYTES IN OUTPUT BUFFER 03EA 02C0 R 00556 03EC 0102 LDK A1,2 00557 03EE 8141 ST A1,RLO SET REQUESTED LENGTH 03F0 0354 R 00558 03F2 F6A1 CF LST,LPREC PRINT 03F4 0632 R 00559 03F6 8120 LDKL A1,' ' 03F8 2020 A 00560 03FA 8141 ST A1,BUFO RESET CONTROL BYTES 03FC 02C0 R 00561 03FE F03A RTN LST * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0026 00562 EJECT 00563 * PRENU -- RECORD NUMBER TO OUTPUT BUFFER 00564 * A5 IS POINTER INTO BUFFER 00565 * 00566 0400 840A PRENU LDR A4,RENU GET RENU(A10) 00567 0402 0300 LDK A3,0 DIVIDE INDEX 00568 * 00569 0404 0600 CLL LDK A6,0 DIGIT=0 00570 0406 8110 CL LDR A1,A4 00571 0408 994C SU A1,DEEL,A3 040A 042A R 00572 040C 5206 RF(2) PCYF 00573 040E 1601 ADK A6,1 DIGIT=DIGIT+1 00574 0410 8404 LDR A4,A1 00575 0412 5F0E RB CL 00576 * 00577 0414 1630 PCYF ADK A6,/30 ASCII 00578 0416 E635 SCR A6,A5 00579 0418 1501 ADK A5,1 00580 041A 1302 ADK A3,2 00581 041C EB20 CWK A3,6 041E 0006 A 00582 0420 5A1E RB(2) CLL 00583 0422 0620 LDK A6,/20 SPACE 00584 0424 E635 SCR A6,A5 00585 0426 1501 ADK A5,1 00586 0428 F03A RTN LST 00587 * 00588 042A 00C8 A DEEL DATA 200 LINE NUMBERS ARE REPRESENTED * 2 00589 042C 0014 A DATA 20 00590 042E 0002 A DATA 2 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0027 00591 EJECT 00592 * DEC -- READ DECIMAL FROM CONSOLE INTO A1 00593 * 00594 0430 062E DEC LDK A6,'.' 00595 0432 F693 CFR LST,WA WASR 00596 0434 0100 LDK A1,0 NUM=0 00597 * 00598 0436 F697 DLC CFR LST,RA RASR 00599 0438 1E30 SUK A6,/30 00600 043A 5214 RF(2) UIT 00601 043C EE20 CWK A6,9 043E 0009 A 00602 0440 510E RF(1) UIT 00603 0442 8504 LDR A5,A1 00604 0444 3D02 SLA A5,2 *4 00605 0446 9504 ADR A5,A1 *5 00606 0448 3D01 SLA A5,1 *10 00607 044A 9518 ADR A5,A6 + DEC 00608 044C 8114 LDR A1,A5 NUM 00609 044E 5F1A RB DLC 00610 * 00611 0450 E920 UIT CWK A1,MAXL 0452 01F4 A 00612 0454 5104 RF(1) *+6 00613 0456 3901 SLA A1,1 *2 (ALL NUMBERS * 2) 00614 0458 F03A RTN LST 00615 045A 063F LDK A6,'?' 00616 045C 5F2C RB DEC+2 00617 * 00618 * LRENU -- LINE NUMBER TO RENU 00619 * 00620 045E F6A1 LRENU CF LST,DEC 0460 0430 R 00621 0462 8284 LDR RENU,A1 00622 0464 F03A RTN LST * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0028 00623 EJECT 00624 ******************************************************************** 00625 * RECORD IO, REPLACING MONITOR IO * 00626 ******************************************************************** 00627 * IREC -- READ RECORD 00628 * HACK TO PROVIDE SOME OF THE MONITOR STANDARD READ FUNCTION FOR TTY AND PTR 00629 * RECORDS END BY FINDING A OR HAVING READ THE REQUESTED LENGTH 00630 * CONTROL CHARACTERS AND ARE NOT PUT IN THE RECORD BUFFER NOR 00631 * INCLUDED IN THE EFFECTIVE RECORD LENGTH. 00632 * ICB (INPUT CONTROL BLOCK) PROVIDES INPUT PARAMETERS 00633 * 00634 0466 B940 IREC ML 2,ICB A1=BUFFER ADDRESS A2=REQ LENGHT 0468 0348 R 00635 046A 0300 LDK A3,0 CHAR COUNT = 0 00636 046C F6A1 IB CF LST,RASR READ BYTE TO A6 046E 0262 R 00637 BYTEIN EQU *-2 CHAR INPUT ROUTINE 00638 0470 871C LDR A7,A7 00639 0472 542C RF(4) IEND ERROR OR EOT 00640 0474 8618 LDR A6,A6 00641 0476 580C RB(0) IB SKIP NULLS 00642 0478 EE21 CCK A6,/0A20 LINE FEED ? 047A 0A20 A 00643 047C 5016 RF(0) EOL END OF LINE 00644 047E EE21 CCK A6,/0D20 CR ? 0480 0D20 A 00645 0482 5818 RB(0) IB SKIP CR'S 00646 0484 EE21 CCK A6,/5C20 TAB? 0486 5C20 A 00647 0488 5020 RF(0) CKCTAB 00648 048A E625 STORE SCR A6,A1 STORE CHAR INTO BUFFER 00649 048C 1101 ADK A1,1 INCR BUFFER POINTER 00650 048E 1301 ADK A3,1 INCR CHAR COUNT 00651 0490 EB08 CWR A3,A2 CHAR COUNT NE REQ LENGTH? 00652 0492 5C28 RB(4) IB 00653 0494 8160 EOL LD* A1,ICB 1ST 2 CHARS 0496 0348 R * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0029 00654 0498 E920 CWK A1,':E' 049A 3A45 A 00655 049C 5402 RF(4) IEND 00656 049E 0701 LDK A7,1 :EOF/:EOS 00657 04A0 8341 IEND ST A3,ELI EFFECTIVE LENGTH 04A2 034C R 00658 04A4 8741 ST A7,ISTAT STATUS 04A6 034E R 00659 04A8 F03A RTN LST 00660 * CHECK TAB SETTINGS AND EXPAND TABS 00661 04AA 8440 CKCTAB LD A4,TABTAB 04AC 0350 R 00662 04AE 5826 RB(0) STORE NO TAB SETTING 00663 04B0 E530 LCR A5,A4 NUMBER OF TABS 00664 04B2 1401 ADK A4,1 1ST TAB 00665 04B4 8441 ST A4,PTRTAB 04B6 04EC R 00666 04B8 25FF ANK A5,/FF NUMBER OF TABS 00667 04BA 8541 ST A5,NTABS 04BC 04EE R 00668 04BE 0500 LDK A5,0 00669 04C0 E460 NT LC* A4,PTRTAB GET TAB POSITION 04C2 04EC R 00670 04C4 24FF ANK A4,/FF 00671 04C6 1C01 SUK A4,1 00672 04C8 EB10 CWR A3,A4 COMPARE CHAR POSITION AND TAB POSITION 00673 04CA 520E RF(2) SETTAB < 00674 04CC 9041 IM PTRTAB 04CE 04EC R 00675 04D0 1501 ADK A5,1 00676 04D2 ED40 CW A5,NTABS 04D4 04EE R 00677 04D6 5A18 RB(2) NT 00678 04D8 5F50 RB STORE 00679 * EXPAND 00680 04DA 0620 SETTAB LDK A6,/20 BLANK 00681 04DC E625 NB SCR A6,A1 INTO BUFFER * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0030 00682 04DE 1101 ADK A1,1 INCR BUFFER POINTER 00683 04E0 1301 ADK A3,1 INCR CHAR COUNT 00684 04E2 EB08 CWR A3,A2 CHAR COUNT EQ REQ LENGTH? 00685 04E4 5846 RB(0) IEND YES 00686 04E6 EB10 CWR A3,A4 CHAR POSITION AT TAB POSITION? 00687 04E8 5A0E RB(2) NB NO; PUT NEXT BLANK 00688 04EA 5F80 RB IB YES, AT TAB POSITION; EXPANSION READY 00689 04EC 0000 A PTRTAB DATA 0 POINTER TO TABS (STARTING WITH TAB1) 00690 04EE 0000 A NTABS DATA 0 NUMBER OF TABS * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0031 00691 EJECT 00692 * INPUT A CONVERTED CHARACTER FROM PUNCHED CARD TO A6, A7 IS STATUS 00693 04F0 B941 RCRD MS 2,SRC SAVE A1,A2 04F2 0562 R 00694 04F4 8740 LD A7,CBPTR BUFFER CHARACTER POINTER 04F6 0568 R 00695 04F8 544A RF(4) GETN GET NEXT CHARACTER 00696 * PTR = 0 => NO CARD => READ CARD 00697 * INPUT A PUNCHED CARD FROM THE CARD READER 00698 CR EQU /05 DEVICE ADDRESS 00699 CMULTI EQU /94 ADDRESS OF CARD READER MULTIPLEX WORDS 00700 04FA 4985 TST A1,CR BUSY? 00701 04FC 5C04 RB(4) *-2 00702 04FE 06A0 LDK A6,160 MPX COUNTS IN BYTES, ALSO FOR WORD TRANSFER 00703 0500 F918 C1R A1,A6 00704 0502 1101 ADK A1,1 LENGTH IN 2-COMPLEMENT 00705 0504 21FF ANK A1,/FF 00706 0506 A920 ORKL A1,/4F00 FUNCTION IS READ WORDS 0508 4F00 A 00707 050A 8220 LDKL A2,BCARD CARD IMAGE BUFFER ADDRESS 050C 056C R 00708 050E 9218 ADR A2,A6 00709 0510 1A02 SUK A2,2 END ADDRESS 00710 0512 B941 MS 2,CMULTI STORE MPX WORDS FOR CARD READER 0514 0094 A 00711 0516 41C5 CIO A1,S,CR START IO 00712 0518 5C04 RB(4) *-2 00713 * 00714 051A 4FC5 SST A7,CR 00715 051C 5C04 RB(4) *-2 READY? 00716 051E 871C LDR A7,A7 STATUS? 00717 0520 5002 RF(0) *+4 00718 0522 573C RF EXRCRD NONZERO; NO CARD? 00719 * LENGTH? 00720 0524 8140 LD A1,CMULTI 0526 0094 A 00721 0528 21FF ANK A1,/FF * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0032 00722 052A 5002 RF(0) *+4 RECORD INPUT OK; REMOVE TRAILING BLANKS 00723 052C 207F HLT NO 80 WORDS READ => ERROR 00724 * CARD IMAGE IN BUFFER 00725 * REMOVE TRAILING BLANKS 00726 052E 019E LDK A1,158 START COMPARING LAST CHARACTER FOR A BLANK 00727 0530 8244 RTB LD A2,BCARD,A1 0532 056C R 00728 0534 1A20 SUK A2,/20 BLANK ? 00729 0536 5406 RF(4) SRL NON BLANK 00730 0538 1902 SUK A1,2 00731 053A 5002 RF(0) SRL EMPTY RECORD 00732 053C 5F0E RB RTB CHECK NEXT 00733 053E 1102 SRL ADK A1,2 00734 0540 8141 ST A1,RLEN SAVE ACTUAL RECORD LENGTH TO CHECK FOR 0542 056A R 00735 * 00736 * GET NEXT CHARACTER ROUTINE 00737 0544 8740 GETN LD A7,CBPTR CHAR POINTER 0546 0568 R 00738 0548 EF40 CW A7,RLEN END OF RECORD? 054A 056A R 00739 054C 5406 RF(4) GN 00740 054E 060A LDK A6,/0A LF, INDICATION BUFFER END 00741 0550 0700 LDK A7,0 RESET POINTER TO INDICATE A NEXT CARD READ 00742 0552 5706 RF GN1 00743 0554 865C GN LD A6,BCARD,A7 GET CHARACTER 0556 056C R 00744 0558 1702 ADK A7,2 INCR POINTER 00745 055A 8741 GN1 ST A7,CBPTR SAVE POINTER 055C 0568 R 00746 055E 0700 LDK A7,0 STATUS OK 00747 0560 B920 EXRCRD MLK 2 RESTORE A1,A2 00748 0562 0000 A SRC DATA 0 SAVED A1,A2 00749 0564 0000 A DATA 0 00750 0566 F03A RTN LST 00751 * 00752 0568 0000 A CBPTR DATA 0 CURRENT CHAR POINTER INTO CARD BUFFER * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0033 00753 056A 0000 A RLEN DATA 0 RECORD LENGTH IN CHARS (TRAILING BLANKS REMOVED) 00754 056C BCARD RES 80 CARD INPUT BUFFER * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0034 00755 EJECT 00756 * OREC -- OUTPUT RECORD (TELETYPE AND PUNCH) 00757 * HACK TO PROVIDE (PART OF) THE MONITOR STANDARD WRITE FUNCTION: 00758 * 1ST 2 BYTES CONTROL THE CARRIAGE AND ARE IGNORED FOR TTY AND PTP AND. 00759 * AT RECORD END, CR LF ARE INSERTED AFTER THE BUFFER 00760 * OCB (OUTPUT CONTROL BLOCK) PROVIDES THE OUTPUT PARAMETERS 00761 * 00762 060C B940 OREC ML 2,OCB A1=BUFFER ADDRESS A2=REQUESTED LENGTH 060E 0352 R 00763 0610 030D LDK A3,/0D PUT CRLF AT THE END OF THE BUFFER 00764 0612 8404 LDR A4,A1 BUFFER ADDRESS 00765 0614 9408 ADR A4,A2 + REQ. LENGTH 00766 0616 E331 SCR A3,A4 00767 0618 030A LDK A3,/0A 00768 061A 1401 ADK A4,1 00769 061C E331 SCR A3,A4 00770 * 00771 061E 1102 ADK A1,2 SKIP 1ST 2 BYTES (CONTROL CHARS) 00772 0620 0300 LDK A3,0 MOVED CHAR COUNT = 0 00773 0622 E624 OB LCR A6,A1 00774 0624 F6A1 CF LST,WASR 0626 0250 R 00775 BYTOUT EQU *-2 OUTPUT ROUTINE 00776 0628 1101 CO ADK A1,1 INCR BUFFER POINTER 00777 062A 1301 ADK A3,1 INCR CHAR COUNT 00778 062C EB08 CWR A3,A2 CHAR COUNT NE REQ LENGTH? 00779 062E 5A0E RB(2) OB < 00780 0630 F03A RTN LST * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0035 00781 EJECT 00782 * LPREC -- OUTPUT RECORD (LINEPRINTER) 00783 * HACK TO PROVIDE (PART OF) THE MONITOR STANDARD/BASIC WRITE FUNCTION 00784 * 1ST 2 BYTES IN BUFFER CONTROL THE CARRIAGE (SKIP AFTER PRINT IS ASSUMED). 00785 * REQUESTED LENGTH INCLUDE THE 2 CONTROL BYTES. 00786 * LINEPRINTER WITH ITS CONTROL UNIT IS CONNECTED TO A MULTIPLEX CHANNEL. 00787 * OCB (OUTPUT CONTROL BLOCK) PROVIDES THE OUTPUT PARAMETERS: BUFFER ADDRESS 00788 * AND THE REQUESTED LENGTH (IN CHARACTERS) TO PRINT. 00789 * 00790 LP EQU /0D DEVICE ADDRESS 00791 LMULTI EQU /B4 ADDRESS OF LINE PRINTER MULTIPLEX WORDS 00792 * 00793 0632 B940 LPREC ML 2,OCB A1=BUFFER ADDRESS A2=REQUESTED LENGTH 0634 0352 R 00794 0636 8404 LDR A4,A1 BUFFER ADDRESS 00795 0638 9408 ADR A4,A2 + REQ. LENGTH = BUFFER END + 1 00796 063A 1C01 SUK A4,1 A4 POINTS TO LAST CHARACTER IN BUFFER 00797 * CHECK CONTROL CHARS; (WHICH IS THE STANDARD FOR SKIPPING 00798 * A SINGLE LINE) IS REPLACED BY /0D0A. NO OTHER STANDARD WRITE SKIPPING IS 00799 * SUPPORTED BY THIS DRIVER. WHEN REQUIRED, HARDWARE RECOGNIZED CONTROL MUST 00800 * BE INSERTED IN THE 1ST 2 BYTE POSITIONS OF THE BUFFER, AND THE DRIVER 00801 * OPERATES AS BASIC WRITE: 00802 * - 0D0A SKIPS A SINGLE LINE 00803 * - 0A0A SKIPS 2 LINES 00804 * - 0D0C SKIPS TO TOP OF PAGE 00805 * 00806 063C 498D TST A1,LP BUSY? 00807 063E 5C04 RB(4) *-2 00808 0640 8324 LDR* A3,A1 00809 0642 EB20 CWK A3,/2020 0644 2020 A 00810 0646 5406 RF(4) MS 00811 0648 8320 LDKL A3,/0D0A 064A 0D0A A 00812 064C 8325 STR A3,A1 00813 * SET MULTIPLEX WORDS 00814 064E F908 MS C1R A1,A2 * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0036 00815 0650 1101 ADK A1,1 2-COMPLEMENT 00816 0652 A120 ANKL A1,/FFF 0654 0FFF A 00817 0656 A920 ORKL A1,/8000 FUNCTION IS CHARACTER OUTPUT 0658 8000 A 00818 065A 8210 LDR A2,A4 BUFFER END 00819 065C B941 MS 2,LMULTI 065E 00B4 A 00820 0660 41CD CIO A1,S,LP ACTIVATE 00821 0662 5C04 RB(4) *-2 00822 0664 4FCD SST A7,LP WAIT FOR READY 00823 0666 5C04 RB(4) *-2 00824 0668 871C LDR A7,A7 00825 066A 5004 RF(0) *+6 00826 066C 207F HLT LINE PRINTER NOT OPERATING PROPERLY 00827 066E 5F3E RB LPREC RETRY 00828 0670 F03A RTN LST 00829 * 00830 BCOR EQU * START OF POOL 00831 * 00832 END TEXT * LEDIT - SMALL, RECORD ORIENTED TEXT EDITOR - NOV 20 2007 - V1B PAGE 0037 SYMBOL TABLE A0 0000 Z A1 0002 Z A10 0005 Z A11 0007 Z A12 0009 Z A13 000B Z A14 000D Z A15 000F Z A2 0004 Z A3 0006 Z A4 0008 Z A5 000A Z A6 000C Z A7 000E Z A8 0001 Z A9 0003 Z ASMTAB 0006 R ASR 0010 A BCARD 056C R BCOR 0672 R BUFA 02C0 R BUFI 02C2 R BUFO 02C0 R BYTEIN 046E R BYTOUT 0626 R CARD 015E R CBPTR 0568 R CHAD 0003 Z CI 0050 R CIT 0112 R CIT1 0182 R CKCTAB 04AA R CL 0406 R CLL 0404 R CMULTI 0094 A CO 0628 R CONS 01FE R CR 0005 A CTAB 000C R DEC 0430 R DEEL 042A R DEFTAB 0006 R DELETE 00CC R DLC 0436 R ELI 034C R END 01C2 R EOL 0494 R EXRCRD 0560 R FORTAB 000A R GETN 0544 R GN 0554 R GN1 055A R H 0000 A HCOR 7FFE A HSP 0030 A HSR 0020 A IB 046C R ICB 0348 R IEND 04A0 R IL 00E4 R IN 0294 R INIBUF 0090 R INSERT 00D6 R IREC 0466 R ISTAT 034E R JTAB 001E R KILL 007C R KL 0096 R LAST 00AE R LDTR 02A0 R LIST 0206 R LMULTI 00B4 A LP 000D A LPREC 0632 R LPRFLG 02BE R LRENU 045E R LST 000D Z LSTK 0040 R LTAB 7C16 A LTABM 7C14 A MAXL 01F4 A MAXL2 03E8 A MS 064E R N 0012 A NB 04DC R NEXT 006E R NLCR 027E R NN FFEE A NOTAB 0000 A NT 04C0 R NTABS 04EE R NULL 0007 Z OB 0622 R OCB 0352 R OREC 060C R P 0000 Z PACK 00F2 R PC 0104 R PCYF 0414 R PHSP 02AE R PL 00F6 R PLINE 039C R PLL 03A8 R PNZ 0114 R PR 03D2 R PRENU 0400 R PRINT 01E2 R PRINTX 0238 R PRL 01E6 R PRLX 023C R PT 00FA R PTAP 0132 R PTRTAB 04EC R PUL 0220 R PUNCH 0214 R RA 000B Z RASR 0262 R RCRD 04F0 R READ 011C R RENU 0005 Z REPEAT 00A2 R REPLAC 0164 R RHSR 028A R RIL 0142 R RLEN 056A R RLINE 035A R RLO 0354 R RPL 03DC R RT 0372 R RTB 0530 R S 0001 A SA6 01C2 R SETTAB 04DA R SL 036E R SLINE 0362 R SLP 03DE R SRC 0562 R SRL 053E R STORE 048A R T1 01AC R TA 01A0 R TAB 0184 R TABTAB 0350 R TEL 0158 R TEXT 0030 R TF 01A6 R TI 028E R TOPCOR 7FFC A TS 019A R TX1TAB 0002 R UIT 0450 R VOL 0388 R WA 0009 Z WASR 0250 R WLINE 03B4 R WRITE 01B2 R XXX 03D8 R P8ASM, version 0.7. End of assembly, 0 errors.