/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 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 RANSR /HIGH-SPEED PAPER TAPE PSF SKP JMP PANSR /HIGH-SPEED PUNCH TSF SKP JMP 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 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 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 UPOC ISZ SPCNT JMP .-3 APSP1, TAD ICHAR JMP CALP+1 APSP2, TAD CASP JMS 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 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 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 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 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 OPRNT /TYPE IN OCTAL TAD (57) //SEPARATOR TYPE TAD CCUS /GET C(AC) JMS 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 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 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 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