/PDP-8 PS/8 EDITOR (VERSION EDIT.002) /UPDATED FOR RK08,RF08 DISK /COPYRIGHT 1968, 1969, 1970, DIGITAL EQUIPMENT CORP.20MAYNARD, MASS. / *1 /MISCELLANEOUS BUFEND, 6100 /WARNING FOR END OF BUFFER P7700, 7700 /MONITOR CALL LOCATION K6600, 6600 /FIELD 1 START POINT NOP /4,5,6 FOR ODT NOP NOP M77, -77 C77, 77 M40, -40 C100, 100 C277, 277 /QUESTION /AUTO-INDEX REGISTERS AXOUT, 0 /OUTPUT INDEX AXCOMB, 0 /COMBINE POINTER. AXTEM, 0 /TEMPORARY INDEX. AXIN, 0 /STORAGE INDEX /NUMBERS M4, -4 /LETTER COUNT P177, 177 MCR, -215 M240, -240 P40, 40 C200, 200 /(START & RESTART) /LISTS LIST7=. /TAG SEARCH C240, 240 257 /(303 - FOR FORTRAN) LIST4=. /OUTPUT LIST. CTAB, 211 C215, 215 212 377 M27, -27 CX51=.-1 /ILLEGAL CONTROL MASK LIST5=. /INPUT LIST FOR "AONE". 240 LIST6=. /INPUT LIST FOR "SFOUND". 225 / ^U C214, 214 BELL, 207 C212, 212 CRO, 377 LIST3=. /EXCRETION LIST 215 /LIST BRANCHER. 000 /(SEARCH CHARACTER) RST3I, RESET3 /RESET AND SAVE BUFFER MCHIN1, -CHIN-1 /CONSTANTS CCR=C215 CLF=C212 MTABS, -10 DELT, DELP CHI1, CHIN IGNORE, CHIN+1 END, 200 KEYBD, I33 /NEXT CCON, JMP I AXCOMB COM1-1 UTR1, UTRA FIN1, FIND LIS1, LIST LIS, LISTER NINE, 12 NUMB, -272 OUT1, OUT OUTL1=. LOW, OUTL CZ, TLS /CONTENTS OF START ONUM, GTOP SORTJ, SORTB PACK1, PACBUF /SEARCH SXS1, TAD CHAR /CONTENTS OF L3 SXS2, SLOOK&177+5200 /JMP SLOOK L3I, L3 /PATCH POINTER L2I, L2 /CONTINUE SEARCH - LETTERS ENDLNI, ENDLN SXGO, XCRET+1 /SPACES TO TABS SPCNO, MOR+4 /PACK SPCGO, MOR+1 /SORT SPLAT, 334 /\ - ACKNOWLEDGE RUBOUT /CHAR IS ALWAYS SET BY OUT, SOMETIMES BY SORTB; /IT IS ALWAYS USED BY PACK AND SORTB. CHAR, 0 MOV1=. COUNTP, 0 /NO. OF PAGES. CNT=. /PRINT COUNTER XCT, 0 /UNPACK SWITCH XCTIN, 0 /PACK SWITCH ECHOSW, 1 /N0N-ZERO TO PRINT SAVE, 0 TABIND, 0 /TABS OR SPACES TEMP, 0 THIS, 0 /LINE POINTER. OUTDEV, OUTL /POINTER TO OUT. SUB. XSAV, 0 /HOLD INPUT POINTER. BUFR, 200 CFRS, FRST KILL1, KILL CHKARG, CHKARX ERSW, ERROR /ERROR ROUTINE L1I, L1 EKILLL, 0 /E CMD SWITCH 1 IF E NOT ALLOWED /I-O RELATED POINTERS AND WORDS OCLSI, OCLOSE /FILE CLOSE ROUTINE BUFRDI, BUFRD /OR CHIN...IN DEVICE POINTER BUFWTI, BUFWT /WRITE OUTPUT TO DEVICE CLFLI, FLCLOS /SET TO CLOSE FILE PSETUP, SETUP JMPCH, PUNCH&177+5200 /DESTROYED BY YANK /ERROR ROUTINE POINTERS SERR0I, SERR0 SERR1I, SERR1 SERR2I, SERR2 SERR3I, SERR3 SERR4I, SERR4 GTEM=. /NEXT 6-BITS OF UNPACK DTEM=. /NEXT POINTER IN DELETE CHAIN ERROR=JMS . /ERROR ROUTINE 0 ELIM, 7600 /GRP2-CLA TAD C277 JMS I OUTL1 /PRINT "?" TAD CZ /RESET PATCHES DCA I TE1 JMPTE1, JMP I TE1 FIRS, TAD ARG2 /COMMA JMP I ONUM /SWAP ARGS. UPAROI, UPAROW /GENERATE ^ CHARACTER MONITOR, MONIT STRIND, 0 STRFIN, SFIND1 CZONE, TAD CZ TE1, START /VARIABLES FRST, 0 /FIRST LINE ADDRESS THSN, 0 /CURRENT LINE NO. LSTN, 0 /LAST LINE NO. TCNT, 0 /TAB COUNT ADD, 0 /CHAR. BUF. IN ARG0, 0 ARG1, 0240 ARG2, -1 POTYPE, OTYPE COMM5, COM5 K7600, 7600 TEMPO, 0 K1210, 1210 K1320, 1320 MOV2=TEMPO *177 2600 /EDITOR START,RESTART POINT /EITHER 2600 OR VALUE OF RESET *200 JMP I 177 /START AT 2600 OR RESET START, TLS /RESTART IN EDITOR MODE TAD LOW DCA OUTDEV /INITIALIZE FOR KEYBD DCA TABIND /CLEAR TAB INDICATOR ISZ ECHOSW /SETUP FOR ECHO DCA LIST3+1 TAD SXS1 DCA I L3I TAD ERSW /RESET ERROR AT L1 DCA I L1I TAD CZONE DCA I COMM5 /WIPED BY JERK TAD CCR JMS I OUT1 TAD SIGN /ED COMD MODE SIGN IS # JMS I OUT1 GTOP, DCA ARG0 /HERE VIA ONUM DCA ARG2 GEXP, TAD NONE /IMPLICIT ADD GMIN, TAD CMPT DCA G2 DBCV2, DCA TEMP JMS I CHI1 /(CHIN) TAD NUMB CLL /CHECK FOR DIGIT TAD NINE SZL JMP COUNT /CONTINUED NUMBER GLOM, CLA TAD TEMP G2, HLT /(NOP) OR (CIA) TAD ARG2 DCA ARG2 JMS SORTB LIST1-1 OPS1-LIST1 /HANG ON TO COMMAND. TAD CHAR DCA SAVE JMS I CHI1 /(CHIN) JMS SORTB /RETURN MUST FOLLOW LIST1A-1 OPS1A-LIST1A ERROR /.AND. RETRN, TAD ARG0 /IF ARG0=0,ARG0=ARG2 SNA TAD ARG2 DCA ARG0 TAD ARG2 /.AND. CMA TAD ARG0 /ARG1=ARG0-ARG2-1 SMA ERROR /.AND. DCA ARG1 /ARG0 .LE. ARG2 TAD ARG0 /.AND. SPA CLA /ARG0 .GE. 0 ERROR /(ISZ ECHOSW)-FOR HALF-DUPLEX TAD SAVE JMS SORTB LIST2-1 OPS2-LIST2 ERROR LIST2=. /COMMAND LETTERS 305 /E 301 /A 311 /I 303 /C 313 /K 304 /D 314 /L 316 /N 320 /P 322 /R 312 /J 306 /F 324 /T 315 /M 307 /G 323 /S 331 /Y 321 /Q 302 /B NONE, -41 /"NOP-CIA" SIGN, "# SORTB, 0 /SORT AND BRANCH ROUTINE. SZA DCA CHAR /CHAR IS ASSUMED OR SET. TAD I SORTB ISZ SORTB DCA AXTEM TAD I AXTEM SPA JMP SEX CMPT, CIA TAD CHAR SZA CLA JMP .-6 TAD AXTEM /MATCH FOUND. TAD I SORTB DCA SORTB TAD I SORTB DCA SORTB JMP I SORTB ///// SEX, ISZ SORTB /MATCH NOT FOUND. CLA JMP I SORTB COUNT, DCA SORTB TAD TEMP RTL CLL TAD TEMP RAL TAD SORTB JMP DBCV2 /GET NEXT OPS2, ENDFIL /E APP /A XNS /I CNGE /C KILL /K DELE /D LIST /L COMBO /N PUNCH /P TELE /R JERK /J BARROW /F PUNCT /T MOVEM /M GETTAG /G XCRET /S YANK /Y Q /Q CORSPC /B EOL, JMS I ENDLNI /END LINE ISZ LSTN ISZ THSN TAD BUFEND CLL CIA TAD AXIN SNL CLA JMP MOR TAD BELL /BELL IS WARNING JMS I OUTL1 JMP I FULLI FULLI, FULL //////// APP1, TAD LSTN /APPEND DCA ARG0 JMP INS ///// CNGE1, JMS I DELT /CHANGE XNS1, TAD ARG0 /INSERT SNA CLA /TEST FOR TOP INS, ISZ ARG0 /SET TO TOP TAD ARG0 JMS I FIN1 /FIND THE POINTER DCA THIS ISZ TABIND /SET TAB INDICATOR CDF 10 TAD I THIS /ADDRESS TEXT IN FIELD 1 CDF 0 DCA XSAV CMA TAD ARG0 DCA THSN AONE, TAD BUFR /BEGIN LINE DCA AXIN DCA XCTIN MOR, JMS I BUFRDI /BUFRDI=BUFRD OR CHIN JMS I SORTJ LIST5-1 INLIST-LIST5 JMS PACBUF JMP MOR PACBUF, 0 /PACK A CHARACTER CLL TAD AXIN /DON'T ADD CHARS. TAD K1210 /IF AXIN ABOVE 6570 SZL CLA ERROR TAD CHAR TAD M240 SPA JMP ESCA /277 TAD M77 SMA SZA /("SZA" FOR MOD 37) JMP ESCA TAD P40 SNA CLA JMP ESCA /340-377 AND 200-237 TR1, TAD CHAR /240-336 AND C77 JMS PCK1 JMP I PACBUF ////// ESCA, CLA TAD C77 JMS PCK1 JMP TR1 PCK1, 0 ISZ XCTIN JMP ROT DCA UTRA TAD UTRA TAD ADD CDF 10 /TEXT IN FIELD 1 DCA I AXIN CDF 0 DCA ADD JMP I PCK1 ///// ROT, CLL RTL RTL RTL DCA ADD CMA DCA XCTIN JMP I PCK1 UTEM=PCK1 /UNPACK TEMPORARY UTRA, 0 /UNPACK CHARACTER. JMS GET1 JMP EXTR /EXTEND UT2, SPA CLA /NORM & EXTEND6 TAD C100 /300-337 & 340-376 UT1, TAD C200 /240-276 & 200-236 TAD UTEM JMP I UTRA ////// EXTR, JMS GET1 JMP UT1 /QUESTION MARK CMA DCA GET1 /UNPACK ONLY C.R.-(DELEE ALL FOR MOD 37) TAD GET1 /AND TAB AND CX51 /AND 2(13,17,31,33,35,37) SZA CLA /... JMP UTRA+1 /... TAD GET1 /... JMP UT2 GET1, 0 /UNPACK 6-BITS ISZ XCT JMP GET3 CDF 10 /FIELD 1 TEXT TAD I AXOUT CDF 0 DCA GTEM TAD GTEM RTR CLL RTR RTR JMP GEND ///// GET3, CMA DCA XCT TAD GTEM GEND, AND C77 DCA UTEM /SAVE TAD UTEM TAD M77 SNA CLA JMP I GET1 /1ST IF 77 ISZ GET1 TAD UTEM TAD M40 JMP I GET1 INLIST=. SPACES /SPCS CTRLU /^U FULL /FORM FULL /BELL RUB4+1 /L.F. RUB1 /R.O. EOL /C.R. FULL, TAD IGNORE /IF WE ARE IN APPEND MODE,WE MUST TAD MCHIN1 /RECOGNIZE A FORM FEED WITH AN EMPTY SNA CLA /BUFFER, AND EXIT TO JMP I TE1 /COMMAND MODE TAD LSTN /IF A FORM FEED IS READ WHILE THE BUFFER SNA CLA /IS STILL EMPTY,WE IGNORE JMP I MORI /THE FORM FEED AND CONTINUE JMP I TE1 MORI, MOR SETUP, 0 TAD I SETUP /GET READ AREA FROM ARGS DCA BUFRDI TAD I SETUP /LOCATION FOR IGNORED CHARACTERS IAC DCA IGNORE ISZ SETUP /SETUP PROPER RETURN POINT TAD I SETUP DCA SETUP CLL /DON'T READ ANY MORE IF TAD BUFR /THE BUFFER IS OVERFLOWING TAD K1320 SZL CLA ERROR JMP I SETUP DELP, 0 JMS I CHKARG /TEST FOR VALID ARGS TAD ARG0 JMS I FIN1 DCA THIS /DECREASE TOTAL. TAD ARG1 TAD LSTN DCA LSTN TAD ARG0 DCA THSN /ARGS AOK DEL0, CDF 10 TAD I THIS DCA DTEM TAD I DTEM /CHAIN TOGETHER DCA I THIS CDF 0 ISZ ARG1 JMP DEL0 JMP I DELP DELE, JMS DELP /DELETE JMP I TE1 EXLAS, CLA CLL CMA RAL /PRINT LAST EXNEX, TAD THSN /PRINT NEXT IAC EX, SNA ERROR DCA ARG0 /SAVE EFFECTIVE ARG. CMA DCA ARG1 LIST, TAD LOW /SET KEYBOARD AS OUTPUT DCA OUTDEV /(ISZ ECHOSW) - FOR HALF-DUPLEX ISZ TABIND /SET TAB INDICATOR JMS LISTER JMP I TE1 LISTER, 0 TAD ARG0 /LIST SZA CLA /TEST ARGS JMP L0 TAD LSTN /SET FULL RANGE CIA DCA ARG1 ISZ ARG0 /SET TO #1 L0, TAD ARG0 CIA /PROTECT OUTPUT TAD LSTN SPA CLA L1, ERROR /OR JMP I TE1 TAD ARG0 JMS I FIN1 DCA THIS /SAVE POINTER CMA CDF 10 TAD I THIS /GET START DCA AXOUT TAD I AXOUT /SAVE POINTER FOR SEARCH. DCA XSAV CDF 0 CMA DCA XCT TAD ARG0 /SET POINTER DCA THSN ISZ ARG0 /SET NEXT LINE L2, JMS I UTR1 /UNPACK JMS I OUT1 /PRINT JMS I CPTSTI /TEST FOR ^O FROM KEYBOARD JMP L3 TAD C317 /FOR ^O TO BE PRINTED JMS I UPAROI /GENERATE ^O JMP I TE1 L3, TAD CHAR /OR (JMP SLOOK) TAD MCR SZA CLA /TEST FOR EOL JMP L2 ISZ ARG1 /TEST LINE COUNT JMP L0 /GET NEXT LINE JMP I LISTER /WAIT CPTSTI, CTRLP /TEST FOR ^O AND ^C C317, 317 /SEARCH ROUTINES SLINE, TAD CCR /LINE FEED DURING SEARCH DCA CHAR JMS I ENDLNI ISZ ARG0 /MOVE POINT ISZ THSN /BUMP CURRENT LINE COUNT ISZ LSTN /ADD A LINE. SBAR, TAD CCR /CTRL-U JMS I OUT1 TAD BUFR /RESTART PACK BUFFER DCA AXIN DCA XCTIN SFOUND, JMS I CHI1 /(CHIN) JMS I SORTJ /TEST INSERTS LIST6-1 SRNLST-LIST6 SGOT, JMS I PACK1 /PACK INSERTS JMP SFOUND /MORE INPUT SLOOK, JMS I SORTJ /TEST PRINTED CHARS. LIST3-1 LISTGO-LIST3 JMS I PACK1 /PACK SEARCHED CHARS. JMP I L2I /CONTINUE SEARCH SRETN, JMS I ENDLNI /END OF SEARCHED LINE ISZ ARG1 /TEST COUNT JMP I LIS1 /CONTINUE TAD ARG2 /TEST FOR ENTIRITY SZA CLA JMP I TE1 /TERMINATE ISZ ARG2 /COMPRESS DCA ARG0 /CLEAR COUNT DCA ECHOSW /NON-PRINT TAD END DCA BUFR /RESET BUFFER JMP I SXGO /(XCRET+1) SCONT, JMS I KEYBD /S-BELL DCA LIST3+1 JMP I L2I CHIN, 0 /READ A CHAR. SUB. DCA CHAR /CLEAR CHARACTER JMS I KEYBD AND P177 /MASK PARITY SNA /IGNORE BLANK AND L/T JMP CHIN+1 TAD C200 /RESTORE CHARACTER JMS I OUT1 /ECHO INPUT TAD CHAR JMP I CHIN FIND, 0 /LOCATE LINE BUFFER CIA SMA ERROR /TOO SMALL DCA TEMP TAD TEMP IAC TAD LSTN SPA CLA ERROR /TOO LARGE TAD CFRS JMP FIND1 FIND2, CDF 10 TAD I SAVE /CHAIN THROUGH LIST. CDF 0 SZA /FAILSAFE FIND1, DCA SAVE ISZ TEMP JMP FIND2 TAD SAVE JMP I FIND CON, 6030 /CONVERSION CONSTANTS 7634 7766 7777 BOX=COUNTP VAL=ARG0 PRNT, TAD ARG2 /: OR = DCA VAL TAD M4 DCA CNT TAD ADDR DCA XYZ+2 FLOOZ, DCA BOX CLL TAD VAL /IF VAL IS TOO LARGE, IT LOOKS SMA CLA /LIKE A NEG NO. THE LINK TAD K50 /DETERMINES THE END POINT IN THAT CASE TAD K7430 /7430=SZL; 7500=SMA DCA XYZ+3 JMP .+4 ISZ BOX CLL XYZ, DCA VAL TAD VAL NOP /TAD CON +() SOME DISPLACEMENT SMA /OR, IF VAL TOO BIG,SZL JMP XYZ-2 /KEEP ADDING THE SAME CONSTANT CLA TAD BOX /BOX HAS THE NUMBER COUNT TAD C260 JMS I OUTL1 ISZ XYZ+2 /ADD IN NEXT CONVERSION CONSTANT LATER ISZ CNT /DONE ALL FOUR? JMP FLOOZ JMP I TE1 C260, 260 ADDR, TAD CON K50, 50 K7430, 7430 OUT, 0 /OUTPUT A CHARACTER DCA CHAR TAD ECHOSW SNA CLA /TEST PRINT CONTROL JMP I OUT JMS I SORTJ LIST4-1 OUTLIS-LIST4 ISZ TCNT /COUNT ONE LETTER TAD CHAR OUTX, JMS I OUTDEV JMP I OUT ///// OUTCRL, TAD CCR JMS I OUTDEV DCA TCNT TAD CLF JMP OUTX ///// OUTRT, TAD CTAB JMS I OUTDEV CIF 10 JMS I POTYPE /TEST TYPE OF OUTPUT SPA CLA /IS IT DIRECTORY? JMP I OUT /YES..NO RUB OUT TAD CRO JMP OUTX TAD CRO JMP OUTX OUTTAB, TAD TABIND SNA CLA JMP OUTRT TAD TCNT TAD MTABS SMA JMP .-2 DCA TCNT TAD C240 JMS I OUTDEV ISZ TCNT JMP .-3 JMP I OUT /I-O SUBROUTINES XCRET, JMS I KEYBD /EXAMINE OR SEARCH DCA LIST3+1 /SAVE OBJECT CHAR. TAD SXS2 DCA I L3I /MAKE LISTER JUMP TO SLOOK TAD BUFR DCA AXIN /BUILD NEW TEXT IMAGE HERE DCA XCTIN TAD CHI1 /READ POINT IS CHIN IAC DCA IGNORE JMP I LIS1 APPL, APP1 XNSL, XNS1 CNGEL, CNGE1 I33, 0 KSF JMP .-1 KRS TAD X203 /^C CHECK SNA CLA JMP I MONITO KRB JMP I I33 X203, -203 OUTL, 0 TSF JMP .-1 TLS CLA JMP I OUTL APP, TAD APPL /SET UP APPEND, CHANGE,INSERT TO WORK JMP SET /EACH READS KEYBOARD, NOT DEVICE XNS, TAD XNSL JMP SET CNGE, TAD CNGEL SET, DCA DEST /RETURN POINT ISZ ECHOSW JMS I PSETUP CHIN /KEYBOARD INPUT DEST, APP1 OUTLIS=. /SPECIAL OUTPUTS OUTTAB /211 OUTCRL /215 OUTX+1 /212 OUTX+1 /377 TAGLIST=. GTAG2 /SPACE GTAG2 // GTAG2 /TAB GTAG2 /C.R. CTRLP, 0 /CHECK FOR CTRL-C & CTRL-O KSF JMP I CTRLP KRS AND P177 TAD M3A SNA JMP I MONITOR TAD M14 SZA CLA JMP I CTRLP ISZ CTRLP KCC JMP I CTRLP M3A, -3 M14, -14 PUNCH, NOP /WAIT IF LO SPD PUNCH ISZ ECHOSW TAD BUFWTI /SETUP TO WRITE INTO BUFFER DCA OUTDEV PUNC, JMS I LIS /WRITE THE BUFFER TAD C214 /FORM FEED JMS I OUTDEV PUNCT, CDF 10 TAD I K7600 /IF OUTPUT DEVICE EXISTS CDF 0 /TRAILER SHOULD WRITE IT TO DEVICE SNA CLA JMP I TE1 /DISABLES 'T' IF NO OUTPUT TAD BUFWTI DCA OUTDEV TAD M40 /TRAILER DCA CTRLP CIF 10 JMS I POTYPE /LEADER ONLY TO NON SMA CLA /DIRECTORY DEVICES JMS I OUTDEV ISZ CTRLP JMP .-5 TSF /PREVENT GARBAGE COMING JMP .-1 /BACK. JMP I TE1 TELE=. TELEN, TSF JMP .-1 DCA ECHOSW JMS I PSETUP /SETUP TO READ FROM A DEVICE BUFRD APP1 /APPEND TEXT TO BUFFER YANK, TAD COM1 /YANK KILLS 'P' PART OF N DCA I CCON+1 JMP COMBOA COMBO, TAD JMPCH /YANK WIPES THIS INSTR. DCA I CCON+1 COMBOA, TAD ARG0 /NEXT SNA IAC CIA DCA COUNTP TAD CCON /(JMP I AXCOMB) DCA I TE1 COMB, TAD CCON+1 /COM1-1 DCA AXCOMB DCA ARG0 DCA ARG2 DCA TABIND /CLR IN CASE MULTIPLE N JMP PUNC ///// COM1, JMP I KILL1 /KILL JMP TELEN ISZ COUNTP JMP COMB CLA CLL CML RAL DCA THSN /.=1 ON RETURN COM5, TAD CZ /RESTORE LOC 200. DCA I TE1 JMP I TE1 ////////////////////////////////////////// /IT IS VITAL TO KEEP DUMB1 AND COM5 ON THE SAME PAGE DUMB1, JERK1 /////////////////////////////////////////// LIST1=. 212 240 253 254 255 256 257 274 275 276 000 375 242 244 377 272 LIST1A, 215 225 203 GETTAG, ISZ THSN /TAG SEARCH TAD ARG0 SNA /USE .+1 IF NO ARG TAD THSN DCA ARG0 SKP GTAG2, ISZ ARG0 GTAG1, IAC TAD ARG0 JMS I FIN1 DCA AXOUT CMA DCA XCT JMS I UTR1 /UNPACK JMS I SORTJ LIST7-1 TAGLIST-LIST7 JMP I LIS1 MP1=ARG1 MP2=ARG0 MP3=ARG2 MOVEM, TAD MOV1 /TEST FOR GOOD ARGS CIA TAD ARG2 SPA CLA JMP .+6 TAD MOV2 CMA TAD ARG2 SPA SNA CLA ERROR /FAULTY LOGIC IN COMMAND TAD MOV1 JMS I FIN1 /FIRST LINE DCA MP1 IAC TAD MOV2 JMS I FIN1 DCA MP2 TAD ARG2 JMS I FIN1 DCA MP3 CDF 10 /ALL FOUND TAD I MP1 /SWAP POINTERS DCA TEMP TAD I MP2 DCA I MP1 TAD I MP3 DCA I MP2 TAD TEMP DCA I MP3 CDF 0 JMP I TE1 SRNLST=. SBAR /B.A. L2 /FORM FEED SCONT /BELL SLINE /LINE FEED RUB1 /RUB OUT LISTGO=. SRETN /C.R. SGOT /SEARCH CHAR. FOUND RUB1, TAD AXIN CIA TAD BUFR TAD XCTIN SZA CLA /TEST NULL LINE TAD ECHOSW SNA CLA /TEST INPUT JMP I IGNORE /NULL LINE TAD SPLAT JMS I OUT1 /ECHO "BSLSH" TAD AXIN DCA MOV1 CDF 10 DCA I BUFR /PREVENTS INFINITE RUBOUTS TAD I MOV1 ISZ XCTIN /TEST HALF JMP RUB2 AND C77 TAD M77 SZA CLA /TEST EXTENSION JMP RUB4 RUB3, CMA DCA XCTIN RUB5, CMA TAD AXIN DCA AXIN TAD I MOV1 AND P7700 RUB4, DCA ADD CDF 0 JMP I IGNORE /CHIN+1 /////// RUB2, AND P7700 TAD C100 SZA CLA JMP RUB3 DCA I MOV1 JMP RUB3+1 SPACES, TAD ECHOSW /SPACE READIN CLA /OR SZA CLA IF B OPTION JMP I SPCNO /PACK - (MOR+4) CMA /SET 1 SPACE SP2, DCA CNT JMS I BUFRDI /BUFRDI=BUFRD OR CHIN TAD M240 SNA CLA JMP SP2 /IGNORE EXTRA SPACES. TAD CHAR DCA SAVE /SAVE NON-SPACE ISZ CNT TAD M27 /TAB TAD C240 /SPACE DCA CHAR JMS I PACK1 /(PACBUF) TAD SAVE JMP I SPCGO /SORT - (MOR+1) MOVE, TAD ARG0 /ARG2 .GE. ARG0 CIA TAD ARG2 SPA CLA ERROR TAD ARG0 DCA MOV1 TAD ARG2 DCA MOV2 JMP I ONUM /(GTOP) OPS1, EXNEX /LINEFEED GEXP /SPACE GEXP /PLUS FIRS /COMMA GMIN /MINUS PERI /POINT SLAS /SLASH EXLAS /BACKUP PRNT /= EXNEX /ALT DBCV2 /DUMMY AMODE /ALTMODE DBLQUO /" MOVE /DOLLAR ELIM /COMMAND RUBOUT PRNT /: GTOP-2 /CR START /CTRL U MONIT /^C (MONITOR RESTART) OPS1A, RETRN /RETURN OLDTE1, START /CTRL U MONIT /CTRL C ENDFIL, TAD EKILLL /IS E COMD ALLOWED SZA CLA ERROR /NO..WAS NO INPUT SPECIFIED CLA CMA DCA ARG0 TAD JMPTE1 /SKIP LISTER IF EMPTY BUFFER DCA I L1I TAD FLCLSI /CLOSE FILE SETUP DCA ELIM /CLOSES FILE ON READ FAILURE JMP I COMBOP COMBOP, COMBO FLCLSI, JMP I CLFLI AONEI, AONE CTRLU, TAD C325 /ECHO ^U JMS I UPAROI TAD CCR JMS I OUT1 JMP I AONEI C325, 325 CHKARX, 0 /USED BY DELETE TAD ARG0 CIA IAC TAD ARG1 TAD LSTN SPA CLA ERROR JMP I CHKARX PERI, TAD THSN / FOR .= SKP SLAS, TAD LSTN /FOR /= DCA TEMP DCA CHAR JMP I .+1 GLOM ENDLN, 0 JMS I PACK1 CDF 10 TAD ADD SZA DCA I AXIN TAD BUFR DCA I THIS TAD XSAV DCA I BUFR TAD BUFR DCA THIS ISZ AXIN TAD AXIN DCA BUFR DCA XCTIN CDF 0 JMP I ENDLN MONIT, JMS FXSTWD /SET JOB STATUS TO SAVE CORE TSF JMP .-1 JMP I K7600 FXSTWD, 0 /CLEARS BIT 11 OF JOB STATUS CIF 10 JMS I JSWSET /IF NONZERO TEXT,SAVE BUFFER JMP I FXSTWD SPCP1A, SPACES+1 RNTRA, RNTR BUFRD1, BUFRD+1 RESET3, JMS FXSTWD CIFTEN, CIF 10 /LOCK MONITOR IN JMS I P7700 10 TAD CIFTEN DCA I BUFRD1 DCA EKILLL TAD OLDTE1 DCA TE1 CZAD, TAD CZ DCA I TE1 TAD K7600 DCA ELIM TAD K7600 DCA I RNTRA TAD K7600 /GRP2 CLA DCA I SPCP1A TAD LOW DCA OUTDEV ISZ ECHOSW TAD JMPCH DCA I CCON+1 ISZ FXSTWD /WASTE TIME FOR TTY FLAG JMP .-3 CIF CDF 10 JMP I .+1 START1 JSWSET, INSET /READ WRITE AND RELATED ROUTINES OURECS=4 /SIZE OF OUTPUT BUFFER *2000 Q, JMS I FXSWDI CDF 10 /CHECK IF OUTPUT IS VALID TAD I K7600 CDF 0 SNA CLA ERROR /NO OUT DEVICE..GIVE ERROR FLCLOS, TAD LSTN /IF NON ZERO BUFFER, SNA CLA /DO ONE MORE WRITE JMP FLCLS1 TAD FLCLI /SETUP RETURN FROM PUNCH DCA TE1 JMP I .+1 PUNCH /WRITE CURRENT BUFFER FLCLS1, CIF 10 /E OR Q COMMAND HERE TO CLOSE THE FILE JMS I OCLSI /GENERAL FILE CLOSER JMP I SERR2I /FILE CLOSE FAILED CLA CMA /TELL SYSTEM I/O MON. IS IN CORE CDF 10 DCA I P7700 CDF 0 JMP I .+1 RNTR, 7600 /THIS GETS CHANGED IF RE ENTRY OPTION USED BUFRD, 0 /READ FROM A DEVICE CIF 10 JMS I ICHARI JMP ERRD /ERROR IN READING FROM BUFFER DCA CHAR /INTERFACE LOCATION TAD CHAR AND P177 SNA /IS IT L/T? JMP BUFRD+1 /YES...GET NEXT TAD C200 /RESTORE THE NUMBER JMP I BUFRD ERRD, SPA CLA /FATAL OR EOF? JMP I SERR0I /FATAL..GET ERROR MSG TAD ERSW /DISABLES FURTHER READS DCA BUFRD+1 JMP BUFRD+1 ICHARI, ICHAR /CHARACTER ROUTINES FLCLI, FLCLS1 /THE FOLLOWING CODE GIVES ERROR MESSAGES FOR I/O RELATED ERRORS /EACH IS A FATAL TYPE ERROR, AND AS SUCH, WILL ALWAYS /EXIT TO THE MONITOR. /THE FORMAT IS: ?N^C /N IS AN ERROR CODE MEANING N= 0 FAILED IN READING DEVICE / 1 FATAL WRITE ERROR / 2 FILE CLOSE ERROR / 3 FILE OPEN ERROR / 4 DEV HNDLR ERROR SERR4, IAC SERR3, IAC SERR2, IAC SERR1, IAC SERR0, DCA TEMPO /SAVE CODE TLS TSF JMP .-1 TAD C215 /SEND CR,LF JMS I OUTL1 TAD CLF JMS I OUTL1 TAD C277 /GENERATE ? JMS I OUTL1 TAD TEMPO TAD P260 /SEND ERROR CODE JMS I OUTL1 TAD C303 /FOR ^C JMS I UPAROI JMP I MONITO /SAVE BUFFER AND GO TO KEYBD MON P260, 260 C303, 303 BUFWT, 0 CIF 10 JMS I OCHARI JMP ERWT BUFRTN, TAD BUFWTI DCA OUTDEV JMP I BUFWT ERWT, SPA CLA /FATAL, OR NO MORE ROOM? JMP I SERR1I /FATAL..GET MSG JMS I FXSWDI /FIX JOB STATUS WORD TAD I TE1 DCA PTE1 TAD ELIM DCA PELIM TAD TE1 DCA PPTE1 CDF 10 ISZ I PANICI /SET PANIC DUMP TAD MORECS /PREPARE TO CLOSE PRESENT OUT FILE TAD I OCNTI /THIS GIVES OPTIMUM CLOSE LENGTH DCA I OCNTI TAD I OREC /WE ARE GOING TO WRITE A ^Z DCA CLSREC /DIRECTLY TO THE DEVICE TAD I OHNDL /HANDLER ENTRY POINT DCA TEMPO CDF 0 JMS I TEMPO 4110 /THE BUFFER IS A PAGE OF THE EDITOR 7000 /WITH A 232 IN THE FIRST LOCATION! CLSREC, 0 /REBORD NUMBER HERE JMP SERR1 /WRITE FAILURE CDF CIF 10 JMS I OCLSI /CLOSE THE FILE IN PANIC MODE JMP I SERR2I /CLOSE FAILED CIF 10 JMS I C200 11 /KICK MONITOR OUT TAD POINT /PRINT OUT"FULL" AND RETURN DCA AXIN TSF JMP .-1 /AVOID DROPPING CHARACTERS TAD I AXIN SNA /0 ENDS MESSAGE JMP I RST3I /DONE..GET OUT JMS I OUTL1 JMP .-4 FXSWDI, FXSTWD /FIX STATUS ROUTINE OCNTI, OUCCNT PANICI, PANIC OCHARI, OCHAR MORECS, -OURECS+1 /THIS ALLOWS US TO 'MANUALLY' WRITE /A FORM FEED AND ^Z. POINT, FULLST-1 OREC, OUREC OHNDL, OUHNDL BUFRET, TAD PPTE1 DCA TE1 TAD PTE1 DCA I TE1 TAD PELIM DCA ELIM JMP BUFRTN PPTE1, 0 PELIM, 0 PTE1, 0 FULLST, 306 /F 325 /U 314 /L 314 /L 215 212 0 SRCBUF, ZBLOCK 24 /SEARCH BUFFER SLST=. 247 242 377 203 OSLST, QUO1 QUO2 FORGET MONIT UPAROW, 0 /ROUTINE TO GENERATE^ AND ---- DCA TEMPO /SAVE ---- TSF JMP .-1 TAD C336 JMS I OUTL1 /PRINT ^ TAD TEMPO JMS I OUTL1 /PRINT WHATEVER JMP I UPAROW C336, 336 AMODE, DCA STRIND /NEED SETUP JMS I STRFIN /SEARCH ERROR TAD THSN JMP I .+1 /LINK TO COMMAND STRUCTURE GTOP+1 JERK, DCA STRIND JERK1, JMS I STRFIN /DO THE SEARCH JMP GMOR /GET NEXT BUFFER TSF JMP .-1 /LOOKS LIKE ITS NECESSARY TAD CZ DCA I TE1 JMP I TE1 /POSSIBLY LINK TO COMMAND GMOR, TAD I CNTRI SNA CLA /TEST FOR EMPTY BUFFER ERROR ISZ STRIND /BYPASS SETUP TAD NEXBUF DCA I COMM5 /SET UP READ OF ONE BUFFER IAC DCA ARG0 /ONE BUFFER! JMP I .+1 COMBO NEXBUF, DUMB1&177+5600 BARROW, ISZ STRIND /F CONTINUES LOOKING FOR EXISTING STRING ISZ THSN /INCREMENT FOR _ JMP JERK1 CNTRI, CNTR DBLQUO, ISZ THSN /" USES STRING NOW IN BUFFER ISZ STRIND /NO SETUP REQUIRED JMP AMODE+1 CORSPC, CLL TAD BUFR /ANSWERS QUESTION TAD K1320 /"HOW MUCH CORE IS LEFT?" SZL CLA /BUFFER IS OVERFLOWING..NO CORE JMP ZROCOR /NONE LEFT AT ALL TAD BUFR CIA TAD BUFEND TAD K360 /NO. OF LOCS LEFT ZROCOR, DCA ARG2 JMP I .+1 PRNT K360, 360 KILL, TAD END DCA BUFR DCA LSTN DCA THSN DCA FRST JMP I TE1 PIASGN, CDF CIF 10 /ROUTINE TO REASSIGN INPUT HANDLER TAD I PINEOF /AFTER A "PANIC" DUMP AND RESTART SZA CLA /IS THERE A HANDLER TO RESTORE? JMP I PIRETN /NO - BACK TO FIELD 1 TAD I IHPAGE DCA PIHND /GET HANDLER PAGE TAD I IDVNO CDF 0 JMS I C200 /I/O MONITOR IS IN CORE AT THIS POINT 1 PIHND, 0 JMP I SERR4I /VERY STRANGE,...... TAD PIHND CDF CIF 10 DCA I PIHNDL /PUT NEW HANDLER ADDRESS BACK JMP I PIRETN /AND RETURN PIRETN, PANOPN /GO OPEN OUTPUT FILES PIHNDL, INHNDL IHPAGE, I1 /I1 CONTAINS "INDEVH+1" IDVNO, INDEV PINEOF, INEOF *2400 /NOW FOR THE SEARCH ROUTINE SFIND1, 0 ISZ ECHOSW TAD STRIND /IS SETUP NECESSARY SZA CLA JMP SFIND2 /NO..MUST BE A JERK TAD MSCNT DCA BUFCNT TAD SBUF DCA AXIN /BEGIN SEARCH BUFFER TAD ATSIGN JMS I OUTL1 ISZ TABIND RLOOP, JMS I CHI1 JMS I SORTJ SLST-1 OSLST-SLST ISZ BUFCNT /ALL CHARACTERS ENTERED? JMP STORE /NO CLA CMA DCA BUFCNT /YES..DON'T ALLOW ANY MORE JMP RLOOP-1 /BUT KEEP ECHOING HIS STORE, TAD CHAR DCA I AXIN JMP RLOOP QUO2, TAD THSN /" MEANS START AT .+1 QUO1, IAC /' MEANS START AT .=1 DCA THSN TAD AXIN CIA /MAKE UP COUNT OF NO. CHARS NOW IN TAD SBUF DCA CNTR DCA I AXIN /END STRING WITH A 0 SFIND2, TAD CNTR SNA CLA /TEST NON- ZERO BUFFER JMP ER1 JMS NUCHAR /GET FIRST STRING CHAR TAD THSN JMS I FIN1 /GET APPROPRIATE POINTER DCA THIS /THE TRICK IS TO GET THE NEXT DCA CHFND CDF 10 /POINTER SO THAT WE NEVER HAVE TO GO TAD I THIS /BACK TO THE FIND ROUTINE! COMBAK, DCA TMP2 TAD I TMP2 DCA NEXTPT /THERE IT IS CDF 0 TAD THSN /CHECK SIZE OF . CIA TAD LSTN SPA CLA /O.K.? JMP ER1 /NO..WE MUST BE FINISHED TAD TMP2 DCA AXOUT /SET TO UNPACK CMA DCA XCT UPK1, JMS I UTR1 DCA TMP2 TAD TMP2 /CHECK FOR END OF LINE TAD MCR SZA CLA JMP NOCR ISZ THSN /CR..BMP LINE COUNT JMS NUCHAR /FORGET PREVIOUS MATCHES ON NEW LINE DCA CHFND CDF 10 TAD NEXTPT /AND GET NEXT LINE JMP COMBAK NOCR, TAD TMP2 /DO THE CHARACTERS MATCH TAD TMP1 SZA CLA JMP UPK /NO..(SOB!) ISZ CHFND /YES..BUMP A RANDOM POINTER CLA CMA DCA FMATCH /FIRST MATCH KLUDGE JMS NUCHA /GET NEXT STRING POINTER JMP UPK1 UPK, ISZ FMATCH /WAS THIS FIRST MATCH? JMP NOTSO /NO..NO PROBLEM TAD XCT /YES..DON'T LET THE POINTERS BE SPA CLA /BE CHANGED JMP WREK CMA TAD AXOUT DCA AXOUT CMA WREK, DCA XCT NOTSO, JMS NUCHAR DCA CHFND JMP UPK1 STFIN, TAD CHFND /END OF STRING..DO COUNTS MATCH? TAD CNTR SNA CLA JMP GOOD /YES..WE'VE GOT IT ER1, TAD LSTN /IF BUFFER EMPTY, SET .=0 SZA CLA IAC DCA THSN SKP GOOD, ISZ SFIND1 JMP I SFIND1 NUCHA, 0 /GETS NEXT SEARCH CHAR TAD .-1 DCA NUCHAR JMP NEXX NUCHAR, 0 /NUCHAR GETS THE FIRST STRING CHAR TAD SBUF DCA AXIN NEXX, TAD I AXIN SNA /IF 0 AT THE END OF STRING JMP STFIN CIA DCA TMP1 JMP I NUCHAR ENDA=SRCBUF-1 ATSIGN, 244 TMP1, 0 TMP2, 0 CNTR, 0 FMATCH, 0 BUFCNT, 0 NEXTPT, 0 CHFND, 1 /MUST BE NONZERO INITIALLY SBUF, ENDA MSCNT, -24 FORGET, TAD CCR JMS I OUT1 JMP SFIND1+1 /THE CODE AT 3000 IS ONCE ONLY CODE. IT TAKES THE FIELD 1 /PART OF THE CODE WHICH IS INITIALLY IN FIELD 0 AND MOVES /IT UP TO THE PROPER LOCATIONS IN FIELD 1. *2600 TAD (2777 /COLD LOAD CODE STARTS AT 3000 DCA AXIN /AUTO INDEX TAD (6577 /CODE SHOULD BE IN 6600 OF FIELD 1 DCA AXOUT TAD (7000 /MOVE 1000 LOCATIONS UP DCA COUNTA LOOP, CDF 0 TAD I AXIN CDF 10 DCA I AXOUT ISZ COUNTA JMP LOOP DCA AXIN DCA AXOUT TAD RST3I /CHANGE START ADD.....WILL SAVE BUFF DCA 177 CIDF, CIF CDF 10 JMP I K6600 COUNTA, 0 *3000 NOPUNC *6600 ENPUNC /OURECS=4 /SETUP FOR USING GENERAL INPUT, OUTPUT ROUTINES INBUF=3600 INCTL=1000 INRECS=4 /4 RECORDS INTO FIELD 0 INDEVH=2600 /IN HANDLER AT 2600 OF FIELD 0 OUBUF=5600 OUCTL=5000 OUDEVH=3200 /OUT HANDLER AT 3200 OF FIELD 0 MPARAM=7643 /COM DEC OPTION SWITCHES JMS I L7700 /LOCK MONITOR IN 10 START1, JMS I L200 /CALL THE CD 5 0 CDF 10 TAD K7620 /RESET OUTDMP DCA I THOLE TAD I P7600A /OUTPUT LIST AND C17 SZCL, SZA CLA /IS THERE AN OUTPUT DEVICE? JMP OPTCHK CDF 0 /NO..KILL E COMMAND ISZ I EKILSW CDF 10 OPTCHK, TAD I PARAM /CHECK OPTIONS SMA CLA /- IF A IS ON JMP NXTOP /A NOT ON CDF 0 /A IS ON..SET UP RE ENTRY TAD RSETI DCA I RNTRI CDF 10 NXTOP, TAD I PARAM RAL /B BIT TO BIT 0 DCA DVHAND /SAVE PARAM. SWITCH TAD DVHAND SMA CLA /NEG. IF B IS SET JMP NEWOP /B NOT ON P7600A, 7600 TAD SZCL /B CONVERTS SPACES TO TABS CDF 0 DCA I SPCP1 CDF 10 NEWOP, TAD DVHAND /CHECK NEXT OPTION RTL /LOOK AT D BIT SMA CLA /NEG. IF D IS ON JMP FILOP TAD I OHANDL /HANDLER BROUGHT IN FOR D OPTION DCA DVHAND TAD I P7600A /DEVICE NUMBER JMS I L200 1 /ASSIGN DVHAND, 0 JMP ISERR4 /FATAL TYOE ERROR TAD I P7600A JMS I L200 /D DELETES OLD COPY BEFOR WRITING 4 /NEW COPY OFILE, 7601 0 NOP /NO FILE TO DELETE FILOP, TAD PANIC SNA JMS I IOPENI /SET BUFFER POINTERS OR RESTORE HANDLER SZA CLA JMP GINDVH /RESTORE INPUT DEVICE HANDLER IN PANIC MODE PANOPN, JMS I OOPENI /OPEN OUTPUT FILES SMA CLA SKP /NORMAL RETURN JMP ISERR3 /FATAL TYPE ERROR TAD PANIC /PANIC CASE? SNA CLA JMP NOPAN /NOT PANIC CASE TAD I P7600A /IF NO OUTPUT,DON'T ALLOW HIM SNA CLA /TO DESTROY HIS TEXT JMP START1 TAD K5000 /SET TO WRITE BUFFER JMS I ODMP /DUMP IT JMP ISERR1 /WRITE FAILURE CLA IAC NOPAN, DCA DVHAND DCA PANIC JMS I L200 /DISMISS MONITOR 11 JMS I OUSTPI /RE INITIALIZE OUTPUT POINTERS CLA IAC JMS I SETJSI CIF CDF 0 TAD DVHAND SNA CLA /PANIC MODE? JMP I STRTUP /START THE EDITOR TLS JMP I .+1 /YES - RESUME OUTPUT BUFRET GINDVH, CDF CIF 0 JMP I .+1 PIASGN ISERR3, JMS I L200 /READ BUFFER BACK IN 11 CIF CDF 0 JMP I ASERR3 ISERR4, JMS I L200 11 CIF CDF 0 JMP I ASERR4 ISERR1, JMS I L200 11 CIF CDF 0 JMP I ASERR1 SETJSI, SETJSB L200, 200 STRTUP, START PANIC, 0 SPCP1, SPACES+1 IOPENI, IOPEN OOPENI, OOPEN EKILSW, EKILLL ODMP, OUTDMP RNTRI, RNTR K7746, 7746 OHANDL, O1 C17, 17 PARAM, MPARAM RSETI, RESET3 L7700, 7700 ASERR1, SERR1 ASERR3, SERR3 ASERR4, SERR4 K5000, 5000 /OUTPUT BUFF CONTROL WORD OUSTPI, OUSETP THOLE, TSTHOL K7620, 7620 *3200 NOPUNC *7000 ENPUNC 232 /THIS PAGE IS ^Z BUFFER OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS TAD I PANICJ /IS IT PANIC DUMP TIME SZA CLA /IF YES, DONT RESET POINTERS JMP I OUSETP /JUST GET OUT QUIETLY TAD C1 /GET SIZE OF BUFFER IN DOUBLEWORDS CIA /NEGATE IT DCA OUDWCT TAD C2 DCA OUPTR /INITIALIZE WORD POINTER TAD OUJMPE DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH JMP I OUSETP OCHAR, 0 AND C377 DCA OUTEMP KRS TAD M203 SNA CLA /IS THE TELETYPE BUFFER A ^C KSF /WITH THE TELETYPE FLAG ON? JMP .+3 /NO CDF CIF 10 /YES - GO TO MONITOR JMP I SVCOR /THROUGH THE "SAVE CORE" RETURN RDF TAD CDIF0 DCA OUCRET TAD OUTINH /IS OUTPUT INHIBITED SZA CLA /YES IF 1 JMP PSTOP /NO OUTPUT ALLOWED OUCHAR, CDF OUFLD /SET DATA FIELD TO BUFFER'S FIELD ISZ OUJMP /BUMP THE CHARACTER SWITCH OUJMP, HLT /3 WAY CHARACTER SWITCH JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTEMP CLL RTL RTL AND K7400 TAD I OUPOLD DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH /ORDER 4 BITS OF 3RD CHAR TAD OUTEMP CLL RTR RTR RAR AND K7400 TAD I OUPTR DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS TAD OUJMPE DCA OUJMP /RESET SWITCH ISZ OUPTR ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS JMP OUCOMN TAD OUCT /LOAD CONTROL WORD FOR A FULL WRITE JMS I DMPO /DUMP THE BUFFER JMP OUCRET /OUTPUT ERROR - GIVE ERROR RETURN JMS OUSETP /RE-INITIALIZE THE POINTERS JMP OUCOMN OCHAR2, TAD OUPTR DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD OCHAR1, TAD OUTEMP DCA I OUPTR OUCOMN, ISZ OCHAR OUCRET, HLT /RESTORE CALLING FIELDS JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTINH, 0 OTYPE, 0 RDF TAD CDIF0 DCA OTRTN CDF 10 TAD I C7600 AND P17 DCB=7760 TAD DCBM1 /DCB-1 DCA OUTEMP TAD I OUTEMP OTRTN, HLT JMP I OTYPE PSTOP, CIF 0 /PRINTS ? WHEN NO OUTPUT DEV ERROR INSET, 0 DCA OTYPE /SAVE AC RDF TAD CDIF0 DCA INSTRT CDF 0 TAD I PLASTN CDF 10 SNA CLA IAC JMS SETJSB TAD OTYPE INSTRT, CIF CDF 0 JMP I INSET SETJSB, 0 DCA JSBTM CDF 0 CLA CLL CMA RAL AND I PJSBTS TAD JSBTM DCA I PJSBTS CDF 10 JMP I SETJSB JSBTM, 0 PJSBTS, 7746 PLASTN, LSTN C1, OUCTL&3700 C2, OUBUF C377, 377 M203, -203 SVCOR, 7667 CDIF0, CDF CIF 0 K7400, 7400 OUCT, OUCTL C7600, 7600 P17, 17 DCBM1, DCB-1 DMPO, OUTDMP PANICJ, PANIC *3400 NOPUNC *7200 ENPUNC O17,17 OOPEN, 0 OU7600, 7600 TAD OU7601 DCA OUBLK TAD O1 DCA OUHNDL CDF 10 TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY SNA /IS THERE AN OUTPUT DEVICE? JMP ONOFIL /NO - INHIBIT OUTPUT JMS I O200 1 /ASSIGN,FETCH HANDLER OUHNDL, 2600 /OUTPUT DEVICE HANDLER ENTRY JMP I SERR4A /FATAL TYPE ENTRY OUENTR, TAD I OU7600 JMS I O200 3 /ENTER OUTPUT FILE OUBLK, 7601 /REPLACED WITH STARTING BLOCK OUELEN, 0 /REPLACED WITH LENGTH OF HOLE JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH DCA OUCCNT DCA I O2 /ZERO OUTPUT INHIBIT FLAG TAD OUBLK DCA OUREC /INITIALIZE OUTPUT RECORD NUMBER JMS I O3 ISZ OOPEN OORETN, JMP I OOPEN OEFAIL, TAD I OU7600 AND O7760 /GET REQUESTED LENGTH SNA CLA /WAS IT AN INDEFINITE REQUEST JMP ONTERR /YES - CANNOT ENTER THE FILE TAD I OU7600 O200, AND O17 /MAKE THE REQUESTED LENGTH ZERO DCA I OU7600 JMP OUENTR /TRY, TRY AGAIN ONTERR, CLA CLL CML RAR JMP OORETN /TAKE THE ERROR RETURN WITH AC<0 ONOFIL, ISZ I O2 JMP OORETN /TAKE THE ERROR RETURN WITH AC=0 OUTDMP, 0 DCA OUCTLW /STORE THE CONTROL WORD JMS OUNREC /COMPUTE NO. OF RECORDS TAD OUCCNT DCA OUCCNT TAD OUCCNT CLL CML TAD OUELEN TSTHOL, SNL CLA /IF ZERO OR POSITIVE,GIVE ERROR JMP OUERR OUCDIF, CDF CIF 0 CDF 10 JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 JMP OUERR /THERE ARE NO SOFT OUTPUT HANDLER ERRORS JMS OUNREC TAD OUREC DCA OUREC /UPDATE OUTPUT RECORD NUMBER ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN OUERR, JMP I OUTDMP OCLOSE, 0 TAD K7660 /SETUP SNL SZA CLA FOR CLOSE DCA TSTHOL CDF 10 TAD I PANICC SZA CLA JMP NODUMP TAD I O2 SZA CLA /IS OUTPUT INHIBITED? JMP OCISZ /YES - CLOSE IS A NOP TAD O232 /OUTPUT A ^Z JMS I O4 JMP OCRET JMS I O4 JMP OCRET FILLLP, JMS I O4 JMP OCRET JMS I O5 /GET TYPE OF OUTPUT DEVICE SPA CLA TAD O100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD TAD O77 /BOUNDARY-OTHERWISE HALF RECORD AND I O6 SZA CLA /UP TO THE BOUNDARY YET? JMP FILLLP /NO - FILL WITH ZEROS TAD I O6 /GET DOUBLEWORD COUNT LEFT TAD O7 SNA /A FULL WRITE LEFT? JMP NODUMP /YES - DON'T DO IT - THE ^Z IS ALREADY OUT TAD O8 /PUT IN THE FIELD BITS AND THE WRITE BIT JMS OUTDMP JMP OCRET /AN ERROR OCCURRED WHILE DUMPING THE BUFFER NODUMP, JMS I O7700 /LOCK MONITOR IN CORE 10 TAD I OU7600 /DEVICE NO. JMS I O200 4 /CLOSE THE OUTPUT FILE OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME OUCCNT, 0 SKP /ERROR WHILE CLOSING THE FILE - BAD! OCISZ, ISZ OCLOSE OCRET, CIF CDF 0 /RESTORE CALLING FIELDS JMP I OCLOSE PANICC, PANIC OUNREC, 0 TAD OUCTLW /CONVERTS CONTROL WORD CLL RTL /TO NUMBER OF RECORDS RTL RTL AND O17 JMP I OUNREC K7660, SNL SZA CLA O1, OUDEVH+1 O7700, 7700 O2, OUTINH O3, OUSETP O7760, 7760 O232, 232 O4, OCHAR O5, OTYPE O100, 100 O77, 77 O6, OUDWCT O7, OUCTL&3700 O8, 4000+OUFLD SERR4A, ISERR4 ////////////////////////////////////////////////////////// INFLD=INCTL&70 /GET FIELD OF INPUT BUFFER OUFLD=OUCTL&70 /DITTO OUTPUT BUFFER *3600 NOPUNC *7400 ENPUNC IN7400, 7400 IOPEN, 0 CLA CMA DCA INCHCT /SET INCHCT TO FORCE A READ ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE TAD I7617 DCA INFPTR /RESET FILE POINTER IORETN, JMP I IOPEN INPTR, 0 INDEV, 0 ICHAR, 0 IN7600, 7600 INCHAR, CDF INFLD ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH ISZ INCHCT INJMPP, JMP INJMP TAD INEOF SNA CLA /DID LAST READ YIELD END-OF-FILE? JMP INGBUF /NN-DO ANOTHER INNEWF, CDF 10 TAD I1 DCA INHNDL /INITIALIZE HANDLER ADDRESS TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY DCA INDEV /SAVE IT FOR PANIC TAD INDEV SNA /ANY MORE? JMP EOFERR /NN - OUT OF INPUT JMS I PINSET /SAVE BUFFER IF NECESSARY JMS I I7700 1 /ASSIGN, FETCH HANDLER INHNDL, 0 JMP I SERR4B /FATAL TYPE ERROR TAD I INFPTR AND I7760 /GET LENGTH PART OF WORD SZA /LENGTH OF 0 MEANS LENGTH >=256 TAD I17 /ADD HIGH ORDER BITS CLL CML RTR RTR DCA INCTR /STORE LENGTH OF FILE ISZ INFPTR TAD I INFPTR DCA INREC /STORE STARTING RECORD NUMBER OF FILE ISZ INFPTR DCA INEOF /ZERO END-OF-FILE FLAG INGBUF, TAD INCTR CLL TAD I2 SNL DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED SZL /IS THIS THE LAST READ? ISZ INEOF /YES - SET END-OF-FILE FLAG CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THE READ RTR /FROM THE AMOUNT OF THE OVERFLOW RTR /(IF ANY) AND THE STANDARD CONTROL WORD TAD I3 DCA INCTLW INCDIF, CDF CIF 0 CDF 10 JMS I INHNDL /CALL THE DEVICE HANDLER INCTLW, 0 INBUFP, INBUF INREC, 0 JMP INERRX /SOME KIND OF HANDLER ERROR INBREC, TAD INREC TAD I2 DCA INREC /UPDATE THE RECORD NUMBER TAD INCTLW AND IN7600 CLL RAL TAD INCTLW AND IN7600 CMA DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT TAD INJMPP DCA INJMP /RESET THE CHARACTER SWITCH TAD INBUFP DCA INPTR /AND THE WORD POINTER JMP INCHAR /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED INERRX, ISZ INEOF /EITHER AN END-OF-FILE OR A BADDIE SMA CLA /VHICH TYPE WAS IT? JMP INBREC /END OF FILE - RESUME THY PROCESSING INERR, CLA CLL CML RAR /BADDIE - GIVE ERROR RETURN WITH NEGATIVE AC EOFERR, JMP INRTRN INJMP, HLT /THIS IS 3 WAY CHAR SWITCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP DCA INJMP TAD I INPTR IN200, AND IN7400 CLL RTR RTR /COMBINE THE HIGH-ORDER FOUR BITS OF TAD INCTLW RTR /THE TWO WORD TO FORM THE THIRD CHARACTER RTR ISZ INPTR JMP INCOMN ICHAR2, TAD I INPTR AND IN7400 DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR ISZ INPTR /BUMP THE WORD POINTER ICHAR1, TAD I INPTR INCOMN, AND I377 TAD IM232 SNA /IS THE CHARACTER A ^Z? JMP INNEWF /YES - GET A NEW FILE TAD I232 /RESTORE THE CHARACTER ISZ ICHAR /BUMP RETURN TO NORMAL RETURN INRTRN, CDF CIF 0 /RESTORE CALLING FIELDS JMP I ICHAR /AND RETURN INCHCT, -1 INFPTR, 7617 INEOF, 1 INCTR=IOPEN PINSET, INSET I7617, 7617 I1, INDEVH+1 I7760, 7760 I17, 17 I2, INRECS I3, INCTL+1 I377, 377 IM232, -232 I232, 232 I7700, 7700 SERR4B, ISERR4 $