/CAPS SYMBOLIC EDITOR VERSION EDIT.01 /DEC-8E-OEDTA-A-LA /3 DEC 1973 HJ /COPYRIGHT 1972 DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASSACHUSSETTS 01754 /THE SYMBOLIC EDITOR IS A LINE-ORIENTED /TEXT EDITOR WITH CHARACTER AND STRING /SEARCH CAPABILITIES. IT IS DESIGNED /TO BE COMPATIBLE WITH THE CAPS SYSTEM. /THE DESIGN OF THE EDITOR IS SIMILAR /TO THAT OF THE OS/8 SYMBOLIC EDITOR. /THE STARTING ADDRESS IS 00200. /OPTIONS: /B CONVERT 2 OR MORE SPACES TO TAB ON INPUT /ERROR CODES: / 0 FAILURE IN INPUT DEVICE HANDLER / 1 FAILURE IN OUTPUT DEVICE HANDER / 2 COULD NOT CLOSE FILE /COMMANDS: /A APPEND TEXT TO BUFFER /I INSERT TEXT INTO BUFFER /C CHANGE TEXT IN BUFFER /L LIST TEXT IN BUFFER /D DELETE TEXT IN BUFFER /K KILL BUFFER /M MOVE TEXT WITHIN BUFFER /G GET AND LIST TAGGED LINE IN BUFFER /B LIST # OF CORE LOCATIONS LEFT IN BUFFER /S CHARACTER SEARCH /J INTER-BUFFER STRING SEARCH /F AFTER J, SEARCH FOR NEXT OCCURRANCE / OF SAME STRING /$ INTRA-BUFFER STRING SEARCH /R READ TEXT INTO BUFFER FROM INPUT DEVICE /N WRITE BUFFER, KILL, AND READ NEXT PAGE /Y INPUT TEXT PAGE, NO OUTPUT /P WRITE TEXT BUFFER TO OUTPUT DEVICE /E OUTPUT BUFFER, TRANSFER REST OF / INPUT FILE TO OUTPUT FILE / CLOSE OUTPUT FILE /Q IMMEDIATE END OF FILE /ABBREVIATIONS /.LT. LESS THAN /.LE. LESS THAN OR EQUAL TO /.GT. GREATER THAN /.GE. GREATER THAN OR EQUAL TO / R RIGHT / L LEFT /SPECIAL COMMENTS /SINCE THE EDITOR IS CODED ACROSS PAGE BOUNDARIES, IT IS /NECESSARY TO BE AWARE OF THE EFFECTS OF THE INSERTION /OR DELETION OF CODE. FOR THIS REASON, THE LIMITS /OF PERMISSABLE PAGE BOUNDARY WANDERING /ARE INDICATED WITH THE FOLLOWING CONSTRUCTION: /---------------------------------------------------------- /SOMEWHERE BETWEEN LINES, THE PAGE BOUNDARY MUST OCCUR /---------------------------------------------------------- FIXMRI CALL=4400 VT05=0 /0 MEANS NOT ON VT05 TTOCHR=7402 INCHAD=7403 /ADDRESS IF SINCH INCHEX=INCHAD+6 KBDIN=7602 KBDCHR=7626 CLOSE=6400 LOOKUP=7002 ENTER=6404 HANDLER=6600 LBUFR=3000 INVNUM=7600+24 /VERSION NUMBER OF INPUT FILE OPT1=7400 OPT2=OPT1+1 UTIL=7200 LPOCHR=7400 FLIPI=6400+6600 /ADDRESS'S OF 2 INPUT BUFFERS BUFRD=INCHAR /CALLED AS BUFRD FLIPO=7000+7200 /ADDRESS'S OF 2 OUTPUT BUFFERS BUFWT=OCHAR /CALLED AS BUFWT WAIT=6200 CTRLCJ=7604 /MONITOR EXIT ROUTINE /MISCELLANEOUS POINTER AND CONSTANTS *7 M77, -77 C77, 77 C100, 100 C677, 677 /QUESTION MARK /AUTO-INDEX REGISTERS AXOUT, 0 /OUTPUT INDEX AXCOMB, 0 /COMBINE POINTER AXTEM, 0 /TEMPORARY INDEX AXIN, 0 /STORAGE INDEX *20 /CONSTANTS M4, -4 /LETTER COUNT P177, 177 MCR, -215 M240, -240 P40, 40 C200, 200 /(START & RESTART) /LISTS /TAG SEARCH LIST- LIST7=. C240, 240 /SPACE 257 /COMMENT DELIMITER (/) /OUTPUT LIST LIST4=. CTAB, 211 /TAB C215, 215 /CARRIAGE RETURN 212 /LINE FEED 214 /FORM FEED 377 /RUBOUT M27, -27 /LIST DELIMITER /SPECIAL CHARACTER LIST FOR /INPUT IN TEXT MODE LIST5=. /USED AT AONE 240 /SPACE LIST6=. /USED AT SFOUND 225 / ^U C214, 214 /FORM FEED BELL, 207 / ^G (BELL) C212, 212 /LINE FEED 377 /RUBOUT LIST3=. 215 /LIST BRANCHER 000 /(SEARCH CHARACTER) MCHIN1, -CHIN-1 /LIST DELIMITER /CONSTANTS AND POINTERS CCR=C215 /CARRIAGE RETURN CLF=C212 /LINE FEED MTABS, -10 /TAB COUNTER DELT, DELP CHI1, CHIN IGNORE, CHIN+1 END, 200 KEYBD, I33 CCON, JMP I AXCOMB COM1-1 UTR1, UTRA FIN1, FIND LIS1, LIST LIS, LISTER NINE, 12 NUMB, -272 OUT1, OUT OUTL1=. LOW, OUTL CZ, CLA CLL /CONTENTS OF START ONUM, GTOP SORTJ, SORTB PACK1, PACBUF SXS1, TAD CHAR /CONTENTS OF L3 SXS2, SLOOK&177+5200 /JMP SLOOK L3I, L3 /PATCH POINTER L2I, L2 /CONTINUE SEARCH - LETTERS ENDLNI, ENDLN 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 /NUMBER OF PAGES CNT=. /PRINT COUNTER XCT, 0 /UNPACK SWITCH XCTIN, 0 /PACK SWITCH ECHOSW, 1 /NON-ZERO TO PRINT SAVE, 0 TABIND, 0 /TABS OR SPACES SWITCH TEMP, 0 THIS, 0 /LINE POINTER. OUTDEV, OUTL /POINTER TO OUTPUT SUBROUTINE GRBAGE, GARBAG /GARBAGE COLLECTOR MARK, 0 /OBJECT LINE IN G.C. XSAV, 0 /HOLD INPUT POINTER. BUFR, 200 CFRS, 20 /LOCATION 20 OF FIELD 1 CONTAINS LINE POINTER KILL1, KILL+3 CHKARG, CHKARX ERSW, ERROR /ERROR ROUTINE L1I, L1 EKILLL, 0 /E CMD SWITCH 1 IF E NOT ALLOWED BUFEND, 5600 /WARNING FOR END OF BUFFER /I-O RELATED POINTERS AND WORDS 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 GTEM=. /NEXT 6-BITS OF UNPACK DTEM=. /NEXT POINTER IN DELETE CHAIN /ERROR ROUTINE /REJECTS ILLEGAL COMMAND /AND TYPES ? ERROR=JMS . 0 ELIM, 7600 /GRP2-CLA TAD C677 JMS I OUTL1 /PRINT "?" CZONE, TAD CZ /RESET PATCHES DCA I TE1 JMPTE1, JMP I TE1 /*RETURN TO COMMAND MODE* UPAROI, UPAROW /GENERATE ^ CHARACTER STRIND, 0 STRFIN, SFIND1 TE1, START /VARIABLES THSN, 0 /CURRENT LINE NUMBER LSTN, 0 /LAST LINE NUMBER TCNT, 0 /TAB COUNT ADD, 0 ARG0, 0 ARG1, 0240 ARG2, -1 COMM5, COM5 TEMPO, 0 X203, -203 MOV2=TEMPO LSTCHK, 0 /DIGIT ACCEPTED FLAG PTR, 0 /USED FOR I/O ROUTINES HDPTR, 0 /" " " " KNT, 0 /" " " " EDSTRT, IOSET /LETS START AT 200 INFLG, 0 INPTR, 0 INUNIT, -1 OUWDCT, 0 OUTINH, 0 *200 JMP I EDSTRT /START AT IOSET OR START /HANDLER FOR ^U (IF IN COMMAND MODE) START, CLA CLL /NON-I/O STARTING POINT TAD LOW /ENTER COMMAND MODE DCA OUTDEV /INITIALIZE KEYBOARD DCA TABIND /CLEAR TAB INDICATOR ISZ ECHOSW /SET UP FOR ECHO DCA LIST3+1 TAD SXS1 DCA I L3I TAD ERSW /RESET ERROR SWITCH AT L1 DCA I L1I TAD CZONE DCA I COMM5 DCA LSTCHK /CLEAR DIGIT ACCEPTED TAD CCR /OUTPUT CARRIAGE RETURN JMS I OUT1 /HANDLER FOR CARRIAGE RETURN (COMMAND MODE) TAD SIGN /OUTPUT # JMS I OUT1 GTOP, DCA ARG0 /CLEAR ARGUMENTS DCA ARG2 /HANDLER FOR SPACE OR + GEXP, TAD NONE /HANDLER FOR - GMIN, TAD CMPT DCA G2 /SET SIGN TO + OR - DBCV2, DCA TEMP JMS I CHI1 /INPUT ONE CHARACTER TAD NUMB CLL TAD NINE SZL /WAS IT A DIGIT? JMP COUNT /YES - CONTINUE ACCEPTING NUMBERS GLOM, CLA /NO TAD TEMP /GET ACCUMULATED NUMBER G2, HLT /(NOP) OR (CIA) TO HANDLE SIGN TAD ARG2 DCA ARG2 /STORE NEW ARGUMENT JMS SORTB /WAS LAST CHARACTER SPECIAL? LIST1-1 /YES - COMPARE TO LIST OPS1-LIST1 /AND BRANCH TO HANDLER TAD CHAR /NO - SAVE COMMAND CHARACTER DCA SAVE JMS I CHI1 /INPUT ONE CHARACTER JMS SORTB /IS IT CARRIAGE RETURN, ^C, OR ^U? LIST1A-1 /YES - EXIT TO HANDLER OPS1A-LIST1A ERROR /NO - TRY AGAIN /CHECK LEGALITY OF ARGUMENTS /ARG0 CONTAINS FIRST ARGUMENT /ARG2 CONTAINS SECOND ARGUMENT RETRN, TAD ARG0 SNA /IS ARG0=0? TAD ARG2 /YES - ARG0=ARG2 DCA ARG0 /NO TAD ARG2 CMA TAD ARG0 SMA /IS ARG0 .LE. ARG2? ERROR /NO DCA ARG1 /YES - ARG1=ARG0-ARG2-1 TAD ARG0 SPA CLA /IS ARG0 .GE. 0? ERROR /NO TAD SAVE /YES - GET COMMAND CHARACTER JMS SORTB /IS IT A LEGAL COMMAND? LIST2-1 /YES - MATCH TO LIST OPS2-LIST2 /AND BRANCH TO ITS HANDLER ERROR /NO - TRY AGAIN /COMMAND IDENTIFICATION LIST 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 326 /V NONE, -41 /"NOP-CIA" SIGN, "#+400 /SORT AND BRANCH ROUTINE /LOOKS FOR MATCH BETWEEN CHAR /AND ELEMENTS OF TABLE 1 SPECIFIED /CALLING SEQUENCE: / JMS I (SORTB / TABLE1-1 / TABLE2-TABLE1 / RETURN IF NO MATCH /DISPATCHES TO CORRESPONDING ADDRESS IN TABLE 2 SORTB, 0 SZA /IS CHARACTER STORED YET? DCA CHAR /NO - STORE IT TAD I SORTB /YES ISZ SORTB DCA AXTEM /STORE TABLE 1 ADDRESS TAD I AXTEM /GET TABLE ENTRY SPA /DONE YET? JMP SEX /YES - EXIT CMPT, CIA /NO TAD CHAR /GET CHARACTER SZA CLA /DO THEY MATCH? JMP .-6 /NO - KEEP TRYING TAD AXTEM /YES - THEY MATCH TAD I SORTB /GET DISPATCH TABLE ADDRESS DCA SORTB TAD I SORTB DCA SORTB /SET RETURN ADDRESS JMP I SORTB /--RETURN--VIA DISPATCH TABLE SEX, ISZ SORTB /MATCH NOT FOUND CLA JMP I SORTB /-- /DECIMAL ADDITION ROUTINE /FOR NUMERIC ARGUMENTS OF COMMANDS /ENTER WITH INPUT DIGIT IN SORTB /EXIT WITH ACCUMULATED NUMBER IN AC COUNT, DCA SORTB ISZ LSTCHK /GOT A DIGIT NOW TAD TEMP RTL CLL TAD TEMP RAL TAD SORTB JMP DBCV2 /RETURN TO MAIN SEQUENCE /---------------------------------------------------------- /DISPATCH LIST FOR COMMAND HANDLERS 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 ELIM /T - REMOVED FOR CAS-8 MOVEM /M GETTAG /G XCRET /S YANK /Y Q /Q CORSPC /B VIEW /V /END OF INPUT TEXT LINE ROUTINE EOL, JMS I ENDLNI /RESET LINK CELLS ISZ LSTN /INCREMENT LINE POINTERS ISZ THSN TAD BUFEND CLL CIA TAD AXIN SNL CLA /IS THE BUFFER FULL? /---------------------------------------------------------- JMP MOR /NO - KEEP FILLING TAD BELL /YES - RING WARNING BELL JMS I OUTL1 JMP I TE1 /*RETURN TO COMMAND MODE* /CONTINUATION OF HANDLERS FOR A, C, AND I COMMANDS APP1, TAD LSTN /APPEND DCA ARG0 /RESET ARG0 TO END OF TEXT JMP INS CNGE1, JMS I DELT /CHANGE - DELETE LINES AND XNS1, TAD ARG0 /INSERT SNA CLA /ANY ARGUMENTS? INS, ISZ ARG0 /NO - INSERT AT BEGINNING OF TEXT TAD ARG0 JMS I FIN1 /FIND THE POINTER DCA THIS ISZ TABIND /SET TAB INDICATOR CDF 10 TAD I THIS /GET LINK TO BUFFER CDF 0 DCA XSAV CMA TAD ARG0 DCA THSN /SET LINE POINTER AONE, TAD BUFR /BEGIN LINE DCA AXIN DCA XCTIN MOR, JMS I BUFRDI /GET A CHARACTER JMS I SORTJ /IS IT SPECIAL? (SEE LIST) LIST5-1 INLIST-LIST5 /YES - GO TO ITS HANDLER JMS PACBUF /NO - PACK IT JMP MOR /FETCH ANOTHER /CHARACTER PACKING ROUTINE /CONVERTS CHARACTER IN CHAR TO INTERNAL CODE /AND CALLS PCK1 TO PACK IT INTO BUFFER /ENTER AND EXIT WITH AC CLEAR PACBUF, 0 JMS TBUF /CHECK WHERE BUFFER IS UP TO TAD CHAR /O.K. TO INSERT TAD M240 SPA /IS IT 200-237? JMP ESCA /YES - ATTACH 77 TAD M77 SMA SZA /IS IT 337 OR LESS? JMP ESCA /NO - ATTACH 77 TAD P40 /YES - IS IT 277? SNA CLA JMP ESCA /YES - ATTACH 77 TR1, TAD CHAR /240-337 EXCEPT 277 AND C77 /MASK OUT LEFT 6 BITS JMS PCK1 /PACK IT JMP I PACBUF /--RETURN-- ESCA, CLA /200-237, 277,340-377 TAD C77 /PACK A 77 JMS PCK1 JMP TR1 /PACK THE CHARACTER /PACK CHARACTERS INTO TEXT BUFFER /ENTER WITH 6-BIT CODE IN AC PCK1, 0 ISZ XCTIN /LEFT HALF OR RIGHT HALF? JMP ROT /LEFT HALF DCA UTRA /RIGHT HALF - STORE CHARACTER TAD UTRA /GET CHARACTER TAD ADD /GET PREVIOUS CHARACTER CDF 10 DCA I AXIN /STORE IN FIELD 1 BUFFER CDF 0 DCA ADD JMP I PCK1 /--RETURN-- ROT, CLL RTL /LEFT HALF RTL RTL /ROTATE 6 LEFT DCA ADD /RETAIN UNTIL NEXT CHARACTER CMA /IS READY DCA XCTIN /RESET L OR R SWITCH JMP I PCK1 /--RETURN-- UTEST=PACBUF /TEMPORARY /CHARACTER UNPACKING ROUTINE /CONVERTS ONE CHARACTER FROM /BUFFER FORMAT TO 8-BIT ASCII /EXIT WITH CHARACTER IN AC UTRA, 0 CLA CMA /INITIALIZE TO -1 DCA UTEST EXTR, ISZ XCT /LEFT HALF OR RIGHT HALF? JMP GET3 /RIGHT HALF CDF 10 /LEFT HALF TAD I AXOUT /GET BUFFER WORD CDF 0 DCA GTEM TAD GTEM RTR /ROTATE 6 RIGHT RTR RTR JMP GET4 /SKIP TO GETA GET3, CLA CMA /RESET L - R SWITCH DCA XCT TAD GTEM GET4, AND C77 /MASK OUT LEFT 6 BITS TAD M77 CLL SNA /WAS IT 77? ISZ UTEST /YES - WAS IT LEFT HALF? JMP GET5 /NO - CONTINUE JMP EXTR /YES - GET OTHER HALF GET5, TAD P37 ISZ UTEST /RESTORE THE CHARACTER CML SNL TAD C100 TAD C240 TAD X203 /IS IT A ^C? SNA JMP UTRA+1 /YES - IGNORE IT TAD M27 /NO - IS IT A ^Z? SNA JMP UTRA+1 /YES - IGNORE IT TAD P232 /NO - RESTORE CHARACTER JMP I UTRA /--RETURN-- P37, 37 P232, 232 PAGE /INPUT LIST FOR SPECIAL CHARACTERS IN TEXT MODE INLIST=. SPACES /SPCS CTRLU /^U FULL /FORM FULL /BELL RUB4+1 /LINE FEED RUB1 /RUBOUT EOL /CARRIAGE RETURN /HANDLER FOR FORM FEED OR ^G FULL, TAD IGNORE / TAD MCHIN1 / SNA CLA /IN APPEND MODE? JMP I TE1 /YES*RETURN TO COMMAND MODE* TAD LSTN /NO - IS BUFFER EMPTY? SNA CLA / JMP I MORI /YES - IGNORE FORM FEED JMP I TE1 /NO*RETURN TO COMMAND MODE* MORI, MOR /SET UP TO READ FROM INPUT DEVICE /USED BY C AND R COMMANDS /CALLED WITH SEQUENCE / JMS I PSETUP / INPUT ROUTINE / CONTINUATION OF HANDLER /EXITS TO CONTINUATION OF HANDLER 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 TAD BUFR TAD L1720 SZL CLA /IS BUFFER FULL? ERROR /YES - DON'T READ JMP I SETUP /--RETURN-- L1720, 1720 /SUPERVISOR FOR DELETION OF TEXT LINES DELP, 0 JMS I CHKARG /CHECK ARGUMENT VALIDITY TAD ARG0 DCA THSN /SET CURRENT LINE # TAD ARG1 /SAVE # DELETED DCA LISTER TAD ARG0 /GET POINTER TO LINE JMS I FIN1 /TO BE DELETED DCA THIS /STORE IT DELP1, CDF 10 TAD I THIS DCA MARK /CORE ADDRESS OF OBJECT LINE TAD I MARK DCA I THIS /CHAIN NEW POINTERS TO DELETE LINE TAD MARK CDF 0 JMS I GRBAGE /PHYSICALLY DELETE THE LINE ISZ ARG1 /ALL SPECIFIED LINES DELETED? JMP DELP1 /NO - CONTINUE TAD LSTN /IF 1,/D..MAKE CURRENT=0 SNA CLA DCA THSN TAD LISTER /BUMP TOTAL DOWN TAD LSTN DCA LSTN JMP I DELP /YES--RETURN-- /HANDLER FOR < EXLAS, CLA CLL CMA RAL /PRINT LAST LINE - AC=7776=-2 /HANDLER FOR > OR LINE FEED EXNEX, TAD THSN /PRINT NEXT LINE IAC SNA /IS IT AN EXISTING LINE? ERROR /NO DCA ARG0 /YES SAVE EFFECTIVE ARGUMENTS CMA DCA ARG1 /HANDLER FOR L COMMAND LIST, TAD LOW /SET KEYBOARD AS OUTPUT DCA OUTDEV ISZ TABIND /SET TAB INDICATOR JMS LISTER /OUTPUT LINE(S) JMP I TE1 /*RETURN TO COMMAND MODE* /LISTING OUTPUT ROUTINE /OUTPUTS LINES INDICATED BY ARG0,ARG1 LISTER, 0 TAD ARG0 SZA CLA /ANY ARGUMENTS? JMP L0 /YES - SET THEM UP TAD LSTCHK /ALLOW 0L? SZA CLA ERROR /NOPE TAD LSTN /NO - SET TO LIST BUFFER CIA DCA ARG1 ISZ ARG0 /SET TO LINE 1 L0, TAD ARG0 CIA TAD LSTN SPA CLA /ARGUMENTS IN RIGHT RANGE? L1, ERROR /NO -( OR JMP I TE1) TAD ARG0 JMS I FIN1 /GET POINTERS DCA THIS /SAVE POINTER CMA CDF 10 TAD I THIS /GET START DCA AXOUT TAD I AXOUT /SAVE POINTER FOR SEARCH DCA XSAV TAD AXOUT /SAVE OBJECT LINE FOR GRBG CLLCT DCA MARK CDF 0 CMA DCA XCT TAD ARG0 /SET POINTER DCA THSN ISZ ARG0 /SET FOR NEXT LINE /(HANDLER FOR FORM FEED DURING CHARACTER SEARCH) L2, JMS I UTR1 /UNPACK A CHARACTER JMS I OUT1 /PRINT A CHARACTER L3, TAD CHAR /OR (JMP SLOOK) TAD MCR SZA CLA /WAS IT END OF LINE? JMP L2 /NO - KEEP UNPACKING ISZ ARG1 /YES - DONE YET? JMP L0 /NO - GET NEXT LINE JMP I LISTER /YES --RETURN-- /---------------------------------------------------------- /SEARCH ROUTINES /HANDLER FOR CARRIAGE RETURN SRETN, JMS I ENDLNI /TERMINATE THIS LINE TAD MARK /AND NOW GARBAGE COLLECT JMS I GRBAGE ISZ ARG1 /DONE YET? JMP I LIS1 /NO - GET NEXT LINE JMP I TE1 /YES*RETURN TO COMMAND MODE* /HANDLER FOR ^G DURING CHARACTER SEARCH /CHANGE SEARCH CHARACTER SCONT, JMS I KEYBD /FETCH NEW SEARCH CHARACTER DCA LIST3+1 /STORE IT IN LIST JMP I L2I /CONTINUE SEARCH SLOOK, JMS I SORTJ /SEARCH DONE? LIST3-1 /(CARIRAGE RTRN OR SEARCH CHAR) LISTGO-LIST3 /YES - GO TO ITS HANDLER JMS I PACK1 /NO-PACK SEARCHED CHARACTERS JMP I L2I /CONTINUE SEARCH /HANDLER FOR LINE FEED DURING SEARCH SLINE, TAD CCR DCA CHAR JMS I ENDLNI ISZ ARG0 /MOVE POINT ISZ THSN /BUMP CURRENT LINE COUNT ISZ LSTN /ADD A LINE. /HANDLER FOR _ DURING SEARCH SBAR, TAD CCR /CTRL-U JMS I OUT1 /OUTPUT CARRIAGE RETURN TAD BUFR /RESTART PACK BUFFER DCA AXIN DCA XCTIN /---------------------------------------------------------- SFOUND, JMS I CHI1 /GET A CHARACTER JMS I SORTJ /SPECIAL SEARCH COMMAND? LIST6-1 SRNLST-LIST6 /YES - GO TO HANDLER /HANDLER FOR SEARCH CHARACTER FOUND SGOT, JMS I PACK1 /NO-PACK INSERTS JMP SFOUND /CONTINUE INPUT /TELETYPE CHARACTER FETCH ROUTINE /ENTER WITH AC CLEAR /EXIT WITH CHARACTER IN CHAR AND AC /FORCE CHANNEL 8 /BLANK TAPE & LEADER TRAILER IGNORED CHIN, 0 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 /--RETURN-- /SEARCH TEXT BUFFER FOR LINE /WHOSE NUMBER IS ONE LESS THAN /THE CONTENTS OF THE AC /EXIT WITH ADDRESS OF LINK CELL IN AC FIND, 0 /LOCATE LINE BUFFER CIA SMA /IS LINE NUMBER TOO SMALL? ERROR /YES DCA TEMP /NO - STORE NEGATIVE OF LINE # TAD TEMP IAC TAD LSTN SPA CLA /IS LINE NUMBER TOO LARGE? ERROR /YES TAD CFRS /NO JMP FIND1 FIND2, CDF 10 TAD I SAVE /CHAIN THROUGH LIST CDF 0 SZA /FAILSAFE FIND1, DCA SAVE ISZ TEMP /DONE YET? JMP FIND2 /NO - KEEP CHAINING TAD SAVE /YES - GET LINE NUMBER JMP I FIND /--RETURN-- CON, 6030 /CONVERSION CONSTANTS 7634 7766 7777 BOX=COUNTP VAL=ARG0 /HANDLER FOR : OR = /PRINTS REQUESTED LINE NUMBER /WHICH IS FOUND IN ARG2 ON ENTRY PRNT, TAD ARG2 DCA VAL /SET NUMBER TO BE PRINTED TAD M4 DCA CNT /SET CHARACTER COUNT 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 THEN 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 /MAKE ASCII DIGIT JMS I OUTL1 /OUTPUT THE DIGIT ISZ XYZ+2 /ADD IN NEXT CONVERSION CONS LATER ISZ CNT /DONE ALL FOUR? JMP FLOOZ /NO - KEEP CONVERTING JMP I TE1 /YES*RETURN TO COMMAND MODE* C260, 260 ADDR, TAD CON K50, 50 K7430, 7430 /CHARACTER OUTPUT ROUTINE OUT, 0 DCA CHAR TAD ECHOSW SNA CLA /ECHO SUPPRESSED? JMP I OUT /YES--RETURN-- JMS I SORTJ /NO - IS IT A FORMAT CHARACTER? LIST4-1 /YES - EXIT TO ITS HANDLER OUTLIS-LIST4 ISZ TCNT /NO - COUNT ONE LETTER TAD CHAR OUTX, JMS I OUTDEV /OUTPUT THE CHARACTER JMP I OUT /--RETURN-- /CARRIAGE RETURN HANDLER OUTCRL, TAD CCR JMS I OUTDEV /OUTPUT CARRIAGE RETURN DCA TCNT /CLEAR TAB COUNTER TAD CLF /OUTPUT LINE FEED JMP OUTX /TAB HANDLER - TAB/RUBOUT OUTRT, TAD CTAB JMS I OUTDEV /OUTPUT TAB JMP I OUT /YES--RETURN-- /TAB HANDLER - SPACES OUTTAB, TAD TABIND SNA CLA /OUTPUT TAB/RUBOUT INSTEAD? JMP OUTRT /YES - GO TO OTHER TAB HANDLER TAD TCNT /NO - TAD MTABS /REDUCE SPACE COUNT TO 8 OR LESS SMA JMP .-2 DCA TCNT TAD C240 /OUTPUT SPACES JMS I OUTDEV ISZ TCNT /DONE YET? JMP .-3 /NO - CONTINUE JMP I OUT /YES--RETURN-- /---------------------------------------------------------- /I-O SUBROUTINES /HANDLER FOR S COMMAND XCRET, JMS I KEYBD /GET THE SEARCH CHARACTER DCA LIST3+1 /SAVE IT IN LIST 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 /LIST OF SPECIAL CHARACTERS FOR G COMMAND TAGLIST=. GTAG2 /SPACE GTAG2 // GTAG2 /TAB GTAG2 /CARRIAGE RETURN /---------------------------------------------------------- APPL, APP1 XNSL, XNS1 CNGEL, CNGE1 /LOW SPEED OUTPUT ROUTINE /ENTER WITH CHARACTER IN AC OUTL, 0 JMS TOUT JMP I OUTL /--RETURN-- /LOW SPEED INPUT ROUTINE /^C TAKES AN ASYNCRONOUS EXIT /EXIT WITH CHARACTER IN AC I33, 0 JMS KIN /GET A CHARACTER FROM MONITOR AND (177 /CONVERT TO INDEPENDENT 8 BIT TAD (200 JMP I I33 /NO--RETURN-- /SET UP APPEND, CHANGE, INSERT TO WORK /EACH READS KEYBOARD, NOT DEVICE /HANDLER FOR A COMMAND APP, TAD APPL JMP SET /HANDLER FOR I COMMAND XNS, TAD XNSL JMP SET /HANDLER FOR C COMMAND CNGE, TAD CNGEL SET, DCA DEST /RETURN POINT ISZ ECHOSW JMS I PSETUP CHIN /KEYBOARD INPUT DEST, APP1 /SPECIAL OUTPUT LIST OUTLIS=. OUTTAB /211 - TAB OUTCRL /215 - CARRIAGE RETURN OUTX+1 /212 - LINE FEED OUTX+1 /214 - FORM FEED OUTX+1 /377 - RUBOUT /HANDLER FOR P COMMAND PUNCH, ISZ ECHOSW TAD BUFWTI /SETUP TO WRITE INTO OUTPUT BUFFER DCA OUTDEV PUNC, JMS I LIS /WRITE THE EDITOR BUFFER TAD C214 /OUTPUT FORM FEED JMS I OUTDEV /HANDLER FOR T COMMAND - REMOVED FOR CAS-8 JMP I TE1 /*RETURN TO COMMAND MODE* /HANDLER FOR R COMMAND TELE=. TELEN, DCA ECHOSW /INHIBIT ECHO JMS I PSETUP /SETUP TO READ FROM BUFRD /INPUT DEVICE APP1 /APPEND TEXT TO BUFFER /HANDLER FOR Y COMMAND YANK, TAD COM1 /YANK KILLS 'P' PART OF N DCA I CCON+1 JMP COMBOA /HANDLER FOR N COMMAND COMBO, TAD JMPCH /YANK WIPES COM1-1 DCA I CCON+1 COMBOA, TAD ARG0 SNA /ANY ARGUMENTS IAC /NO - ASSUME 1 CIA DCA COUNTP /SET NUMBER OF PAGES TO YANK TAD CCON /(JMP I AXCOMB) DCA I TE1 /SET TE1 TO ALLOW LOOPING COMB, TAD CCON+1 /THROUGH PUNCH, KILL, READ DCA AXCOMB /CYCLE DCA ARG0 /CLEAR ARGUMENTS DCA ARG2 DCA LSTCHK /DON'T INHIBIT LISTER! DCA TABIND /CLEAR IN CASE OF MULTIPLE N JMP PUNC /OUTPUT BUFFER COM1, JMP I KILL1 /KILL BUFFER JMP TELEN /READ NEW BUFFER FULL ISZ COUNTP /DONE YET? JMP COMB /NO - CONTINUE CLA CLL CML RAL /YES-AC=1 - RESET CURRENT LINE # DCA THSN /.=1 ON RETURN COM5, TAD CZ /RESTORE TE1 DCA I TE1 JMP I TE1 /*RETURN TO COMMAND MODE* /IT IS VITAL TO KEEP DUMB1 AND COM5 ON THE SAME PAGE DUMB1, JERK1 LIST1=. 212 /LINE FEED 240 /SPACE 253 /PLUS (+) 254 /COMMA (,) 255 /MINUS (-) 256 /PERIOD (.) 257 /SLASH (/) 274 /< 275 /= 276 /> 000 /(DUMMY ENTRY) 375 /ALTMODE ASR-33 376 /ALTMODE ASR-35 233 /ESCAPE KEY 242 /DOUBLE QUOTE (") 244 /DOLLAR SIGN ($) 377 /RUBOUT 272 /COLON (:) LIST1A, 215 /CARRIAGE RETURN 225 /^U 203 /^C /HANDLER FOR G COMMAND GETTAG, ISZ THSN TAD ARG0 SNA /ANY ARGUMENTS TAD THSN /NO - BEGIN WITH NEXT LINE (.+1) DCA ARG0 /YES - SET ARGUMENTS SKP GTAG2, ISZ ARG0 IAC TAD ARG0 JMS I FIN1 /GET NEXT LINE DCA AXOUT CMA DCA XCT JMS I UTR1 /UNPACK FIRST CHARACTER JMS I SORTJ /DOES IT BEGIN A TAG? LIST7-1 /NO - TAGLIST EXITS TAGLIST-LIST7 /TO GTAG2 JMP I LIS1 /YES - PRINT LINE PAGE MP1=ARG1 MP2=ARG0 MP3=ARG2 /HANDLER FOR M COMMAND /ENTER WITH FIRST LINE TO MOVE IN MOV1 /LAST LINE TO MOVE IN MOV2 /MOV2 .GT. MOV1 /DESTINATION LINE IN ARG2 MOVEM, TAD MOV1 CIA /ARG2 MAY NOT BE BETWEEN TAD ARG2 /MOV1 AND MOV2 SPA CLA /IS MOV1 .GT. ARG2? JMP .+6 /YES - O.K. TAD MOV2 CMA TAD ARG2 SPA SNA CLA /IS MOV2 .LT. ARG2? ERROR /NO-FAULTY LOGIC IN COMMAND TAD MOV1 /YES JMS I FIN1 DCA MP1 /STORE FIRST LINE POINTER IAC TAD MOV2 JMS I FIN1 DCA MP2 /STORE LAST LINE POINTER TAD ARG2 JMS I FIN1 DCA MP3 /STORE DESTINATION LINE POINTER CDF 10 /ALL FOUND TAD I MP1 /SWAP POINTERS- DCA TEMP /RESET THE LINK COORDS TAD I MP2 DCA I MP1 TAD I MP3 DCA I MP2 TAD TEMP DCA I MP3 CDF 0 JMP I TE1 /*RETURN TO COMMAND MODE* SRNLST=. SBAR /BACK ARROW (_) L2 /FORM FEED SCONT /BELL SLINE /LINE FEED RUB1 /RUB OUT LISTGO=. SRETN /CARRIAGE RETURN SGOT /SEARCH CHARACTER FOUND /HANDLER FOR RUBOUT IN TEXT OR SEARCH RUB1, TAD AXIN CIA TAD BUFR TAD XCTIN SZA CLA /IS THERE ANYTHING ON THIS LINE? TAD ECHOSW /OR ECHO INHIBITED? SNA CLA JMP I IGNORE /YES-IGNORE RUBOUT TAD SPLAT /NO- JMS I OUT1 /OUTPUT BACKSLASH TAD AXIN /GET LAST WORD OF INPUT DCA MOV1 CDF 10 DCA I BUFR /PREVENTS INFINITE RUBOUTS TAD I MOV1 ISZ XCTIN /WHICH HALF OF WORD? JMP RUB2 AND C77 TAD M77 SZA CLA /TEST EXTENSION JMP RUB4 RUB3, CMA DCA XCTIN 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 P7700, 7700 /HANDLER FOR SPACE IN TEXT MODE SPACES, TAD ECHOSW CLA /OR SZA CLA IF B OPTION JMP I SPCNO /PACK IT - (MOR+4) CMA /SET COUNTER SP2, DCA CNT JMS I BUFRDI /GET LAST CHARACTER TAD M240 SNA CLA /WAS IT SPACE? JMP SP2 /YES-IGNORE EXTRA SPACES /---------------------------------------------------------- TAD CHAR /NO DCA SAVE /SAVE NON-SPACE ISZ CNT /WAS THERE MORE THAN 1 SPACE? TAD M27 /YES- STORE TAB TAD C240 /NO-STORE SPACES DCA CHAR JMS I PACK1 TAD SAVE JMP I SPCGO /SORT - (MOR+1) /HANDLER FOR $ (PART OF M COMMAND) MOVE, TAD ARG0 /ARG2 .GE. ARG0 CIA TAD ARG2 SPA CLA /ARE LINES TO BE MOVED LEGITIMATE ERROR /NO TAD ARG0 /YES- DCA MOV1 /SET POINTER TO FIRST LINE TAD ARG2 DCA MOV2 /SET POINTER TO LAST LINE JMP I ONUM /CONTINUE COMMAND INPUT OPS1, EXNEX /LINE FEED GEXP /SPACE GEXP /PLUS FIRS /COMMA GMIN /MINUS PERI /POINT(.) SLAS /SLASH EXLAS /BACKUP(<) PRNT /= EXNEX /ALT(>) DBCV2 /DUMMY AMODE /ALTMODE ASR-33 AMODE /ALTMODE ASR-35 AMODE /ESCAPE KEY DBLQUO /" MOVE /DOLLAR SIGN ELIM /COMMAND RUBOUT PRNT /: GTOP-2 /CARRIAGE RETURN START /^U ERROR /^C CAN'T HAPPEN IN CAS-8 OPS1A, RETRN /RETURN /---------------------------------------------------------- START /^U ERROR /^C CAN'T HAPPEN IN CAS-8 PAGE / END OF WORK BUFFER CHECK ROUTINE TBUF, 0 CLL TAD AXIN /GET CURRENT POINTER TAD (3610 /KEYBOARD MON SHOT? SNL CLA JMP I TBUF /NO DCA INCORE /LONG BOOT STRAP TAD AXIN TAD (1610 /END OF BUFFER? SZL CLA JMP I TBUF /NO ERROR /HANDLER FOR E COMMAND ENDFIL, TAD EKILLL /IS E COMMAND ALLOWED? SZA CLA ERROR /NO-NO INPUT SPECIFIED CLA CMA /YES-RESET ARGUMENTS 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 /HANDLER FOR ^U IN TEXT MODE CTRLU, JMS CTRLU1 /GENERATE A ^U JMP I AONEI /AND CONTINUE /PRINT ^U CTRLU1, 0 TAD C325 JMS I UPAROI /PRINT ^U TAD CCR /AND A CR/LF JMS I OUT1 JMP I CTRLU1 /--RETURN-- C325, 325 /CHECK VALIDITY OF ARGUMENTS /FOR D COMMAND CHKARX, 0 TAD ARG0 CIA IAC TAD ARG1 TAD LSTN SPA CLA /DO LINES EXIST? ERROR /NO JMP I CHKARX /YES--RETURN-- /HANDLER FOR . PERI, TAD THSN SKP /HANDLER FOR / SLAS, TAD LSTN DCA TEMP /SAVE LINE NUMBER DCA CHAR ISZ LSTCHK /GOT EITHE . OR / IN ARGS JMP I .+1 /FETCH REST OF ARGUMENT GLOM /END OF A NEW TEXT LINE /PACK CARRIAGE RETURN INTO BUFFER /SET LINK CELLS AROUND NEW LINE /ENTER WITH: / CHAR CONTAINS CARRIAGE RETURN / THIS CONTAINS ADDRESS OF LINK / CELL OF PRECEDING TEXT LINE / XSAV CONTAINS ADDRESS OF LINK / CELL OF FOLLOWING TEXT LINE / BUFR CONTAINS ADDRESS OF LINK / CELL OF NEW TEXT LINE ENDLN, 0 JMS I PACK1 /PACK CARRIAGE RETURN CDF 10 TAD ADD SZA DCA I AXIN TAD BUFR /RESET LINK CELL DCA I THIS /OF PREVIOUS LINE TAD XSAV DCA I BUFR /RESET LINK CELL OF NEW LINE TAD BUFR DCA THIS /RESET POINTER TO LINK CELL ISZ AXIN TAD AXIN DCA BUFR /RESET FOR NEXT LINE DCA XCTIN /CR CHARACTER SWITCH CDF 0 JMP I ENDLN /--RETURN-- PAGE /HANDLER FOR Q COMMAND Q, TAD OUTINH /OPENED OUTPUT FILE? SNA CLA /WAS AN OUTPUT DEVICE SPECIFIED? ERROR /NO- FLCLOS, TAD LSTN SNA CLA /IS BUFFER EMPTY? JMP FLCLS1 /YES-CLOSE FILE TAD FLCLI /NO- DCA TE1 /SET UP RETURN FROM P COMMAND JMP I .+1 PUNCH /WRITE CURRENT BUFFER /CLOSE FILE ON E OR Q COMMAND / THE OUTPUT CLOSE ROUTINE FLCLS1, TAD (232&177 /GET AN (^Z) JMS OCHAR /WRITE IT INTO THE BUFFER TAD (200 TAD OUWDCT /SEE IF IT FORCED A WRITE SZA CLA / JMS OUWRT /NO.. SO WE FORCE IT JMS INTWT /FINISH LAST OPERATION TAD OUNIT /GET THE OUTPUT UNIT CIF 10 CALL (CLOSE /CLOSE THE FILE JMP CLERR /FILE O.K., BUT LET USER KNOW CIF 10 TAD INUNIT /REWIND UNITS CALL (UTIL 10 NOP /IGNORE ERRORS ETOMON, TAD INCORE CIF 10 SZA CLA JMP 5200 CIF 0 DCA CTRLCJ /CLEAR MONITOR RETURN LOCATION JMS WRTMSG UPC JMS KIN 7600 JMP I .-1 FLCLI, FLCLS1 INCORE, 01 /MONITOR INCORE SWITCH PAGE SRCBUF, ZBLOCK 24 /SEARCH BUFFER /SPECIAL CHARACTER LIST FOR STRING SEARCH SLST=. 247 /" 242 /' 377 /RUBOUT 203 /^C 225 /^U NEXBUF, DUMB1&177+5600 /JMP I DUMB1 /DISPATCH LIST FOR STRING SEARCH OSLST, QUO1 /" QUO2 /' FORGET /RUBOUT ERROR /^C CAN'T HAPPEN IN CAS-8 RLEAS /^U IN STRING SEARCH /GENERATE ^ FOLLOWED BY THE CHARACTER /WHICH IS IN AC ON ENTRY UPAROW, 0 DCA TEMPO /SAVE CHARACTER TAD C336 JMS I OUTL1 /PRINT ^ TAD TEMPO JMS I OUTL1 /PRINT CHARACTER JMP I UPAROW /--RETURN-- C336, 336 /HANDLER FOR ^U DURING STRING SEARCH RLEAS, JMS I (CTRLU1 JMP I (START /^U GETS US BACK TO # /HANDLER FOR ALTMODE AMODE, DCA STRIND /NEED SETUP JMS I STRFIN /SEARCH FOR STRING ERROR TAD THSN /RESULT IS LINE NUMBER JMP I .+1 /LINK TO COMMAND STRUCTURE GTOP+1 /HANDLER FOR J COMMAND JERK, DCA STRIND /SETUP FOR SEARCH JERK1, JMS I STRFIN /SEARCH FOR STRING JMP GMOR /GET NEXT BUFFER TAD CZ /RESTORE MONITOR EXIT DCA I TE1 JMP I TE1 /*POSSIBLE RETURN TO COMMAND MODE* /GET NEXT BUFFER FOR S SEARCH GMOR, TAD I CNTRI SNA CLA /IS BUFFER EMPTY? ERROR /NO ISZ STRIND /YES-BYPASS SETUP TAD NEXBUF DCA I COMM5 /SET UP READ OF ONE BUFFER IAC DCA ARG0 TAD EKILLL SZA CLA /IS THERE AN OUTPUT DEVICE? JMP I .+2 /NO JMP I .+2 /YES YANK /NO OUTPUT COMBO /THERE IS OUTPUT /HANDLER FOR F COMMAND BARROW, ISZ STRIND /CONTINUES LOOK FOR EXISTING STRING ISZ THSN /INCREMENT FOR NEXT LINE JMP JERK1 CNTRI, CNTR /HANDLER FOR " DBLQUO, ISZ THSN /USES STRING NOW IN BUFFER ISZ STRIND /NO SETUP REQUIRED JMP AMODE+1 /HANDLER FOR B COMMAND CORSPC, TAD BUFR /YES-SET UP NUMBER OF LOCATIONS CIA /IN ARG2 TAD BUFEND TAD K400 DCA ARG2 JMP I .+1 PRNT K400, 400 /HANDLER FOR K COMMAND KILL, TAD ARG0 /IN CASE HE TYPED N,MK SZA CLA /INSTEAD OF N,ML. SAVE HIM!! ERROR TAD END /RESET BUFFER POINTERS DCA BUFR /TO REFLECT EMPTY BUFFER DCA LSTN DCA THSN CDF 10 /ZERO FIELD 1 POINTER DCA I CFRS CDF 0 JMP I TE1 /*RETURN TO COMMAND MODE* / READ A RECORD FROM INPUT FILE READ, 0 JMS INTWT /WAIT FOR LAST OPERATION TAD INEOF /CHECK TO SEE IF LAST READ EOF'D SZA CLA JMP I READ /IGNORE THIS READ TAD (INERRX /SET NEW ERROR POINT DCA ERET CIF 10 TAD INUNIT CALL (HANDLER 0 /READ INTO FIELD 0 INBUFP, 6400 /INPUT BUFFER ADDRESS JMP RDERR /READ FAILED JMP I READ INEOF, 0 /INITIAL VALUE *2400 /---------------------------------------------------------- /---------------------------------------------------------- /STRING SEARCH ROUTINE /CALLED BY $(ALTMODE) AND J COMMAND HANDLERS SFIND1, 0 ISZ ECHOSW TAD STRIND /IS SETUP NECESSARY SZA CLA JMP SFIND2 /NO. TAD MSCNT DCA BUFCNT /SET COUNTER TAD SBUF DCA AXIN /BEGIN SEARCH BUFFER TAD ATSIGN JMS I OUTL1 /OUTPUT $ ISZ TABIND RLOOP, JMS I CHI1 /FETCH CHARACTER FROM TTY JMS I SORTJ /IS IT SPECIAL FOR SEARCH STRING? SLST-1 /YES-HANDLE IT OSLST-SLST ISZ BUFCNT /NO-SEARCH BUFFER FULL? JMP STORE /NO-STORE THIS CHARACTER CLA CMA DCA BUFCNT /YES-DON'T ALLOW ANY MORE JMP RLOOP-1 /BUT KEEP ECHOING HIS STORE, TAD CHAR /STORE CHARACTER IN SEARCH BUFFER DCA I AXIN JMP RLOOP /HANDLER FOR " QUO2, TAD THSN /START AT .+1 /HANDLER FOR ' QUO1, IAC /START AT .=1 DCA THSN TAD AXIN CIA /MAKE UP COUNT OF NO. CHARS NOW IN TAD SBUF /SEARCH BUFFER DCA CNTR DCA I AXIN /END STRING WITH A 0 SFIND2, TAD CNTR SNA CLA /IS BUFFER EMPTY? JMP ER1 /YES-PREPARE TO EXIT JMS NUCHAR /NO GET FIRST STRING CHARACTER 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 CDF 0 TAD THSN CIA TAD LSTN SPA CLA /LAST LINE? JMP ER1 /YES-FINISHED WITH BUFFER TAD TMP2 /NO DCA AXOUT /SET TO UNPACK CHARACTERS CMA DCA XCT UPK1, JMS I UTR1 /UNPACK A CHARACTER DCA TMP2 TAD TMP2 TAD MCR SZA CLA /END OF LINE? JMP NOCR /NO ISZ THSN /YES-INCREMENT LINE COUNTER JMS NUCHAR /FORGET PREVIOUS MATCHES ON NEW LINE DCA CHFND CDF 10 TAD NEXTPT /AND GET NEXT LINE JMP COMBAK NOCR, TAD TMP2 /CHARACTER OTHER THAN CARRIAGE RTRN TAD TMP1 /GET A CHARACTER FROM SEARCH BUFFER SZA CLA /DO THEY MATCH JMP UPK /NO ISZ CHFND /YES-BUMP A RANDOM POINTER CLA CMA DCA FMATCH /SIGNIFY FIRST MATCH JMS NUCHA /GET NEXT SEARCH CHARACTERR JMP UPK1 /AND ANOTHER BUFFER CHARACTER 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 /GET 1ST CHARACTER OF SEARCH STRING DCA CHFND JMP UPK1 /TRY AGAIN STFIN, TAD CHFND /END OF STRING-DO COUNTS MATCH? TAD CNTR SNA CLA JMP GOOD /YES-SEARCH SUCCESSFUL ER1, TAD LSTN /IF BUFFER EMPTY, SET .=0 SZA CLA IAC DCA THSN SKP /CAUSE ERROR RETURN (?) GOOD, ISZ SFIND1 /INCREMENT RETURN JMP I SFIND1 /--RETURN-- /GET NEXT SEARCH CHARACTER NUCHA, 0 TAD .-1 /SET TO RETURN FROM NUCHAR DCA NUCHAR JMP NEXX /GET FIRST CHARACTER OF SEARCH STRING NUCHAR, 0 TAD SBUF DCA AXIN NEXX, TAD I AXIN SNA /END OF STRING? JMP STFIN /YES CIA /NO - NEGATE SEARCH CHARACTER DCA TMP1 /AND STORE IT JMP I NUCHAR /--RETURN-- 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 /HANDLER FOR RUBOUT IN SEARCH STRING FORGET, TAD CCR JMS I OUT1 /OUTPUT CARRIAGE RETURN JMP SFIND1+1 *2600 /---------------------------------------------------------- /---------------------------------------------------------- THISX=COUNTP THISX2=DTEM /GARBAGE COLLECTION ROUTINE /ENTER WITH NUMBER OF LINE TO BE DELETED /IN AC GARBAG, 0 DCA LINPTR /SAVE OBJECT LINE ADDRESS TAD LINPTR DCA AXCOMB /SCAN LINE LOOKING FOR 7715 OR 1500 (CR) IAC /CNT HOLDS DCA CNT /TOTAL # LOCS IN THIS LINE CDF 10 COLECT, ISZ CNT TAD I AXCOMB /GET A WORD TAD K63 SNA /IS IT 7715? JMP FINONE /YES-END OF LINE TAD K6215 SZA CLA /NO-IS IT 1500? JMP COLECT /NO-TRY NEXT WORD FINONE, TAD CNT /YES MINUS CNT GIVES AMOUNT CIA /TO REDUCE CERTAIN POINTERS DCA RELCNT CDF 0 IAC /GO THROUGH LIST OF POINTERS JMS I FIN1 /& OFFSET PNTRS WHICH WILL BE MOVED CDF 10 /MOVED ALONG WITH TEXT GBG2, DCA THISX /SAVE POINTER TAD I THISX /GET ADDRESS OF THIS LINE SNA /DONE WITH STRING? JMP GBGEND /YES JMS CGEPTR /DECREASE POINTER IF NECESSARY DCA I THISX /STORE NEW POINTER TAD THISX2 JMP GBG2 /DO NEXT LINE RELCNT, 0 GBGEND, CDF 0 /ALL POINTERS ARE REDUCED. NOW, CLL CML TAD BUFR /PHYSICALLY MOVE CORE TO CIA /CORRESPOND WITH POINTERS TAD AXCOMB /AXCOMB POINTS TO FIRST LOC. TO GO SMA SNL /POINTERS O.K.? ERROR /NO DCA XCT /YES-SET UP OTHER POINTERS CDF 10 CMA TAD LINPTR DCA AXOUT TAD I AXCOMB /MOVE TEXT DCA I AXOUT ISZ XCT /ALL TEXT MOVED? JMP .-3 /NO-CONTINUE MOVING CDF 0 /YES TAD AXOUT DCA BUFR /RESET TOP OF BUFFER TAD BUFR /REDUCE AXIN FOR CHARACTER SEARCH DCA AXIN TAD THIS /NOW DECREASE THIS IF NECESSARY JMS CGEPTR DCA THIS JMP I GARBAG /--RETURN-- LINPTR, 0 K63, 63 CGEPTR, 0 /THIS ROUTINE DETERMINES IF THE DCA THISX2 /OF THE AC MUST BE DECREASED BY RELCNT. CLL /IF THISX2 IS GREATER THAN LINPTR TAD THISX2 /DECREASE THISX2 BY RELCNT. CIA TAD LINPTR /THIS EFFECTIVELY DECREASE ALL POINTERS SNL CLA /WHICH HAVE TO BE RELOCATED TAD RELCNT TAD THISX2 JMP I CGEPTR /LINE PRINTER OUTPUT ROUTINE /ENTER WITH CHARACTER IN AC /EXIT WITH AC CLEAR /HANDLER FOR V COMMAND VIEW, TAD (LPOCHR /SET UP LISTER TO EXIT TO LPT DCA OUTDEV ISZ TABIND TAD C214 /PAGE EJECT HIM JMS I OUTDEV JMS I LIS /LIST BUFFER TAD C214 /AND OUTPUT A FORM FEED JMS I OUTDEV JMP I TE1 /*RETURN TO COMMAND MODE* /HANDLER FOR , FIRS, TAD ARG2 JMP I ONUM K6215, 6215 DELE, JMS I DELT /DELETE THE LINES JMP I TE1 OUTEM, 0 /OUTPUT NONBLANK CHARS FROM INCH JMS GINCH TAD (-240!200 SNA CLA JMP .+3 JMS GINCH JMS TOUT ISZ HDPTR ISZ KNT JMP OUTEM+1 JMP I OUTEM /RETURN PAGE /EDITOR I/O *3200 / SCAN AN INPUT LINE ROUTINE SCNLIN, 0 /R1-NULL LINE TAD (LBUFR /R2-X:(CR) NOTATION DCA PTR /R3-EXPLICIT NAME TAD I PTR /R4-SYNTAX ERROR TAD (-215!200 /(CR)? SNA CLA JMP I SCNLIN /R1 1ST CHAR (CR) ISZ SCNLIN TAD I PTR DCA UNIT /1ST CHAR WILL ALWAYS BE UNIT ISZ PTR TAD I PTR TAD (-":!200 /COLON MUST FOLLOW UNIT SZA CLA JMP SYNERR ISZ PTR TAD I PTR TAD (-215!200 /IS THIS X:(CR) NOTATION? SNA CLA JMP I SCNLIN /YES / INITIALIZE THE FILENAME AND EXTENSION TO BLANKS TAD (INCHAD / DCA HDPTR / TAD (-10 / DCA KNT / ISZ HDPTR /DONT HAVE TO BLANK CHAR 1 TAD (240&177 / JMS PINCH / ISZ KNT / JMP .-4 / TAD (INCHAD DCA HDPTR JMS LET JMP SYNERR /1ST CHAR HAS TO BE LETTER JMS PINCH ISZ PTR ISZ HDPTR TAD (-5 DCA KNT JMS GETNAM /KNT IS NUMBER TO GET TAD I PTR TAD (-".!200 /DID WE GET EXTENSION? SZA CLA JMP CRCK /NO.. BETTER BE A (CR) ISZ PTR TAD (INCHEX DCA HDPTR CLA CLL CMA RTL /-3 DCA KNT JMS GETNAM CRCK, TAD I PTR TAD (-215!200 SNA CLA /LINE MUST END WITH A (CR) JMP NORMRT /IT DID SYNERR, ISZ SCNLIN JMS WRTMSG ERR NORMRT, ISZ SCNLIN JMP I SCNLIN UNIT, 0 / CHECK FOR A LETTER ROUTINE LET, 0 /R1-NOT A LETTER TAD I PTR /R2-THE LETTER IN 8 BIT TAD (-"Z!200-1 CLL TAD (32 SNL CLA JMP I LET TAD I PTR ISZ LET JMP I LET / CHECK FOR A DIGIT ROUTINE DIG, 0 /R1-NOT A DIGIT TAD I PTR /R2-IS A DIGIT 0-9 TAD (-"0!200 CLL TAD (-12 SZL CLA JMP I DIG TAD I PTR ISZ DIG JMP I DIG / WRITE OUT THE GIVEN MESSAGE WRTMSG, 0 /R-TYPES THE GIVEN MSG TAD I WRTMSG /THE ADDRESS OF THE MSG DCA WPTR ISZ WRTMSG TNXT, TAD I WPTR AND (777 JMS TOUT TAD I WPTR SPA CLA /NEG CHAR INDICATES END JMP I WRTMSG ISZ WPTR JMP TNXT WPTR, 0 / GETS LETTERS OR DIGITS AND PUTS THEM IN THE INCH AT HDPTR GETNAM, 0 JMS LET SKP /CHECK FOR A DIGIT JMP STCHAR JMS DIG JMP I GETNAM STCHAR, JMS PINCH ISZ HDPTR ISZ PTR ISZ KNT JMP GETNAM+1 JMP I GETNAM PAGE / GETS AN INPUT LINE FROM THE TTY GETLIN, 0 /R-GETS A LINE OF TEXT ENDED TAD (LBUFR /-WITH A (CR) DCA PTR GLINE, JMS KIN DCA I PTR TAD I PTR TAD (-377!200 /A (RO)? SNA /NO.. JMP ROR TAD (377-215 /A (CR)? SNA /NO.. JMP I GETLIN /YES.. RETURN TAD (215-225 /A (^U)? SNA CLA /NO.. JMP ZOTLIN TAD PTR CIA TAD (LBUFR SNA CLA JMP ZCOL CHRIN, TAD I PTR JMS TOUT ISZ PTR TAD PTR CIA TAD (LBUFR TAD (240&177 SMA CLA JMP GLINE TAD ERR JMS TOUT ZOTLIN, JMS WRTMSG CRLFA JMP GETLIN+1 / THE RUBOUT HANDLER ROR, CMA CLA TAD PTR DCA PTR TAD (LBUFR CIA TAD PTR SPA CLA JMP ZOTLIN TAD I PTR JMS TOUT JMP GLINE / THE 0: FUDGE ZCOL, JMS DIG SKP JMP CHRIN+1 TAD ("0&177 DCA I PTR ISZ PTR TAD ("0&177 JMS TOUT TAD (":&177 DCA I PTR ISZ PTR TAD (":&177 JMS TOUT TAD I (KBDIN DCA I PTR JMP CHRIN / THE MESSAGES INMSG, "*&177+400 "I&177+400 "N&177+4000 OUTMSG, "*&177+400 "O&177+400 "U&177 "T&177 PUTMSG, "P&177 "U&177 "T&177 240&177 "F&177 "I&177 "L&177 "E&177 "-&177+4000 ERR, "?&177+400 CRLFA, 215&177+400 212&177+400 IFNZRO VT05 <0;0;0 /DELAY FOR VT05> "*&177+4000 CRLF, 215&177+400 IFZERO VT05 <212&177+400+4000> IFNZRO VT05 < 212&177+400 0;0;4000 /DELAY FOR VT05> BADUNT, "U&177+400 "N&177 "I&177 "T&177 240&177 "H&177 "A&177 "S&177 240&177 "O&177 "P&177 "E&177 "N&177 "E&177 "D&177 240&177 "F&177 "I&177 "L&177 "E&177+4000 TERMSG, 215&177+400 212&177+400 212&177+400 "?&177+400 0 /ERROR NUMBER UPC, "^&177+400 "C&177+400+4000 PAGE / OPEN AN INPUT FILE AND POSITION IT INFILE, 0 /R1-NO INPUT FILE JMS WRTMSG /R2-FILE OPENED AND POSITIONED CRLF JMS WRTMSG INMSG JMS WRTMSG PUTMSG GFNAME, JMS GETLIN /GET A LINE JMS SCNLIN /PARSE IT JMP CL /NULL FILE JMP SYNERR /PERSON TRIED X:(CR) SKP /GOOD FILE NAME JMP GFNAME /SYNTAX ERROR JMS WRTMSG CRLF TAD OUNIT /NEW INPUT UNIT CAN'T BE CIA / TAD UNIT /-ON OUTPUT FILES UNIT SNA CLA JMP BADIN JMS INTWT /MAKE SURE ALL I-O DONE TAD UNIT CIF 10 CALL (LOOKUP CDF 10 INCHAD JMP RDERR JMP INERR /ERROR RETURN ISZ INFILE TAD UNIT DCA INUNIT ISZ FILFLG /SIGNAL EXISTANCE OF INPUT FILE ISZ INFLG /" " " " " DCA INEOF /TURN OFF END OF FILE FLAG TAD (6400 DCA INBUFP JMS READ CLA CMA /FORCE READ DCA INCHCT / JMP I INFILE /RETURN INERR, JMS WRTMSG ERR JMP GFNAME BADIN, JMS WRTMSG BADUNT JMS WRTMSG CRLFA JMP GFNAME CL, JMS WRTMSG CRLF JMP I INFILE / GET A CHARACTER ROUTINE / WILL REQUEST ANOTHER INPUT FILE IF /M OPTION IS USED INCHAR, 0 /R1-NO MORE INPUT /R2-CHARACTER IN AC TAD INFLG /OPEN INPUT FILE? SNA CLA ERROR /NO... ISZ INCHCT /HAVE WE REACHED END OF BUFFER? JMP GETCHR GETBUF, TAD INEOF /CHECK TO SEE IF FILE EMPTY SZA CLA JMP GETFIL /IT WAS... START ANOTHER TAD INBUFP /GET FILLED BUFFER ADDRESS DCA INPTR TAD INBUFP CIA TAD (FLIPI /SWITCH TO OTHER BUFFER DCA INBUFP JMS READ TAD (-200 DCA INCHCT GETCHR, TAD I INPTR DCA CHAR TAD CHAR AND (177 /JUST IN CASE OF 8-BIT TAD (-232!200 /A (^Z)? SNA CLA JMP GETFIL /EOF ISZ INPTR TAD CHAR AND (177 SNA JMP INCHAR+1 TAD (200 JMP I INCHAR GETFIL, TAD MULTIN /MULTIPLE INPUT FILES ALLOWED? SNA CLA SKP /NO.. JMS INFILE /YES.. GET NEW INPUT FILE SKP CLA JMP GETBUF /LOAD A BUFFER DCA INFLG /DISABLE READS TAD I COMM5 /THE FOLLOWING CODE HANDLES SMA CLA /THE CASE OF NO FINAL FORM ERROR /IN THE INPUT BUFFER CLA IAC / DCA THSN / JMP I .+1 /FINISHING PROCESSING THE SFIND2 /-INPUT BUFFER INCHCT, 0 PAGE / OPEN AN OUTPUT FILE AND POSITION IT OUTFIL, 0 /R1-NO OUTPUT FILE JMS WRTMSG /R2-FILE OPENED AND POSITIONED OUTMSG GOFNM, JMS GETLIN /ZERO THE VERSION NUMBER CDF 10 DCA I (INCHAD+24 CDF 0 JMS SCNLIN JMP I OUTFIL /NULL OUTPUT FILE JMS TACKIT /X:(CR) NOTATION USED SKP /EXPLICIT FILE NAME GIVEN JMP GOFNM /SYNTAX ERROR JMS WRTMSG CRLF TAD UNIT CIA TAD INUNIT SNA CLA JMP BADOU JMS INTWT /MAKE SURE ALL I-O DONE CIF 10 TAD UNIT CALL (ENTER /OPEN THE OUTPUT FILE JMP OUERR TAD (FLCLS1 /MAKE ^C CLOSE FILE DCA CTRLCJ /MONITOR ^C BRANCH LOCATION ISZ OUTFIL ISZ OUTINH /SIGNAL OPEN OUTPUT FILE ISZ OUNIT /FIRST TIME? JMP PANICO /NO.. MUST BE PANIC MODE TAD (-200 /WORD COUNT DCA OUWDCT / TAD (7000 /OUTPUT BUFFER DCA OUPTR / TAD (7000 DCA OUBPTR PANICO, TAD UNIT DCA OUNIT JMP I OUTFIL /RETURN TACKIT, 0 /R-TYPES OUT THE DEFAULT FILENAME TAD FILFLG /-WILL GIVE SYNTAX ERROR IF NOT SPA SNA CLA /-IN RESPONSE TO INITIAL OUTPUT JMP SYNERR /-FILE WITH GIVEN INPUT FILE CLA CLL CML RAR /4000 DCA FILFLG / THE FOLLOWING GETS THE NAME FROM THE INCH AND PRINTS IT TAD (INCHAD / DCA HDPTR / JMS GINCH / JMS TOUT / TAD (-5 / DCA KNT / ISZ HDPTR / JMS OUTEM / TAD (".&177 / JMS TOUT / CLA CLL CMA RTL /-3 DCA KNT / JMS OUTEM / /BUMP THE INPUTS VERSION NUMBER FOR OUTPUT CDF 10 TAD I (INVNUM IAC DCA I (INCHAD+24 CDF 0 JMP I TACKIT / BADOU, JMS WRTMSG BADUNT JMS WRTMSG CRLFA JMP GOFNM OUNIT, -1 OUERR, JMS WRTMSG ERR JMP GOFNM / OUTPUT A CHARACTER ROUTINE OCHAR, 0 /R-CHARACTER OUTPUT DCA I OUPTR TAD OUTINH /IS OUTPUT INHIBITED? SNA CLA ERROR /YES.. ISZ OUPTR ISZ OUWDCT JMP I OCHAR JMS OUWRT JMP I OCHAR / WRITE A BUFFER ROUTINE OUWRT, 0 /R-BUFFER WRITTEN JMS INTWT /WAIT FOR PREVIOUS OPERATION TAD (EOTHND /ERROR RETURN DCA ERET TAD OUNIT CIF 10 CALL (HANDLER /WRITE THE BUFFER 4000 /A WRITE FROM FIELD 0 OUBPTR, 7000 /ADDRESS OF BUFFER JMP WRTERR /WRITE ERROR. TAD (-200 DCA OUWDCT TAD OUBPTR CIA TAD (FLIPO /SWITCH TO OTHER OUTPUT BUFFER DCA OUPTR TAD OUPTR DCA OUBPTR JMP I OUWRT /RETURN OUPTR, 0 PAGE IOSET, CLA CLL CDF 10 TAD I (OPT2 SPA CLA ISZ MULTIN TAD I (OPT1 CDF 0 RTL SNL CLA JMP NOCONV TAD SZCL /SET UP TO CONVERT SPACES TO TABS DCA I SPCP1 NOCONV, JMS INFILE NOP JMS OUTFILE ISZ EKILLL /DISALLOW E COMMAND TAD (START DCA EDSTRT JMP START PINCH, 0 /STORE CHAR IN INCH CDF 10 DCA I HDPTR CDF 0 JMP I PINCH GINCH, 0 /GET A CHAR FROM THE INCH CDF 10 TAD I HDPTR CDF 0 JMP I GINCH TOUT, 0 /OUTPUT A CHAR TO THE TTY JMS I (TTOCHR JMP I TOUT KIN, 0 /GET A CHAR FROM THE TTY JMS I (KBDCHR JMP I KIN INTWT, 0 /I/O WAIT ROUTINE CIF 10 CALL (WAIT JMP I ERET /ERROR ON PREVIOUS OPERATION JMP I INTWT /NO ERROR.. CONTINUE ERET, .-2 /LOOP IF FIRST OPERATION MULTIN, 0 FILFLG, 0 SPCP1, SPACES+1 SZCL, SZA CLA /THE END OF TAPE HANDLER EOTHND, AND (40 SNA CLA JMP WRTERR /REAL ERROR - NOT EOT JMS BBG JMS BBG CIF 10 /-ARE CONSIDERED FATAL........ CALL (HANDLER /READ BACK LAST GOOD RECORD 0 6200 /PANIC INPUT AREA JMP WRTERR JMS BBG CIF 10 CALL (CLOSE /CLOSE THE FILE JMP WRTERR TRYAGN, JMS OUTFIL /ALL WILL BE O.K. IF USER GIVES JMP .-1 /-GOOD OUTPUT FILE TO FINISH WITH CIF 10 CALL (HANDLER 4000 6200 JMP TRYAGN /WRITE OUT THE LAST GOOD RECORD TAD OUBPTR CIA TAD (FLIPO /REWRITE BUFFER WE FAILED ON DCA OSPOT CIF 10 CALL (HANDLER 4000 OSPOT, 0 JMP TRYAGN /DIDN'T WORK - GIVE USER ANOTHER CRACK TAD (TRYAGN /WITHOUT CLOSING THIS FILE DCA ERET JMP INTWT+1 /CONTINUE OPERATION WHICH /IN PROGRESS BBG, 0 TAD OUNIT CIF 10 CALL (UTIL 50 JMP WRTERR JMP I BBG CLERR, CLA IAC WRTERR, IAC RDERR, TAD (460 /MUST PRINT CODE DCA TERMSG+4 /ERROR NUMBER JMS WRTMSG TERMSG JMP ETOMON /GO TO THE MONITOR THROUGH EXITOR INERRX, AND (20 /EOF? SNA CLA JMP RDERR /NO.. HARD ERROR ISZ INEOF /SIGNAL END OF FILE TO ALL FUTURE READS JMP I INTWT /CONTINUE OPERATION FIELD 1 /TO INITIALIZE TEXT BUFFER POINTER *20 /WHICH IS AT ABSOLUTE LOCATION 20 0 /IN FIELD 1. FIELD 0 *200 /SELF STARTING ADDRESS $