/TECO - VERSION J /SHEET 0 / 4 JUL 69 RBH /VERSION F: D.J. EDWARDS AND T.P. SKINNER 5/4/67 /MODIFIED FOR SECOND NAME (A). 8/30/67 /VERSION G: R.B. HAM 3/5/68 /VERSION H: R.B. HAM 4/15/68 /VERSION I: R.B. HAM 12/4/68 /VERSION J: R.B. HAM 7/4/69 MQA=7501 MQL=7421 MUY=7405 DVI=7407 SHL=7413 LSR=7417 /ASSEMBLY PARAMETERS FOR EAE VERSION: MQLMUY= MQL MUY /EAE INSTRUCTIONS ARE REAL MQLDVI= MQL DVI CLAMQA= CLA MQA FIXTAB IN= 0000 /INPUT BUFFER IS AT 10000 OUT= 0600 /OUTPUT BUFFER IS AT 10600 TXT= 1400 /TEXT BUFFER IS AT 11400 QRG= 5010 /Q-REG BUFFER IS AT 15010 ZMAX= 5670 /3000 [10] CHARS IN TEXT BUFFER APMAX= 5360 /2800 [10] CHARS =ZMAX-200 [10] QMAX= 4610 /2440 [10] CHARS IN Q-REGS DMAX= 1200 /640 [10] CHARS IN DECTAPE BUFFER /TECO - VERSION J /SHEET 1 /21 APR 69 RBH PAGE 0 /OS/8 FILE SYSTEM PROVIDES INTERRUPT LINKAGE: / 0 /INTERRUPT ADDRESS / NOP /INTERRUPT ADDR FOR PDP-5 / JMP I .+1 / INTR /FILE SYSTEM INTERRUPT HANDLER /TECO PROVIDES FOLLOWING LINKAGE: SCATP=4;SCAT=JMP I 4 /FILE SYSTEM INTERRUPT RETURN *5 INTP, SYS /PAPER TAPE & TTY ISR'S /FILE SYSTEM USES LOCATION 6 /LOCATION 7 IS FREE /FILE SYSTEM USES LOCATIONS 10-11 /TECO USES LOCATIONS 12-17 *20 /TECO PSEUDO-OPERATIONS: PUSH= JMS I .; PUSHXX POP= JMS I .; POPXX PUSHJ= JMS I .; PUSHJY POPJ= JMS I .; POPJXX PUSHL= JMS I .; PUSHLX POPL= JMS I .; POPLX ERR= JMS I .; ERRXX SORT= JMS I .; SORTB RESORT= JMP I .; SORTA2 SCAN= JMS I .; SGET RESCAN= JMS I .; SREGET LISTEN= JMS I .; TYI TYPE= JMS I .; TYO CTLTYP= JMS I .; TYPCTL CTVTYP= JMS I .; TYPCTV CRLF= JMS I .; TYCRLF GET= JMS I .; GETX PUT= JMS I .; PUTX TXTCPY= JMS I .; CPYTXT SKPSET= JMS I .; SETSKP NCHK= JMS I .; CHKNF CCHK= JMS I .; CHKCF BZCHK= JMS I .; CHKBZ QCHK= JMS I .; CHKQF QSKP= JMS I .; QOVER CLNCHK= JMP I .; CHKCLN QREF= JMS I .; QREFER QSUM= JMS I .; QSUMR QPUT= JMS I .; QPUTS /TECO - VERSION J /SHEET 2 /16 JAN 69 RBH SFAIL, 0 /SEARCH FAIL FLAG CFLG, 0 /COMMA FLAG CLNF, 0 /COLON FLAG NFLG, 0 /NUMBER FLAG OFLG, 0 /OPERATOR FLAG QFLG, 0 /QUOTED STRING FLAG M, 0 /NUMBER ARGS N, 0 CHAR, 0 /CURRENT COMMAND CHARACTER ITRST, 0 /ITERATION FLAG TFLG, 0 /TRACE MODE MPDL, 0 /MACRO FLAG SCHAR, 0 /LAST CHAR SORTED INPUT= JMS I . INR, ERRXX /INPUT ROUTINE ICHAR, 0 /INPUT ROUTINE TEMPORARY RCHAR, 0; IN /INPUT CHARACTER PNTR RUNIT, 4000 /INPUT DEVICE NUMBER REND, 0 /INPUT END-OF-FILE FLAG OUTPUT= JMS I . OUTR, ERRXX /OUTPUT ROUTINE OCHAR, 0 /OUTPUT ROUTINE TEMPORARY WCHAR, 0; OUT /OUTPUT CHARACTER PNTR WUNIT, 4000 /OUTPUT DEVICE NUMBER WEND, 0 /OUTPUT END-OF-FILE FLAG SCANP, 0 /COMMAND LINE EXECUTION POINTER PDLP, 0 /PUSH-DOWN-LIST POINTER QNMBR, 0 /LAST Q-REG REFERENCED QCMND, 0 /COMM LINE OR MACRO POINTER B, 0 /BEGINNING OF TEXT BUFFER PNTR P, 0; TXT /CURRENT PNTR TO TEXT BUFFER ZZ, 0 /END OF TEXT BUFFER PNTR Q, 0; TXT /EXTRA BUFFER PNTRS R, 0; TXT QP, 0; QRG /Q-REGISTER POINTER QR, 0; QRG /CUX Q-REG POINTER QZ, 0 /END OF Q-REG POINTER KFLG, 7777 /ECHO MODE SWITCH: ON XFLG, 0 /OUTPUT MODE SWITCH: EXPANDED YFLG, 7777 /INPUT MODE SWITCH: BRIEF /TECO - VERSION I /SHEET 3 / 4 DEC 68 RBH QREGS, QPNTR /Q-REGISTER POINTER ARRAY SERR, ERR /ILLEGAL COMMAND ENCOUNTERED ISCAT, 0 /SCAT ADDRESS LOADED AT RUN TIME MASK, 177 /ASCII CHARACTER MASK KBISR, KANSR /POINTER TO TTY INPUT I.S.R. APPLST, 0 /NULL: IGNORE CARO, 177 /RUBOUT: MAKE SYNC 35 /GS: END OF SEGMENT 34 /FS: END OF FILE CASP, 40 /SPACE 26 /SYNC: TIME WASTER OUTLST, 14 /FF: END OF PAGE CALF, 12 /LF CACR, 15 /CR CAHT, 11 /HT CAAM, 33 /ALT MODE APM12, -12 /END OF LIST PAGE /TECO - VERSION I /SHEET 4 / 5 NOV 68 RBH PAGE 1 TECO, JMS I (IOSTRT /INITIALIZE I/O DCA P /RESET POINTERS DCA ZZ DCA B DCA TCASE /SET TO UPPER CASE TAD OUTLST /FORM FEED TO NEW SHEET TYPE T1, JMS I (DISP /INITIALIZE DISPLAY TAD (PDLBEG) /RESET THE PUSHDOWN LIST DCA PDLP DCA QCMND /POINT TO COMMAND LINE DCA QNMBR /ANOTHER Q-REG POINTER TAD I QREGS /# OF CHARS IN PREV COMM LINE CIA /SUBTRACT FROM TAD QZ /Q-REG CONTENTS DCA QZ /NEW MAXIMUM DCA I QREGS /ZERO CHARS IN COMM LINE TAD (SFAIL-INR) /CLEAR SEVERAL PAGE 0 DCA TSIG /REGISTERS TAD (SFAIL-1) DCA 10 /USING AUTO-INDEX DCA I 10 /OF COURSE ISZ TSIG JMP .-2 PUSHJ /RESTORE ALTM & $ AS IREST /STRING TERMINATORS PUSHJ /UNDO A FIX CNDO+2 PUSHJ /OR TWO QUPNF+2 JMS TSIG T2, LISTEN /BUILD COMMAND LINE SORT COMLST COMTAB-COMLST TAD (-100) /TEST FOR LETTERS SMA TAD TCASE /ADD CASE BIT TAD (100) /RESTORE DCA CHAR CTLTYP /ECHO COMMAND CHARACTER JMS I (SPUT /PUT INTO C.L. BUFFER JMP T2 /GO GET ANOTHER /TECO - VERSION I /SHEET 5 /22 NOV 68 RBH TALTM, TAD CAAM /ALTM IN COMM LINE DCA SCHAR /MAKE EVERY ALTM INTO 33 JMS I (COMPAR /2ND ALTM STARTS EXECUTION JMS I (SPUT /PUT IN EXTRA ALTM AT END CRLF /START COMM EXECUTION DCA SCANP /RESET TO BEGINNING T6, SCAN DCA CHAR /SAVE COMMAND CHAR TAD TFLG /SEE IF TRACE ON M140, SZA CLA /-140, LOC USED AS CONSTANT CTLTYP /YES, TYPE OUT COMM CHAR TAD CHAR T6A, TAD M140 /SEE IF LOWER CASE SMA TAD (-40) /MAKE LC INTO UPPER CASE TAD (140+CDSP) /ADD BASE OF DISPATCH TABLE DCA T7 /LOOK UP ENTRY IN TAD I T7 /COMMAND DISPATCH TABLE DCA T7 /CALL RECURSIVELY PUSHJ T7, 0 /CALL TO ROUTINE CLA /FINALLY FINISHED THAT ONE TAD ITRST /INSIDE ITERATION? SZA CLA /LEGAL FOR SEARCHES TO FAIL? JMP T6 /YES, CONTINUE ISZ SFAIL /NO, SEE IF IT DID JMP T6 /NO, CONTINUE JMP I (RECOUP /YES, STOP EXECUTION TQMK, JMS I (COMPAR /? IN COMM LINE JMS CLDO /2ND ? ERASES 1ST ? PUSHJ /AND RETYPES TQMF /COMMAND LINE SO FAR JMP T2 /TAKE IN MORE COMMANDS TSIG, 0 /RESET SCAN POINTER AND SIGNAL DCA SCANP /BEGINNING OF COMM LINE CRLF TAD (52) /* TYPE JMP I TSIG /RETURN /TECO - VERSION I /SHEET 6 / 5 NOV 68 RBH ROCMND, TAD SCANP /SEE IF ANYTHING TO ERASE SNA CLA JMP T1 /NO, START ALL OVER RESCAN /YES CTVTYP /ECHO SCRUBBED CHAR JMS CLDO /REMOVE IT RESCAN /GET CHAR BEFORE DCA CHAR /MAKE IT PREV CHAR JMP T2 /PROCEED CLDO, 0 /COMM LINE DOWN ONE CHAR STA TAD QZ /FIRST BACK UP THE DCA QZ /Q-REGISTER COUNT STA TAD SCANP /NOW BACK UP SCAN POINTER DCA SCANP STA TAD I QREGS /AND CHARACTER COUNT DCA I QREGS JMP I CLDO TQMF, TAD SCANP /TYPE COMM LINE UP TO SCANP CMA /SAVE FOR COUNTING DCA CLDO /MORE TIGHT CODING JMS TSIG /FLAG BEGINNING OF COMM LINE TBA1, ISZ CLDO /DONE? SKP /NO POPJ /YES, RETURN SCAN /GET A CHAR DCA CHAR CTLTYP /CTRL CHARS GET ^ JMP TBA1 /TYPE ANOTHER TCASE, 0 /LOWER CASE BIT: 0 OR 40 PAGE /TECO - VERSION J /SHEET 7 /23 MAR 69 RBH PAGE 2 /GET AND PUT ROUTINES, EAE VERSION /DAN EDWARDS' BRAINCHILD /5 SEVEN BIT CHARACTERS PACKED IN 3 WORDS PUTX, 0 AND MASK /TRIM TO 7 BITS DCA GTMC TAD PUTX DCA GETX TAD (JMP PTR) JMP GTPT /SHARED ROUTINE GETX, 0 TAD (JMP GTR+1) GTPT, DCA GTR /GET AND PUT SHARE THIS PART TAD I GETX DCA GTT TAD I GTT MQL DVI 5 /FIND CHARACTER IN WORD TRIO TAD GTR DCA GTR MUY GTC3, 3 MQA CLA /PUT IN AC ISZ GTT /MOVE TO BUFFER BASE LOC TAD I GTT /ADD BUFFER BASE DCA GTT /PNTR TO PROPER WORD TRIO CLA MQL CDF 10 GTR, JMP . /DISPATCH JUMP JMP GTR0 JMP GTR1 JMP GTR2 JMP GTR3 ISZ GTT /REMAINDER IS 4 ISZ GTT TAD I GTT /33334444444X GTW, RAR GTX, AND MASK GTZ, ISZ GETX /SKIP OVER ARGUMENT CDF 0 JMP I GETX /TECO - VERSION J /SHEET 8 /23 MAR 69 RBH GTR3, ISZ GTT /REMAINDER IS 3 TAD GTC3 GTR1A, DCA GTSC /SHARED WITH REM 1 TAD GTT /THESE CHARACTERS ARE SPLIT IAC /BETWEEN TWO WORDS DCA GTMC /REM 1:000000011111 112222222333 TAD I GTMC /REM 3:112222222333 33334444444X MQL TAD I GTT SHL GTSC, 3 /FILLED IN JMP GTX GTR2, ISZ GTT /REMAINDER IS 2 TAD I GTT /112222222333 GTV, RTR JMP GTW GTR1, IAC /REMAINDER IS 1 JMP GTR1A /SHARED ROUTINE GTR0, TAD I GTT /REM 0:000000011111 RTR JMP GTV GTT, 0 /TEMP GTMC, 0 PTR, JMP PTR0 JMP PTR1 JMP PTR2 JMP PTR3 ISZ GTT /REMAINDER IS 4 ISZ GTT TAD I GTT /33334444444X AND (7400) /3333XXXXXXXX TAD GTMC /ADD TWICE IS SAME AS ROTATE LEFT PTV, TAD GTMC PTX, DCA I GTT JMP GTZ /TECO - VERSION J /SHEET 9 /23 MAR 69 RBH PTR3, ISZ GTT /REMAINDER IS 3 TAD GTMC LSR /MOVE CHARACTER 4 BITS RIGHT 3 DCA GTMC TAD I GTT /112222222333 AND (7770) /112222222XXX TAD GTMC /XXXXXXXXX333 DCA I GTT /112222222333 ISZ GTT /MOVE TO SECOND PART TAD (376) /MASK:XXX4444444X PTW, AND I GTT /THIS SECTION SHARED MQA /OR MQ IN TO AC JMP PTX PTR2, TAD GTMC /REMAINDER IS 2 CLL RTL /MOVE CHAR LEFT 3 BITS RAL /XX2222222XXX DCA GTMC ISZ GTT TAD (6007) /MASK:11XXXXXXX333 PTY, AND I GTT /SHARED CODING JMP PTV PTR1, TAD GTMC /REMAINDER IS 1 LSR /SHIFT CHAR 2 BITS RIGHT 1 DCA GTMC TAD I GTT /000000011111 AND (7740) /0000000XXXXX TAD GTMC /XXXXXXX11111 DCA I GTT /000000011111 ISZ GTT /MOVE TO SECOND PART TAD (1777) /MASK:XX2222222333 JMP PTW PTR0, TAD GTMC /REMAINDER IS 0 SHL /MOVE CHAR LEFT 5 BITS 4 DCA GTMC /0000000XXXXX TAD (37) /MASK:XXXXXXX11111 JMP PTY PAGE /TECO - VERSION I /SHEET 10 /30 OCT 68 RBH PAGE 3 /PUSH DOWN AND CHARACTER MOVE ROUTINES POPXX, 0 /POP ROUTINE CLA TAD PDLP TAD (-PDLBEG) /CHECK FOR UNDERFILL SPA SNA CLA ERR /SPRUNG OUT THE TOP STA /LET POINTER TAD PDLP /BACK OUT OF DCA PDLP /THE BOX TAD I PDLP JMP I POPXX PUSHXX, 0 /PUSH ROUTINE DCA ACXX TAD PDLP TAD (-PDLEND) /CHECK FOR OVERFILL SMA SZA CLA ERR /POKED OUT THE BOTTOM TAD ACXX DCA I PDLP ISZ PDLP /SQUISH POINTER JMP I PUSHXX POPJXX, 0 /POPJ ROUTINE DCA ACXY POP DCA POPJXX POPJXY, TAD ACXY JMP I POPJXX PUSHJY, 0 /PUSHJ ROUTINE DCA ACXY TAD I PUSHJY DCA POPJXX IAC TAD PUSHJY PUSH JMP POPJXY ACXX, 0 /STORAGE FOR ACXY, 0 /PUSH-DOWN ACXZ, 0 /ROUTINES /TECO - VERSION J /SHEET 11 /23 MAR 69 RBH PUSHLX, 0 /PUSH AND CLEAR A LIST DCA CPYTXT /SET COUNTER POP /SAVE RETURN POINTER DCA ACXZ TAD I PUSHLX DCA ACXY TAD I ACXY PUSH DCA I ACXY ISZ PUSHLX ISZ CPYTXT JMP PUSHLX+4 TAD ACXZ /RESTORE RETURN POINTER PUSH JMP I PUSHLX POPLX, 0 /POP A LIST DCA CPYTXT /SET COUNTER POP /SAVE RETURN POINTER DCA ACXZ TAD I POPLX DCA ACXY POP DCA I ACXY ISZ POPLX ISZ CPYTXT JMP POPLX+4 TAD ACXZ /RESTORE RETURN POINTER PUSH JMP I POPLX CPYTXT, 0 /COPY TEXT WITHIN BUFFERS GET Q PUT R ISZ Q ISZ R JMP I CPYTXT /TECO - VERSION I /SHEET 12 / 5 NOV 68 RBH ADJ, SPA /ADJUST BUFFER + OR - N CHARS JMP DNNC-1 /-N CHARACTERS UPPN, SNA /TEST FOR NOTHING POPJ /GO AWAY CLL /MOVE UP N CHARACTERS TAD ZZ /ADD TO MAX CHARACTER DCA R /NEW HIGHEST TAD R /SEE IF TOO HIGH TAD (-ZMAX) SZL CLA /TWO PLACES FOR OVERFLOW THERE ERR TAD ZZ DCA Q TAD R DCA ZZ UPNL, TAD R CIA TAD P SNA CLA /FINISHED? POPJ /YES CMA TAD Q DCA Q CMA TAD R DCA R GET Q PUT R JMP UPNL CIA /REACHED FROM ADJ DNNC, TAD P /MOVE DOWN N CHARACTERS DCA Q /N IN AC TAD P DCA R DNN1, TAD ZZ CIA TAD Q SNA CLA /FINISHED? JMP .+3 /YES TXTCPY JMP DNN1 TAD R DCA ZZ POPJ PAGE /TECO - VERSION I /SHEET 13 / 2 NOV 68 RBH PAGE 4 /COMMANDS C,D,J,K,L CHRJ, TAD N /COMMAND J NCHK TAD B /ASSUME BJ JMP CLOQ CHRC, TAD N /COMMAND C NCHK STA /ASSUME -1C TAD P /OFFSET RELATIVE TO . CLOQ, BZCHK /SEE IF IN RANGE B,Z DCA P /IN RANGE POPJ CHRD, CCHK /COMMAND D JMP CDN /ONE ARG DCA NFLG /CLEAR NUMBER FLAG PUSHJ MFROMN /COMPUTE N-M SNA /ANYTHING TO DELETE? POPJ /NO DCA CDT TAD M /SET POINTER DCA P /LOWER ARG JMP CDMN CDN, TAD N NCHK /SEE IF NUMBER FLAG UP STA /SET TO -1D IF NOT SNA /CHECK FOR 0D POPJ /0D IS IGNORED SMA JMP I (DNNC /+ND CIA DCA CDT /-ND TAD CDT CIA PUSHJ /DO (-)NC(+)ND CHRC+3 CDMN, TAD CDT JMP I (DNNC CKALL, TAD B /KILL WHOLE BUFFER DCA ZZ JMP CHRJ+2 /RESET POINTER /TECO - VERSION I /SHEET 14 /25 NOV 68 RBH CHRL, TAD N /COMMAND L NCHK CLA /L MEANS 0L CIA CLL /MAKE NEGATIVE SMA /DID IT? CLCMA, CMA STL /NO, MAKE MORE NEGATIVE DCA SREGET /SAVE IN SUBR ENTRY TAD CLCMA /COMPUTE SWITCH SNL /WHICH DIRECTION? TAD (IAC-CMA) /FORWARD DCA CLCH /CMA FOR -NL CLCH, JMP . /OR IAC FOR +NL TAD P /GET . DCA P /NEW . = OLD + OR - 1 CLA STL IAC /LOOK OUT FOR .=-1 TAD P /CLAMP AT ENDS OF BUFFER CIA CML TAD B /SEE IF AT HEAD SNA SZL CLA JMP CHRJ+2 /YES, EXIT TAD ZZ CIA CLL TAD P /SEE IF AT END SNA SZL CLA JMP CHRC+3 /YES, EXIT CLP, GET P TAD APM12 /CHECK FOR LINE FEED SNA CLA ISZ SREGET /FOUND ONE. ENOUGH? JMP CLCH /NO ISZ P /MOVE PAST LF POPJ CKT, 0 /TEMPORARY CDT, 0 /TEMPORARY SREGET, 0 /RESCAN LAST CHAR STA TAD SCANP SPA /ZEROTH CHARACTER? JMP I SREGET /YES, CALL IT NULL DCA SCANP SCAN JMP I SREGET /RETURN /TECO - VERSION I /SHEET 15 / 1 NOV 68 RBH CHRK, CCHK /K COMMAND JMP CKN /1 ARG PUSHJ /CONVERT LINE LINES /#'S TO CHARS JMP CHRD+2 /DO M,ND CKN, NCHK /WHAT ARGS? JMP CKALL /K MEANS EVERYTHING JMS I (NLINES /CONVERT N LINES TO M,N JMP CHRD+2 /DO .,(NL).D LINES, TAD P /SAVE . PUSH PUSHJ /COMPUTE MFROMN /N-M PUSH /SAVE IT TAD M PUSH /SAVE IT PUSHJ CHRB PUSHJ /DOING BJML CHRJ POP /RETRIEVE M PUSHJ CHRL+3 /FIND LINE M TAD P DCA M POP /RETRIEVE N-M PUSHJ CHRL+3 TAD P DCA N POP /RETRIEVE ORIGINAL . DCA P POPJ TYCRLF, 0 /TYPE A CR AND LF TAD CACR /CR TYPE TAD CALF /LF TYPE JMP I TYCRLF /RETURN PAGE /TECO - VERSION I /SHEET 16 /10 OCT 68 RBH PAGE 5 /COMMANDS ^D,^K,,,N,R,S, AND _ CSCH, QCHK /SEARCH ROUTINE TAD SCANP DCA CST TAD P DCA CSP JMP CSG CSL, SCAN SORT SCHLST SCHTAB-SCHLST CSQ, CIA DCA CSNB GET P TAD CSNB CSWT, SZA CLA JMP CSF /FAIL TO MATCH ON THIS CHARACTER ISZ P CSG, TAD CSZCL DCA CSWT /RESTORE SEARCH TEST TAD ZZ CMA TAD P CSZCL, SZA CLA /CHECK FOR END OF BUFFER JMP CSL /NO QSKP /SKIP OVER SEARCH STRING TAD B DCA P CMA /SET SEARCH FAIL FLAG CSZ, DCA SFAIL POPJ CSK, ISZ CSN /GET NTH OCCURRENCE JMP CSF /MORE TO GO JMP CSZ /GOT IT CSF, TAD CST /RESET SCANP DCA SCANP ISZ CSP /INDEX P TAD CSP DCA P JMP CSG /TECO - VERSION J /SHEET 17 /23 MAR 69 RBH CHRS, JMS CSNB /COMMAND S PUSHJ CSCH CLNCHK /ASSIGN VALUE, IF ANY CHBA, TAD CHIRPY /COMMAND _ CHRN, TAD CHIRP /COMMAND N DCA CNXT JMS CSNB QCHK /SNAG QUOTING CHAR CNJ, TAD SCANP DCA RADIX /SAVE SCAN POINTER PUSHJ CSCH+1 /DO A SEARCH TAD SFAIL SMA CLA /SUCCESS? CLNCHK /YES, ASSIGN VALUE TAD REND /SEE IF FILE END SNA CLA CLNCHK /FAILED, ASSIGN VALUE TAD RADIX /OTHERWISE RESET SCANP DCA SCANP PUSHJ CNXT, 0 /CHRP OR CHRY JMP CNJ CSNB, 0 /SET # OF TIMES TO FIND TAD N NCHK IAC /ASSUME 1 CIA DCA CSN JMP I CSNB CSN, 0 /COUNTER CST, 0 /TEMP SCANP CSP, 0 /TEMP P CHIRPY, CHRY-CHRP /POINTER TO Y COMMAND CHIRP, CHRP /POINTER TO P COMMAND /TECO - VERSION I /SHEET 18 / 1 NOV 68 RBH CHRR, JMS CSNB /COMMAND R PUSHJ CSCH /DO SEARCH PART TAD SCANP /SAVE SCAN POINTER DCA CSNB QSKP /COUNT UP STRING 2 TAD SFAIL SPA CLA CLNCHK /FAILED, SET VALUE & EXIT TAD CSNB /GET START OF STRING 2 TAD P /AND END OF STRING 1 CMA TAD SCANP /FROM END OF STRING 2 TAD CSP /AND START OF STRING 1 DCA CSN /NET CHANGE IN BUFFER SIZE TAD CSP /RESET DCA P /TEXT POINTER TAD CSNB /AND DCA SCANP /COMMAND POINTER TAD CSN PUSHJ ADJ /ADJUST BUFFER SIZE PUSHJ /INSERT CIL2 /STRING 2 CLNCHK /SET VALUE AND EXIT /TECO - VERSION I /SHEET 19 /10 OCT 68 RBH CTLK, TAD (ORAD-DRAD) /COMMAND ^K CTLD, TAD (DRAD) /COMMAND ^D DCA RADIX TAD I RADIX /FETCH 1000 OR 1750 DCA I (PRAD /TO "=" COMMAND ISZ RADIX TAD I RADIX /FETCH 10 OR 12 DCA I (PRAD+1 /TO "=" COMMAND TAD I RADIX /FETCH 10 OR 12 DCA I (NMRBAS /TO NUMBER PROCESSOR POPJ RADIX, 0 /SHARED WITH SEARCH ROUTINES CCMA, NCHK /COMMAND , ERR /NUMBER FLAG NOT SET TAD N /MOVE N TO M DCA M DCA N /AND CLEAR N STA DCA CFLG /SET COMMA FLAG POPJ PAGE /TECO - VERSION J /SHEET 20 /16 JAN 69 RBH PAGE 6 /NUMBER PROCESSORS: /COMMANDS B,F,H,Z,+,-,.,#,&,*,/,(,AND ) NMBR, TAD CHAR /NUMBER FOUND IN COMMAND STRING TAD (-60) DCA NMT NCHK /CHECK NUMBER FLAG JMP NNEW /NOT UP, NEW OPERAND TAD NP /MULTIPLY PREV DIGITS BY 10 MQLMUY NMRBAS, 12 /CHANGE TO 10 FOR OCTAL RADIX CLAMQA NMR, TAD NMT DCA NP /CURRENT NUMBER TAD NP NOPR, SKP /DISPATCH JUMP FOR OPERATOR CIA TAD NACC /CURRENT EXPRESSION VALUE NRET, DCA N CLA CMA /SET NUMBER FLAG DCA NFLG DCA OFLG /CLEAR OPERATOR FLAG POPJ CHRB, TAD B /COMMAND B JMP NCOM CHRH, PUSHJ /COMMAND H CHRB PUSHJ CCMA /DO B AND , THEN Z CHRZ, TAD ZZ /COMMAND Z NCOM, DCA NMT /COMMON TO ALL NUMBER ROUTINES NNEW, TAD OFLG /CHECK OPERATOR FLAG SZA CLA /MIDDLE OF EXPRESSION? JMP NMR /YES DCA NACC /NO, CLEAR ACCUMULATOR TAD NSKP /ASSUME + DCA NOPR JMP NMR NMT, 0 /TEMP NP, 0 /VALUE OF CURRENT NUMBER NACC, 0 /VALUE OF EXPRESSION WITHOUT NP /TECO - VERSION J /SHEET 21 /23 MAR 69 RBH CDOT, TAD P /COMMAND . JMP NCOM CPLS, NCHK /COMMAND + DCA N TAD NSKP CMIP, DCA NOPR /COMMON TO ALL NUMERIC OPERATORS TAD N DCA NACC DCA NP STA /SET OPERATOR FLAG DCA OFLG DCA NFLG /CLEAR NUMBER FLAG POPJ CMIN, NCHK /COMMAND - DCA N /UNARY MINUS TAD (NOP) JMP CMIP CAST, NCHK /COMMAND * JMP CLINE /WANTS CURRENT LINE NUMBER TAD [-2] /MAKE MQLMUY JMP .+3 CVIR, NCHK /COMMAND / JMP LLINE /WANTS LAST LINE NUMBER TAD (MQLDVI) DCA NMC TAD (JMP NMLDV) JMP CMIP CAMP, TAD [-2] /COMMAND & CNBS, TAD (JMP NIOR) /COMMAND # JMP CMIP NAND, AND NACC /BITWISE .AND. OF BINARY NUMBERS JMP NRET /KEEP THESE TWO OPNS TOGETHER NIOR, CMA /BITWISE .IOR. OF BINARY VALUES AND NACC /USE VENN DIAGRAM TO PROVE IT TAD NP JMP NRET NMLDV, DCA NMC+1 /MUL & DIV OPNS TAD NACC /DIVIDE IS ONLY 12-BIT UNSIGNED NMC, MQLMUY /OR MQLDVI 0 /MULTIPLIER OR DIVISOR CLAMQA /TRUNCATE JMP NRET /TECO - VERSION J /SHEET 22 /23 MAR 69 RBH CHRF, PUSHJ /COMMAND F NCOM /MAKE A 0 PUSHJ CCMA /DO 0 AND , THEN / LLINE, TAD ZZ /FIND LAST LINE # NSKP, SKP CLINE, TAD P /FIND CURRENT LINE # CMA CLL TAD B DCA NP DCA NMT TAD B DCA R /USE AUX BUFFER POINTERS JMP LINA2 LINA1, GET R TAD APM12 /-LF SNA CLA /END OF LINE? ISZ NMT /YES, COUNT IT ISZ R LINA2, ISZ NP /FINISHED? JMP LINA1 /NO JMP NNEW /MAKE A NUMBER COPR, TAD OFLG /COMMAND ( SZA CLA /SEE IF OPENING OF EXPRESSION JMP .+3 /NO PUSHJ /YES, SO CLEAN UP FIRST NCOM /RECURSION IS NICE! TAD [-3] /PUSH 3 QUANTITIES PUSHL N NOPR NMC DCA NMT JMP CMIP-1 /CLEAN OUT INSIDE PARENS CCPR, TAD N /COMMAND ) DCA NMT TAD [-3] /POP 3 QUANTITIES FROM BEFORE POPL NMC NOPR NACC /OLD N JMP NMR /TREAT (...) AS A NUMBER PAGE /TECO - VERSION I /SHEET 23 / 4 JUL 69 RBH PAGE 7 /COMMANDS =,?, AND \ /NUMERICAL OUTPUTS & DISPATCH SORT OPRNT, 0 /OCTAL PRINT JMS ZEROD ORAD, 1000 10 DECTYO, TPUT /TYPE OUT JMP I OPRNT CEQL, NCHK /COMMAND = ERR /NO NUMBER TAD DECTYO /TYPE OUT JMP DPRNT CBSL, NCHK /COMMAND \ JMP I (CBSN TAD (UPOC) DPRNT, DCA DECDEV TAD N JMS ZEROD PRAD, 1750 /OR 1000 AND 10 12 /FOR OCTAL RADIX DECDEV, 0 POPJ CQSM, TAD TFLG /COMMAND ? CMA /CHANGE TRACE FLAG DCA TFLG POPJ UPOC, 0 /MOVE TEXT BUFFER UP ONE CHAR DCA OPRNT CLA IAC PUSHJ UPPN TAD OPRNT PUT P ISZ P JMP I UPOC /TECO - VERSION J /SHEET 24 /23 MAR 69 RBH ZEROD, 0 /BINARY TO OCTAL OR DECIMAL DCA PTSAVE /CONVERSION WITH LEADING STA /ZEROS DELETED DCA LEADZ TAD [-3] /-MAX # OF DIGITS DELETED DCA ZCOUNT TAD (JMP I ZPNT) DCA ZSWT /SET LEADING-ZERO SWITCH TAD I ZEROD /GET 8^3 OR 10^3 DCA DIV1 ISZ ZEROD TAD I ZEROD /GET 8 OR 10 DCA DIV2 ISZ ZEROD TAD I ZEROD /GET POINTER TO ROUTINE WHICH DCA DEVOUT /GETS DIGITS WE MAKE HERE. ISZ ZEROD /BUMP RETURN POINTER ZAGAIN, TAD PTSAVE /GET NUMBER TO BE CONVERTED MQLDVI DIV1, 0 /SUCCESSIVELY REDUCED BY 8 OR 10 DCA PTSAVE /RESIDUE CLAMQA SNA /IS DIGIT A ZERO? ZSWT, JMP I ZPNT /YES, SO JUMP THRU DISPATCH ISZ LEADZ /NO, IS IT FIRST NON-ZERO? SKP /NO ISZ ZSWT /YES, ALTER DISPATCH NLZ, TAD (60) /ADD CONSTANT TO MAKE ASCII JMS I DEVOUT /PUT OUT DIGIT LZ, TAD DIV1 /REDUCE DIVISOR MQLDVI DIV2, 0 CLAMQA DCA DIV1 ISZ ZCOUNT /ENOUGH DIGITS? JMP ZAGAIN /NO TAD PTSAVE /YES, PUT OUT UNITS DIGIT TAD (60) /ZERO ALWAYS PRINTS HERE JMS I DEVOUT /PUT IT OUT JMP I ZEROD /RETURN PTSAVE, 0 LEADZ, 7777 ZCOUNT, 0 DEVOUT, 0 ZPNT, LZ NLZ /TECO - VERSION J /SHEET 25 /21 APR 69 RBH SORTB, 0 /R. MERRILL'S DISPATCH SORT DCA SCHAR /SAVE SORT CHAR STA TAD I SORTB /GET POINTER TO LIST ISZ SORTB DCA Z 16 SORTA1, TAD I Z 16 /GET ITEM IN TEST LIST SPA /END MARKED BY NEG VALUE JMP SORTA2 /FELL OUT BOTTOM CIA STL TAD SCHAR SZA CLA /COMPARE SORT CHAR JMP SORTA1 /NOT IT. TAD Z 16 /GOT IT. NOW MAKE INDEX TAD I SORTB /TO JUMP TABLE DCA SORTC /THIS IS TABLE POINTER TAD I SORTC /GET JUMP ADDRESS FROM TABLE DCA SORTC /AND GO THERE CLA CLL JMP I SORTC SORTA2, CLA CLL /FELL OUT BOTTOM ISZ SORTB /SO CHARACTER NOT IN LIST TAD SCHAR /CARRY IT BACK TO JMP I SORTB /DO SOMETHING ELSE SORTC, 0 SYS, RSF /SYSTEM INTERRUPT SKIP CHAIN SKP JMP I (RANSR /HIGH-SPEED PAPER TAPE PSF SKP JMP I (PANSR /HIGH-SPEED PUNCH TSF SKP JMP I (TANSR /TELEPRINTER KSF SKP JMP I KBISR /KEYBOARD NOP /PLACE TO CLEAR NOP /ANNOYING FLAGS 6114 /LIKE ADC SCAT /UNIDENTIFED /FLOATING /INTERRUPT /YOU GOT TROUBLE PAGE /TECO - VERSION J /SHEET 26 /24 MAR 69 RBH PAGE 10 /COMMANDS ^V,P,T,V, AND W NLINES, 0 /CONVERT TAD P /- OR + N LINES AROUND . DCA M /TO CHARS M,N STA DCA NFLG /SET NUMBER FLAG PUSHJ CHRL TAD P DCA N TAD M DCA P JMP I NLINES /RETURN CHRP, TAD N /COMMAND P NCHK /HOW MANY PAGES? IAC /P MEANS 1P CIA DCA NLINES CPOA, PUSHJ CHRW /DO N PUSHJ CHRY ISZ NLINES JMP CPOA POPJ CPOC, PUSHJ CHRH PUSHJ CTLV+2 /CLEAR COMMA & NUMBER FLAGS TAD OUTLST /PUT OUT A FORM FEED JMP CWOUT /AND POP FROM W ROUTINE /TECO - VERSION J /SHEET 27 /24 MAR 69 RBH CHRT, TAD (TYPE-OUTPUT) /COMMAND T CHRW, TAD (OUTPUT) /COMMAND W DCA CWOUT NCHK /ANY ARGS? JMP CPOC /NO, DO WHOLE BUFFER CCHK JMP .+4 /+N OR -N LINES AROUND . PUSHJ LINES /CONVERT LINES TO CHARS SKP JMS NLINES CWOA, DCA NFLG /CLEAR NUMBER FLAG PUSHJ MFROMN /COMPUTE N-M CSNCL, SNA CLA /LOCATION USED AS CONSTANT POPJ /NOTHING TO PUT OUT TAD M /STARTING CHAR DCA Q CWOB, GET Q CWOUT, 0 /TYPE, OUTPUT, CTVTYP, OR QPUT ISZ Q TAD Q CMA CLL TAD N SZL CLA /DONE? JMP CWOB /NO POPJ CHRV, TAD (TYPE-CTVTYP) /COMMAND V CTLV, TAD (CTVTYP) /COMMAND ^V DCA CWOUT CCHK SKP JMP CWOA /TYPE CHARS M+1 THRU N TAD N NCHK STA /V MEANS -1V TAD P BZCHK /SEE IF B<#,?,@ SMA SZA JMP SCHS /ARE TAD (12) /1,2,3,4,5,6,7,8,9,0 AREN'T CIA SCHS, SPA CLA /EVERYTHING ELSE IS SEPARATOR SCHF, STA /LETTERS AND NUMBERS COME HERE JMP I SCHSRT /TEST AC FOR 0 OR NOT-0 PAGE /TECO - VERSION I /SHEET 29 /12 NOV 68 RBH PAGE 11 /COMMANDS A,I, AND Y CHRA, NCHK /COMMAND A SKP /APPEND TO BUFFER JMP I (CHNA /(N)A:ASCII VALUE OF CHAR AT (N) TAD P DCA CAPP /SAVE CURRENT P TAD ZZ /APPEND AT END OF BUFFER DCA P JMP CALP-3 CHRY, TAD N /COMMAND Y NCHK IAC /ASSUME 1 CIA DCA CISP COYA, PUSHJ CKALL /KILL BUFFER TAD B DCA CAPP /SAVE B AS P PUSHJ CALP-3 ISZ CISP /DONE? JMP COYA /NO POPJ TAD ZZ CIA DCA CYMZ /SAVE -CURRENT END CALP, INPUT /CALL INPUT ROUTINE SORT APPLST APPTAB-APPLST CANP, JMS I (UPOC /PUT IT AWAY JMP CALP CAPP, 0 /TEMP P CYMZ, 0 /-CURRENT END OF TEXT BUFF /TECO - VERSION J /SHEET 30 /16 JAN 69 RBH APSP, TAD YFLG /APPENDING A SPACE SNA CLA /EXPAND MODE? JMP APHT /YES, TAKE IT DCA SPCNT /ZERO SPACE COUNTER ISZ SPCNT INPUT TAD (-40) SNA /ANOTHER SPACE? JMP .-4 /YES STA /NO, COMPUTE TABS TAD SPCNT SNA /MORE THAN 1 SPACE? JMP APSP2 /NO, TAKE IN SPACE MQLDVI INHTC, 10 /TAB INCREMENT CLAMQA CMA /-(#TABS+1) DCA SPCNT TAD CAHT /TAB JMS I (UPOC ISZ SPCNT JMP .-3 APSP1, TAD ICHAR JMP CALP+1 APSP2, TAD CASP JMS I (UPOC /APPEND THE SPACE JMP APSP1 /AND CHAR FOLLOWING SPCNT, 0 /TECO - VERSION J /SHEET 31 /24 MAR 69 RBH APCR, TAD ICHAR /INPUT CHAR JMS I (UPOC TAD CALF /INSERT LF JMP CANP APRO, TAD OUTLST-1 /IDLE JMP CANP APHT, TAD ICHAR /INPUT CHAR JMP CANP APLF, TAD (-APMAX) /SEE IF BUFFER NEARLY FULL TAD ZZ SZL CLA /SORT LEAVES LINK=0 JMP CAFF /NEARLY FULL, TERMINATE INPUT /LOOK AT NEXT CHAR TAD APM12 /IS IT ANOTHER LF? SZA CLA /EXPN MODE PUTS OUT LF'S FOR FF JMP APSP1 /NO, GO PROCESS CAFF, TAD CYMZ /COMPARE PREVIOUS END TAD ZZ /WITH PRESENT SNA CLA /DIFFERENT? JMP CALP /NO, SO NOTHING CAME IN TAD CAPP /YES, RESTORE POINTER DCA P TAD RUNIT /LOOK OUT FOR TTY IAC IAC SZA CLA /TTY CODE IS -2 POPJ /NOT TTY JMP I (KBHANG /TTY. DON'T CLEAR FLAG NOW /TECO - VERSION I /SHEET 32 / 8 OCT 68 RBH CHRI, NCHK /I COMMAND JMP CIL1 TAD N /INSERT CHAR WHOSE VALUE IS N AND MASK JMS I (UPOC POPJ CIL1, QCHK /SEE IF QUOTED STRING TAD SCANP DCA CISP /SAVE SCAN POINTER QSKP /COUNT LENGTH OF INSERTION TAD CISP CMA TAD SCANP SNA /ANYTHING TO INSERT? JMP I QUOTAB /NO, RESTORE ALTM AS TERMINATOR PUSHJ /YES, OPEN A HOLE UPPN TAD CISP /RESET TO BEGINNING OF INSERTION DCA SCANP CIL2, SCAN /STICK CHARS INTO BUFFER SORT QUOTE QUOTAB-QUOTE PUT P ISZ P /POINTER WINDS UP AT END JMP CIL2 /OF INSERTION CISP, 0 QUOTAB, IREST IREST PAGE /TECO - VERSION J /SHEET 33 /24 MAR 69 RBH PAGE 12 /COMMANDS <,>,; AND PART OF COMMAND DISPATCH TABLE CHLT, TAD [-3] /COMMAND < PUSHL ITRST ITRFIN ITRCNT TAD N NCHK /CHECK FOR ARG CLA CIA /MAKE NEGATIVE DCA ITRCNT /SET UP TERMINATION TAD SCANP /SAVE CURRENT SCAN PNTR DCA ITRST /ALWAYS .GE. 1 IN ITERATION POPJ CHGT, TAD SCANP /COMMAND > DCA ITRFIN /SET UP QUICK EXIT ISZ ITRCNT /LOOK FOR COUNT EXHAUSTED JMP CGTC /NO, CONTINUE CGSG, SZA /SCAN POINTER? DCA SCANP /YES, CATCH UP TAD [-3] POPL ITRCNT ITRFIN ITRST POPJ CGTC, TAD ITRST SNA ERR /IF NOT IN ITERATION DCA SCANP /RESET TO BEGINNING OF ITERATION POPJ /TECO - VERSION I /SHEET 34 / 4 NOV 68 RBH CSEM, TAD ITRST /COMMAND ; SNA CLA ERR /IF NOT IN ITERATION TAD N NCHK JMP CSMF SPA CLA POPJ JMP .+3 CSMF, ISZ SFAIL /CHECK FOR TERMINATION POPJ /NO TAD ITRFIN /LOOK FOR QUICK EXIT SZA JMP CGSG /YES, DUCK OUT SKPSET /NO, PLOD THROUGH 76 /LOOKING FOR > CGSG /GO THERE WHEN FOUND ERR /OOPS! RAN OFF END SCAN /SKIP ^U COMMAND SKP CLA /GET RID OF Q-REG # QSKP /SKIP AN R COMMAND CSMQ, QSKP /SKIP OVER QUOTED STRING PUSHJ IREST /FIX UP QUOTE CHAR JMP I .+1 /OK, PLOD FORWARD SOME MORE CSMK /STRING SKIP ROUTINE ITRFIN, 0 /QUICK EXIT LOCATION ITRCNT, 0 /ITERATION COUNTER /TECO - VERSION I /SHEET 35 /27 OCT 68 RBH /COMMAND DISPATCH TABLE - OVERLAPS ONTO PAGE 13 CDSP, POPK; CTLA; CTLB; CTLC; CTLD; SERR; CTLF; CTLG /0-7 POPK; ECHO; ECHO; CTLK; ECHO; ECHO; SERR; SERR /10-17 SERR; SERR; SERR; SERR; CTLT; CTLU; CTLV; SERR /20-27 SERR; SERR; SERR; CALT; SERR; CTBR; CTUA; SERR /30-37 ECHO; CEXP; CDBQ; CNBS; CALT; CPCS; CAMP; CSGQ /40-47 COPR; CCPR; CAST; CPLS; CCMA; CMIN; CDOT; CVIR /50-57 NMBR; NMBR; NMBR; NMBR; NMBR; NMBR; NMBR; NMBR /60-67 NMBR; NMBR; CCLN; CSEM; CHLT; CEQL; CHGT; CQSM /70-77 CATS; CHRA; CHRB; CHRC; CHRD; CHRE; CHRF; CHRG /100-107 CHRH; CHRI; CHRJ; CHRK; CHRL; CHRM; CHRN; CHRO /110-117 CHRP; CHRQ; CHRR; CHRS; CHRT; CHRU; CHRV; CHRW /120-127 CHRX; CHRY; CHRZ; SERR; CBSL; SERR; CHUA; CHBA /130-137 /END OF DISPATCH TABLE /TECO - VERSION I /SHEET 36 /22 NOV 68 RBH /COMMAND ^U CTLU, QREF /COMMAND ^U DCA CCUQ /SAVE Q-REG POINTER QCHK /SEE IF QUOTED TAD SCANP DCA CCUS /SAVE SCAN POINTER QSKP /COUNT UP STRING TAD CCUS CMA TAD SCANP /LENGTH OF STRING SNA JMP CCUC /NO STRING DCA CCUN TAD I CCUQ /# OF CHAR ALREADY THERE CIA TAD CCUN /DIFFERENCE SNA JMP CCUA /NO DIFFERENCE PUSHJ /ADJUST TO HOLD QADJ /NEW STRING CCUA, TAD CCUN /LENGTH OF NEW STRING DCA I CCUQ QSUM DCA QR TAD CCUS /RESET SCAN POINTER DCA SCANP CCUB, SCAN SORT QUOTE QUOTAB-QUOTE PUT QR ISZ QR JMP CCUB CCUC, TAD I CCUQ /DELETE C(Q-REG) CIA PUSHJ QADJ DCA I CCUQ /SET LENGTH TO 0 JMP I (IREST /RESTORE STRING TERM & POP CCUN, 0 /LENGTH OF STRING CCUQ, 0 /POINTER TO Q-REG CCUS, 0 /TEMP SCANP /TECO - VERSION I /SHEET 37 /10 OCT 68 RBH TYPCTL, 0 /ADD ^ TO CTRL CHARS TAD CHAR SORT CACR CTLTAB-CACR TAD (-40) /SEPARATE CTRL CHARS SPA /IS IT CTRL CHAR? JMP .+4 /YES TYCTL1, TAD CASP TYPE JMP I TYPCTL TAD (100) /CONVERT TO UC LETTER DCA CCUN /SAVE IT TAD (136) /TYPE THE ^ TYPE TAD CCUN JMP TYCTL1 /NOW ADD BACK IN 40 CTLCR, CRLF JMP I TYPCTL CTLALT, TAD CAAM /44=33+11 CTLHT, TAD CAHT /11 JMP TYCTL1+1 ERRXX, 0 DCA CCUS /SAVE C(AC) CRLF CTLTYP TAD (72) /: SEPARATOR TYPE STA TAD ERRXX /GET TRAP ADDRESS JMS I (OPRNT /TYPE IN OCTAL TAD (57) //SEPARATOR TYPE TAD CCUS /GET C(AC) JMS I (OPRNT /TYPE IN OCTAL RECOUP, TAD (77) /? ERROR FLAG TYPE LISTEN /SEE WHAT HE WANTS TO DO SORT RECLST RECTAB-RECLST CLA /DEFAULT: NOTHING JMP I (T1 /RESTART COMMAND LINE /TECO - VERSION J /SHEET 38 /21 APR 69 RBH CHNA, TAD N /ASCII VALUE OF CHAR AT N BZCHK /MAKE SURE IN BUFFER DCA R GET R JMP I (NCOM /MAKE IT A NUMBER PAGE /TECO - VERSION I /SHEET 39 / 4 NOV 68 RBH PAGE 14 /COMMANDS ^A,^B,HT,LF,FF,CR,^T,SPACE,!,E, AND ^ CTLA, TAD (TYPE-OUTPUT) /COMMAND ^A CTLB, TAD (OUTPUT) /COMMAND ^B DCA CTLB2 QCHK /SEE IF QUOTED CTLB1, SCAN /GET A CHARACTER SORT QUOTE /SEE IF END QUOTAB-QUOTE CTLB2, JMP . /TYPE OR OUTPUT JMP CTLB1 /GET ANOTHER ECHO, TAD KFLG /COMMANDS CR,LF,HT,FF & SPACE SNA CLA /TURNED ON? POPJ /NO TAD TFLG /TRACE MODE ON? SZA CLA POPJ /YES, DON'T REPEAT TAD CHAR /GET THE COMMAND TYPE /NOTE: THIS ISN'T CTLTYP POPJ CHUA, POP /COMMAND ^ CLA /MAKE NEXT LETTER A CTRL CHAR PUSHJ CHUA1 /CONVERSION ROUTINE JMP I (T6A /GO BACK TO COMM EXEC CHUA1, SCAN TAD (-100) /LOWER CASE BARELY ACCEPTABLE SPA ERR /WASN'T LETTER AT ALL AND (37) /MASK IT POPJ CHRE, SCAN /COMMAND E AND (137) /MASK OUT LC BIT SORT ENBLST ENBTAB-ENBLST ERR /NO SUCH COMMAND /TECO - VERSION J /SHEET 40 /16 JAN 69 RBH OUTTAB, OUTFF /DISPATCH TABLE FOR XFIX OUTLF OUTCR OUTHT SORTA2 /ALTM--NO CHANGE CTLTAB, CTLCR /DISPATCH TABLE FOR CTLTYP CTLHT CTLALT QPUTS, 0 /Q-REGISTER STUFFER PUT QP ISZ QP JMP I QPUTS TYO, 0 /TELETYPE STUFFER JMS I (XFIX /TWIDDLE SOME CTRL CHARS TPUT /ACTUAL OUTPUT ROUTINE 0 /CHAR COUNT ON LINE -66 /LINE COUNT, 54[10] IN 9 INCHES JMP I TYO PCO, 0 /PUNCH STUFFER JMS I (XFIX /TWIDDLE THE CTRL CHARS PPUT /PUNCH OUTPUT ROUTINE 0 /CHAR COUNT -66 /LINE COUNT JMP I PCO MFROMN, TAD N /COMPUTE N-M BZCHK /SEE IF N OK CLA CLL /OK TAD M BZCHK /SEE IF M OK CIA CLL TAD N SZL /IS M>N? POPJ /NO, SO CARRY BACK DIFF CLA /YES, INTERCHANGE TAD N /AND RECOMPUTE DCA QPUTS TAD M DCA N TAD QPUTS DCA M JMP MFROMN+3 /DO IT OVER /TECO - VERSION J /SHEET 41 /16 JAN 69 RBH CEXP, QCHK /COMMAND ! QSKP /PASS OVER HERE POPJ /RESUME EXECUTION CTLT, JMS TTYIN /COMMAND ^T CTVTYP /ECHO CHAR TYPED IN TAD ICHAR /GET IT BACK JMP I (NCOM /MAKE IT A NUMBER CHKQF, 0 /CHECK FOR EXPLICIT QUOTES TAD QFLG SNA CLA JMP I CHKQF /FLAG NOT SET SCAN /GET QUOTING CHAR DCA I (QUOTE /PUT INTO SEARCH TABLE TAD I (QUOTE DCA I (QUOTE+1 /ALSO FIX OUT DOLLAR SIGN JMP I CHKQF TTYIN, 0 /TO APPEND FROM TTY READER LISTEN DCA ICHAR /DEPOSIT AS INPUT CHAR TAD ICHAR JMP I TTYIN COMTAB, TBEL /DISPATCH TABLE FOR COMMAND EDIT TCRLF ROCMND TLOWER TUPPER TCTLC TALTM TALTM TALTM TQMK PAGE /TECO - VERSION J /SHEET 42 /24 MAR 69 RBH PAGE 15 /COMMANDS ^F,^^,: AND @ CTLF, CLA OSR /COMMAND ^F JMP I IREST-1 /VALUE OF SWITCH REG. CTUA, SCAN /COMMAND ^^ JMP I IREST-1 /VALUE OF FOLL. CHAR /E COMMAND MODIFIERS: ENBLST, 111 /I: SET INPUT MODE 117 /O: SET OUTPUT MODE 124 /T: WRITE GROUP MARK 106 /F: WRITE FILE MARK 115 /M: SET ECHO MODE 113 /K: KILL ECHO MODE ESKLST, 122 /R: OPEN INPUT FILE 127 /W: OPEN OUTPUT FILE 7777 /FOR EXPANSION 7777 /FOR EXPANSION 7777 7777 CATS, STA /COMMAND @ DCA QFLG /NEXT STRING WILL BE POPJ /QUOTED /SEARCH STRING MODIFIERS: SCHLST, 16 /^N: ANYTHING BUT 21 /^Q: LITERALLY 23 /^S: ANY SEPARATOR 30 /^X: ANYTHING QUOTE, 33 /ALTM OR QUOTE CHAR 44 /$ OR QUOTE CHAR CCLN, STA /COMMAND : DCA CLNF /NEXT SEARCH WILL HAVE POPJ /NUMERIC VALUE /TECO - VERSION I /SHEET 43 / 4 DEC 68 RBH KBHANG, TAD (.+3) /USING TTY AS INPUT DEVICE DCA KBISR /CAN'T CLEAR FLAG BECAUSE JMP . /READER KEEPS GOING / /THE FOLLOWING ROUTINE IS EXECUTED WITH /INTERRUPT OFF. IT IS CALLED WHEN A FORM FEED OR OTHER /EQUIVALENT DELIMITER HAS BEEN APPENDED FROM THE /TELETYPE READER. THE CHARACTER IMMEDIATELY FOLLOWING /THE DELIMITER IS LOST, BUT IT IS USUALLY NOT /SIGNIFICANT ANYWAY. / KRS /READ TTI BUFFER TAD (-220) /UNTIL ^P SHOWS UP SZA CLA /FLAG STAYS SET SCAT /BUT OTHER DEVICES CAN GO TAD (KANSR) /BECAUSE TTY IS END OF SKIP CHAIN DCA KBISR /GOT ^P SO RESTORE ISR KCC /WHEW! ION /BREAK AWAY FROM JMP . ABOVE POPJ /DON'T RESPOND TO ^P 102 /B: BRIEF 130 /X: EXPANDED EIN, CLA IAC /TERMINATES LIST EOUT, TAD (DCA XFLG) /COMPUTE INSTRUCTION DCA EIO PUSHJ CHUA1 /CLEAR CASE AND ALPHA BITS TAD (100) /RESTORE ALPHA SORT EIN-2 /B OR X .+2-EIN+2 /ABOUT 12[8] ERR /INCOMPLETE COMMAND .+2 .+2 STA EIO, JMP . /DCA XFLG OR DCA YFLG POPJ /TECO - VERSION J /SHEET 44 /21 APR 69 RBH CHKCLN, ISZ CLNF /SEARCH MODIFIED BY :? JMP IREST /NO, JUST RESTORE ALTM & $ ISZ SFAIL /YES, CLEAR FAIL FLAG STA /AND ASSIGN VALUE PUSHJ /CALL NUMBER PROCESSOR NCOM IREST, TAD CAAM /ALT MODE DCA QUOTE TAD CDOL /$ DCA QUOTE+1 DCA QFLG /CLEAR FLAG POPJ /Q-REGISTER POINTERS: 0; 0 /Q-REG 0 0; 0 /Q-REG 1 0; 0 0; 0 0; 0 0; 0 0; 0 0; 0 0; 0 /Q-REG 8 0; 0 /Q-REG 9 QPNTR, 0 /# OF CHARS IN COMM LINE CDOL, 44 /OTHERWISE UNUSED /TECO - VERSION I /SHEET 45 / 2 DEC 68 RBH /DISPATCH TABLE FOR SKIPPING OVER COMMANDS: SKPTAB, 0 /TRAP ROUTINE CSMQ /! CSMO /> CSMI /< CSMD /" CSMC /^ CSMA /@ CSMQ /^A CSMQ /^B CSMQ-3 /^U CSMD /^^ CSME /E ESKTAB, CSMQ /I CSMQ /N CSMQ /O CSMQ-1 /R CSMQ /S CSMQ /_ CSMZ /ALTM CSMZ /$ PAGE /TECO - VERSION J /SHEET 46 /21 APR 69 RBH PAGE 16 /UTILITIES RECSTK, TAD PDLP /PRINT OUT STACK REMNANTS CIA IAC DCA COMPAR TAD (PDLBEG-1) DCA Z 17 RECST1, CRLF TAD Z 17 TAD COMPAR SNA CLA JMP RECCML+2 TAD I Z 17 JMS I (OPRNT JMP RECST1 RECCML, PUSHJ /PRINT OUT COMMAND LINE TQMF CRLF JMP I (RECOUP RECTAB, CTLC /DISPATCH TABLE FOR RECOUP RECSTK RECSTK RECSTK RECCML COMPAR, 0 /LOOK FOR DOUBLED COMM LINE CHARS TAD SCHAR /MOST RECENT CIA TAD CHAR /PREVIOUS SZA CLA RESORT /NOT THE SAME JMP I COMPAR /SAME-SPECIAL HANDLING TCTLC, JMS COMPAR /^C IN COMMAND LINE JMP I (CTLC /2ND ^C CALLS MONITOR TBEL, JMS COMPAR /^G IN COMMAND LINE JMP I (T1 /2ND ^G KILLS COMM LINE /TECO - VERSION I /SHEET 47 / 2 DEC 68 RBH CHKBZ, 0 /SEE THAT B.LE.C(AC).LE.ZZ DCA CHKCF /SAVE TAD CHKCF /PICK UP C(AC) CIA CLL TAD ZZ SNL CLA /13-BIT ARITHMETIC ERR /C(AC)>ZZ TAD B CIA CLL TAD CHKCF /PICK UP C(AC) SNL CLA /13-BIT ARITHMETIC ERR /C(AC) CGSG /POP OUT OF ITERATION TAD CSPS /RESTORE RETURN PUSH /POINTER JMP CSML /CONTINUE /TECO - VERSION I /SHEET 63 / 2 DEC 68 RBH COOB, .+2 /END OF TAG STRING FOUND .+1 GET QR /CHECK FOR END OF GOTO STRING SORT COOZ QUOTAB-COOZ /GO TO IREST IF IT IS JMP COOA /NOT END SO NO MATCH COOC, SCAN /FOUND TAG DEFINITION SORT QUOTE /WATCH OUT FOR END COOB-QUOTE /COOB IF END OF TAG CIA DCA COOT /NOT END, SAVE GET QR /COMPARE WITH GOTO STRING ISZ QR SORT COOZ /WATCH FOR END HERE, TOO COOY-COOZ /START AGAIN IF END FOUND TAD COOT /NOT END, COMPARE SZA CLA JMP COOA+1 /DIFFERENT, START OVER JMP COOC /MATCH SO FAR SETSKP, 0 /SET UP TO SKIP COMMANDS TAD I SETSKP DCA SKPLST /CHAR TO TRAP ON ISZ SETSKP TAD I SETSKP /LOCATION TO SERVICE DCA I (SKPTAB /TRAP CHAR CSML, SCAN TAD (-100) /LOOK FOR LOWER CASE SMA AND CS137 /MASK TO UPPER CASE TAD CS100 /RESTORE 100 SORT SKPLST SKPTAB-SKPLST CSMK, CLA /NON-STRING COMMAND JMP CSML /KEEP SKIPPING CSMD, SCAN /CLEAR OUT MODIFIER JMP CSMK /TECO - VERSION I /SHEET 64 / 2 DEC 68 RBH CSMC, PUSHJ /FOUND ^ CHUA1 /MAKE CTRL CHAR DCA SCHAR /RETURN TO SORT ROUTINE JMP I (SORTA1 /AS IF NOTHING HAPPENED CSME, SCAN /FOUND E COMMAND AND CS137 /MASK OUT LC BIT SORT ESKLST /LOOK FOR ER & EW ESKTAB-ESKLST /USE CSMQ TO SKIP JMP CSMK /NO STRING CSMZ, ISZ SETSKP /FOUND $ OR ALTM JMP I SETSKP /HOP BACK TO SEE IF ERROR CSPS, 0 /SAVE RETURN POINTER COOY, COOA+1 COOA+1 COOZ, 0 0 SKPLST, 0 /TRAP CHAR 41 /! 76 /> 74 /< 42 /" 136 /^ CS100, 100 /@ 1 /^A 2 /^B 25 /^U 36 /^^ 105 /E 111 /I 116 /N 117 /O 122 /R 123 /S CS137, 137 /_ 33 /ALTM 44 /$ CSMA, PUSHJ /LIST TERMINATOR CATS /FOUND @ JMP CSML /CONTINUE SKIPPING PAGE /TECO - VERSION J /SHEET 65 /21 APR 69 RBH PAGE 24 /I/O UTILITIES ENDGRP, TAD [-3] /WRITE GROUP MARK ENDFIL, TAD (ENDPNT+4) /WRITE FILE MARK DCA ENDPNT /PARAMETER POINTER TAD I ENDPNT OUTPUT /GS OR FS ISZ ENDPNT TAD WUNIT SMA CLA /DISC OR DECTAPE? JMP WDUMP /YES, DUMP BUFFER TAD (-776) /PUT OUT 510 LINES DCA DECPUT /OF BLANK TAPE TAD (200) /CLOBBER 200'S BIT OUTPUT ISZ DECPUT /ALL DONE? JMP .-3 /NO ISZ ENDPNT /YES, MOVE POINTER JMP I ENDPNT /JUMP THRU LIST ENDPNT, 0 35 /GROUP SEPARATOR 0 /FLAG FOR FILE SYSTEM POPJ 34 /FILE SEPARATOR 0+1 /FLAG FOR FILE SYSTEM DCA WEND /FLAG END-OF-FILE TAD ERR-4400 /GET ERRXX POINTER DCA OUTR /FURTHER OUTPUT IS ERROR POPJ FLAP, 0 /CLEAR TAPE FROM HS READER TAD RUNIT SMA /DISC OR TAPE? JMP RFILL /YES, REFILL BUFFER IAC SZA /HS READER? JMP I FLAP /NO, MUST BE TTY STA /YES, SET FLAP FLAG DCA DECGET INPUT /CLEAN CHARS OUT OF BUFFER JMP .-3 /UNTIL NO MORE TAPE IN RDR /TECO - VERSION J /SHEET 66 /24 MAR 69 RBH DECPUT, 0 /DECTAPE & DISC OUTPUT ISZ WCHAR /SKIP IF FIRST CHAR JMP .+4 /NOT, SO PROCEED DCA OCHAR /SAVE CHAR WHILE WAITING JMS I (OSWAIT /MAKE SURE PREV WRITTEN TAD OCHAR /NOW GO ON PUT WCHAR /STD 5/7 ASCII TAD (-DMAX+1) /SEE IF BUFFER FULL TAD WCHAR /# OF CHARS THERE SNA CLA JMS I (GW /BUFFER FULL, WRITE IT JMP I DECPUT DECGET, 0 /DECTAPE & DISC INPUT ISZ RCHAR /FIRST CHAR? SKP CLA /NO, PROCEED JMS I (OSWAIT /MAKE SURE READY GET RCHAR DCA ICHAR /INPUT CHAR REG TAD (-DMAX+1) /SEE IF LAST CHAR TAD RCHAR /# OF CHARS USED SNA CLA JMS I (GR /BUFFER EMPTY, REFILL TAD ICHAR /PICK UP INPUT CHAR JMP I DECGET T1 /BREAK: QUIT WHOLE LINE CTLC /^C: GO TO MONITOR CAFF+4 /FF: TERMINATE APFS /FS: END THE FILE RDHANG, 0 /^P: RETURN & START READER ISZ DECGET /FLAPPING TAPE? SKP CLA /NO JMP I FLAP /YES, FINISHED TAD (136) /^ TO ASK FOR RESPONSE RDHG10, TYPE /HIT HIM LISTEN /WAIT FOR RESPONSE SORT RDHLST RDHANG-3-RDHLST CLA /WANT BREAK,^C,^L,^[, OR ^P TAD (77) /? JMP RDHG10 /LET HIM KNOW IT'S ALIVE /TECO - VERSION J /SHEET 67 /21 APR 69 RBH WDUMP, TAD I ENDPNT /DUMP DISC/TAPE BUFFER DCA I (WLAST JMS I (GW /WRITE OUT BUFFER JMP ENDPNT-2 /GO OUT THRU TABLE APPTAB, CALP /BLANK--IGNORE APRO /RUBOUT--MAKE IDLE APGS /GROUP SEP--FLAP AND PROCEED APFS /FILE SEP--END OF INPUT APSP /SPACE--MIGHT CONVERT TO TAB CALP /IDLE--IGNORE CAFF /FORM FEED--END OF PAGE APLF /LINE FEED--SEE IF TOO FULL APCR /CARR RET--INSERT CR+LF APHT /TAB--NO CHANGE APHT /ALTM--NO CHANGE RFILL, CLA /REFILL INPUT BUFFER JMS I (GR /FROM DISC OR DECTAPE JMP I FLAP PAGE /TECO - VERSION I /SHEET 68 / 2 DEC 68 RBH PAGE 25 /FILE HANDLING UTILITIES IOSTRT, 0 /INITIAL I/O SELECTION TAD ERR-4400 /MUST SET UP I/O DCA OUTR TAD ERR-4400 /WITHIN PROGRAM DCA INR /POINT TO READER ROUTINE RRB /CLEAR DEVICE FLAGS PCF TCF KCC DCA I (TBUSY /CLEAR TTY OUT FLAG TAD Z SCATP /SAVE SCAT POINTER DCA ISCAT /FOR STARTING I/O ION JMP I IOSTRT /INPUT ROUTINE POINTERS: TTYIN /TELETYPE RGET /HS READER INPTAB, DECGET /DISC & DECTAPE /OUTPUT ROUTINE POINTERS: TYO /TELETYPE PCO /HS PUNCH OUPTAB, DECPUT /DISC & DECTAPE WOPEN, TAD (10) /OPEN OUTPUT FILE ROPEN, TAD (7400) /OPEN INPUT FILE DCA POINTR /SET SKP OR NOP QCHK /LOOK FOR QUOTES SCAN TAD (-100) /TEST FOR LETTERS SPA JMP DTATST /NOT, SHOULD BE DECTAPE AND (37) /MASK OFF CASE BIT TAD (100) /RESTORE TO LETTER SORT DEVLST /TEST TABLE OF DEVICES DEVTAB-DEVLST ERR /NOT IN TABLE /TECO - VERSION I /SHEET 69 / 4 DEC 68 RBH DTATST, TAD (100-70) SMA SZA /LOOK FOR DIGIT 1-8 JMP DTATST-1 /CALL ERROR TAD (70-60) SPA SNA JMP DTATST-1 /MORE ERROR DSC, DCA UNIT /POINT OF CONVERGENCE QSKP /SKIP REST OF STRING POINTR, JMP . /SWITCH FOR READ OR WRITE JMP READIN TAD UNIT DCA WUNIT /SET UNIT FLAG TAD UNIT SMA /DISC OR DECTAPE? CLA /YES TAD (OUPTAB) DCA POINTR /COMPUTE POINTER TAD I POINTR DCA OUTR /OUTPUT ROUTINE POINTER STA DCA WEND /NOT END OF FILE TAD (OUPSET-OUPTAB) OPNA1, TAD POINTR DCA POINTR /DO UNIQUE FIXES TAD I POINTR /AN EXTRA LEVEL OF DCA POINTR /INDIRECT ADDRESSING JMS I POINTR POPJ /EXIT READIN, TAD UNIT DCA RUNIT /SET UNIT FLAG TAD UNIT SMA /DISC OR DECTAPE CLA /YES TAD (INPTAB) DCA POINTR /COMPUTE POINTER TAD I POINTR DCA INR /INPUT ROUTINE POINTER STA DCA REND /NOT END OF FILE TAD (INPSET-INPTAB) JMP OPNA1 /CONVERGE /TECO - VERSION J /SHEET 70 /21 APR 69 RBH RSETUP, 0 /SETUP FOR DISC & TAPE TAD UNIT DCA IMPORT+6 TAD IMPORT+4 /INITIAL BLOCK DCA IMPORT+7 /IS NEXT BLOCK JMS I (GR /FILL INPUT BUFFER JMP I RSETUP IMPORT, 0 /INPUT FILE, SCRATCH TAPE 0 0 0 1 /INITIAL BLOCK 0 0 0 0 UNIT, 0 /I/O SETUP POINTERS: DUMMY /FOR TELETYPE RCLEAR /HS READER INPSET, RSETUP /DISC & DECTAPE DUMMY /TELETYPE WCLEAR /HS PUNCH OUPSET, WSETUP /DISC & DECTAPE PAGE /TECO - VERSION I /SHEET 71 / 3 NOV 68 RBH PAGE 26 /COMMANDS " AND ' CNDLST, 103 /C 143 /C 76 />, OLD G 53 /+, NO EQV: 0 OR + 43 /#, OLD N 55 /-, NO EQV: 0 OR - 74 /<, OLD L 75 /=, OLD E CDBQ, NCHK /COMMAND " ERR /NO NUMBER TO TEST SCAN SORT CNDLST CNDTAB-CNDLST ERR /NO SUCH TEST CNDI, SCAN /HIT ANOTHER " STA /SO SKIP MATCHING ' TAD CNDN DCA CNDN RESORT /GO BACK TO CSML CNDO, ISZ CNDN /FOUND A ' RESORT /NEED ANOTHER: BACK TO CSML TAD (CSMD) /FIX UP SKIP TABLE DCA I (SKPTAB+4 /USED ELSEWHERE CSGQ, POPJ /COMMAND ' NO ACTION TO TAKE CNDN, 0 /COUNTER FOR " NESTING TCRLF, TAD CACR /CR IN COMM LINE DCA CHAR CTLTYP /TYPE IT OUT JMS I (SPUT /PUT INTO COMM LINE TAD CALF /THEN PUT IN A LF DCA CHAR JMS I (SPUT JMP I (T2 /AND GET SOME MORE /TECO - VERSION I /SHEET 72 / 3 NOV 68 RBH CNDTAB, CNDC /LEGAL CONSTITUENT OF CNDC /SYMBOL FOR ASSEMBLER .+6 /POSITIVE, NON-ZERO .+6 /POSITIVE OR ZERO .+6 /NON-ZERO .+6 /NEGATIVE OR ZERO .+6 /NEGATIVE .+6 /ZERO TAD (40) /SMA SZA-SMA TAD (40) /SMA-SZA TAD CNM110 /SZA-SPA SNA TAD (40) /SPA SNA-SPA TAD (40) /SPA-SNA TAD (SNA CLA) DCA .+2 /COMPUTED INSTRUCTION TAD N /PERFORM TEST JMP . /INVERSE OF TEST SENSE POPJ /CONDITION SATISFIED CNDF, STA /NOT SATISFIED DCA CNDN /BEGINNING SKIPPING COMMANDS TAD (CNDI) /TRAP OUT NESTED " DCA I (SKPTAB+4 SKPSET /CALL SKIPPING ROUTINE 47 /FIND A ' CNDO /PROCESS IT THERE ERR /NO MATCHING ' CNDC, TAD N /TEST FOR SYMBOL JMS I (SCHSRT /FIND LETTERS & NUMBERS SZA CLA /AC=0 IF NOT CNDP, POPJ /N IS A SYMBOL TAD N SORT /LOOK FOR $,%, AND . SYMLST SYMTAB-SYMLST JMP CNDF /N IS NOT A SYMBOL SYMLST, 44 /$ 45 /% 56 /. CNM110, -110 /SZA-SPA SNA, END OF LIST /TECO - VERSION I /SHEET 73 /30 OCT 68 RBH COMLST, 7 /^G, COMMAND LINE EDIT LIST 15 /CR, INSERT CR & LF 177 /RUBOUT 14 /^L, SET LOWER CASE 25 /^U, SET UPPER CASE RECLST, 3 /^C, ERROR RECOVERY AID LIST 33 /^[, ALT MODE 175 /ANOTHER ALT MODE 176 /YET ANOTHER ALT MODE 77 /? CBSN0, TAD (55-72) /SEE IF DIGIT SMA JMP CBSN2 /NO, STOP HERE TAD (72-60) SPA JMP CBSN2 /NOT DIGIT EITHER PUSHJ NMBR+2 /CALL DIGIT PROCESSOR ISZ P /POINT TO NEXT CHAR TAD (NOP-SZA) /DON'T TAKE A - CBSN, TAD (SZA) /TAKE INITIAL - DCA CBSN1 GET P /TEST 1 CHAR TAD (-55) /IS IT -? CBSN1, JMP . /SZA OR NOP JMP CBSN0 /SEE IF DIGIT PUSHJ CMIN /CALL - PROCESSOR JMP CBSN-2 /TEST NEXT CHAR CBSN2, CLA POPJ /FINISHED JMP I QOVER /TRICKY CODING HERE .-1 /TARGET OF A SORT LIST QOVER, 0 /ENTRY POINT AND TARGET OF SORT SCAN SORT QUOTE /SKIPPING OVER A STRING COMMAND QOVER-1-QUOTE CLA /NOT END JMP QOVER+1 /SKIP ANOTHER CHAR PAGE /TECO - VERSION J /SHEET 74 /16 JAN 69 RBH PAGE 27 /HIGH-SPEED PAPER TAPE ROUTINES PPUT, 0 /PUNCH 1 CHARACTER DCA OCHAR /SAVE IT TAD WCHAR TAD PFULL SMA CLA JMP .-3 /BUFFER FULL: MP WAIT LOOP IOF /DO DELICATE THINGS TAD OCHAR CDF 10 DCA I 14 CDF 00 TAD 14 TAD PMAX SPA CLA JMP .+3 TAD PMIN DCA 14 ISZ WCHAR JMP PRETN /PUNCH ALREADY GOING TAD PSCAT /START UP PUNCH DCA SCATP /SCAT COMMAND LINK JMP PNEXT /GO FAKE INTERRUPT TAD ISCAT /COME HERE ON FAKE SCAT DCA SCATP /RESTORE REAL THING PRETN, ION /FINISHED WITH DELICATE WORK JMP I PPUT /RETURN TO GET ANOTHER CHAR PSCAT, PRETN-2 /ADDRESS FOR FAKE SCAT PFULL, -OUT+1 PMAX, -TXT+1 PMIN, OUT-1 /TECO - VERSION I /SHEET 75 / 8 OCT 68 RBH PANSR, PCF /PUNCH INT SERVICE ROUTINE STA CLL TAD WCHAR DCA WCHAR SNL SCAT /BUFFER EMPTY PNEXT, CDF 10 TAD I 15 CDF 00 TAD (200) /ADD EIGHTH BIT PLS CLA TAD 15 TAD PMAX SPA CLA SCAT /POINTER OK TAD PMIN /RESET TO BEGINNING DCA 15 SCAT RANSR, RRB /READER INT SERVICE ROUTINE CLA ISZ RCHAR SKP SCAT /BUFFER FULL RNEXT, RRB RFC /READ 1 CHAR, GET ANOTHER AND MASK CDF 10 DCA I 12 CDF 00 TAD 12 TAD PFULL SPA CLA SCAT /POINTER OK STA /RESET TO 0 DCA 12 SCAT /TECO - VERSION I /SHEET 76 /15 OCT 68 RBH RGET, 0 DCA RTIME /RESET TIMER TAD RCHAR /0 FULL, -577 EMPTY TAD PMIN /+577 SPA SNA CLA /PROCEED IF ANYTHING IN BUFFER JMP RWAIT /NOTHING IN BUFFER IOF CDF 10 TAD I 13 CDF 00 DCA ICHAR TAD 13 TAD PFULL SPA CLA JMP .+3 STA DCA 13 STA CLL TAD RCHAR DCA RCHAR SZL /WAS BUFFER FULL? JMP RRETN /NO, SO READER ALREADY RUNNING TAD RSCAT /FAKE AN INTERRUPT DCA SCATP /TO START READER JMP RNEXT TAD ISCAT /COME HERE ON FAKE SCAT DCA SCATP /RESTORE REAL THING RRETN, TAD ICHAR /PICK UP CHARACTER ION /UNPLUG OUR EARS JMP I RGET RSCAT, RRETN-2 RWAIT, TAD RTIME /19.5 MICROSEC PER ROUND CLL IAC /OR 80 MILLISEC TO HANG SNL /MINIMUM READER SPEED MUST JMP RGET+1 /EXCEED 12.5 CHARS PER SECOND JMS I (RDHANG /READER WAS OUT OF TAPE AT LAST RFC RFC CLA JMP I RGET /RETURN WITH NOTHING RTIME, 0 PAGE /TECO - VERSION J /SHEET 77 /21 APR 69 RBH PAGE 30 /MORE FILE HANDLING WSETUP, 0 /SETUP DISC & DECTAPE TAD I (UNIT DCA EXPORT+6 DCA EXPORT+4 /INITIAL BLOCK SET BY FILE SYSTEM DCA EXPORT+5 /BLOCK COUNT DCA EXPORT+7 /NEXT BLOCK POINTER DCA EXPORT+11 /FREE BLOCK LIST POINTER DCA I (WLAST /CLEAR END-OF-FILE FLAG FLAG STA DCA WCHAR /RESET CHAR POINTER JMP I WSETUP EXPORT, 0 /OUTPUT FILE 0 0 4000 /WRITE MODE FLAG 0 0 0 0 6400 /FREE BLOCK LIST 0 DEVLST, 104 /DEVICE ASSIGNMENTS 113 /K: TTYIN 120 /P: HSP OUT 122 /R: HSRIN 124 /T: TTYOUT IAC /END OF LIST CMA /HSR & HSP COME HERE JMP I DEVTAB /REJOIN OTHER ROUTINE DEVTAB, DSC /0 FOR DISC DEVTAB-3 /-2 FOR TTY DEVTAB-2 /-1 FOR HSP DEVTAB-2 /-1 FOR HSR DEVTAB-3 /-2 FOR TTY DUMMY, 0 /FAKE INITIALIZATION JMP I DUMMY /FOR TTY /TAILINGS: TWRITE= 6600 TREAD= 7000 TJOIN= 7100 PAGE $