File: TECOVF.MA of Disk: V50/Source/Source-Listing-MAC-2
(Source file text)
/3 F-OVERLAY TO TECO V50 / 08-APR-79 FIXED READ WITH NO WAIT BUG WITH ECHO OFF / ADDED ELSE PROCESSING .ENABLE 7BIT .MACRO .ERROR ERNUM .GLOBAL ERR'ERNUM ERR'ERNUM: ERR .ENDM .MACRO .SORT ARG1,ARG2 SORT; ARG1; ARG2-ARG1 .ENDM MTHREE=CLL STA RTL .EXTERNAL IOVRLC,QOVRLC,EOVRLC,XOVRLC .EXTERNAL EDFLAG,ETFLAG .EXTERNAL NCHK,POPJ,NNEW13,NMRBAS,POPJ,ERR,CRLF .ZTERNAL N,Z40,NP,Z4,RADIX,NLINK,DVT1,LASTC .ZTERNAL CLNF,ZZ,P,Z12,Z377,M,CFLG,SCHAR .EXTERNAL EU1,EU2,KTYPE,PUTT,TYPE,ET1,ET8,SCHU,YSKP,EH4,TQMK,T0 .EXTERNAL MQLDVI,NCHK,POKE,SCAN,TPUT,UPOC .EXTERNAL NMBR2,PUSHJ,CMIN,VBAR .GLOBAL FOVRLY .GLOBAL CTL.D,CTL.O,CBSL,CEQL .GLOBAL DRAD .GLOBAL CHR.ED,CHR.EH,CHR.EO,CHR.ES,CHR.ET,CHR.EU .ASECT TECOVF *7200 RELOC 3200 IOVRLC QOVRLC EOVRLC XOVRLC FOVRLY, 0 .SBTTL Cmd EU .SBTTL Cmd ET .SBTTL Cmd ES .SBTTL Cmd EO .SBTTL Cmd EH .SBTTL Cmd ED CHR.EU, IAC CHR.ET, IAC CHR.ES, IAC CHR.EO, IAC CHR.EH, IAC CHR.ED, TAD (EDFLAG /*K* FLAGS MUST BE CONSECUTIVE FOR MORE REASONS THAN 1 DCA XXFLAG TAD N MQL /*WM SORRY NCHK /ANY ARGUMENT? JMP 9$ /NO, RETURN VALUE ISZ CFLG /WERE 2 ARGUMENTS SPECIFIED? JMP 8$ /NO TAD M /YES CMA AND I XXFLAG /TURN OFF BITS SPECIFIED BY M 8$: MQA /OR IN N VALUE DCA I XXFLAG /SET NEW VALUE DCA CFLG TAD XXFLAG TAD XX$ DCA PTR$ TAD I PTR$ DCA PTR$ L$: TAD I PTR$ SNA JMP E$ /DONE, RETURN TO SET MULTI8 ECHO DCA MASK$ /SAVE MASK ISZ PTR$ TAD I PTR$ DCA 1$ /SAVE SKIP CONDITION ISZ PTR$ TAD I PTR$ DCA LOC$ /SAVE LOC TO CHANGE ISZ PTR$ TAD I XXFLAG /LOOK AT FLAG AND MASK$ /'AND' WITH MASK 1$: HLT /SKIP INSTRUCTION JMP 3$ TAD I PTR$ DCA I LOC$ ISZ PTR$ 2$: ISZ PTR$ JMP L$ 3$: ISZ PTR$ TAD I PTR$ DCA I LOC$ JMP 2$ 9$: TAD I XXFLAG /GET VALUE JMP I (NNEW13 /MAKE NEW 13-BIT VALUE E$: TAD I (ETFLAG AND MSK10 /WAS NO ECHO SET ? CLL RTR /IF ET CHANGED, ALWAYS AFFECT MULTI8 SNA CLA STL IAC RAL /NO, GIOT 3: ENABLE ECHO 6770 /YES, GIOT 2: DISABLE ECHO POPJ XX$: -EDFLAG+XXSUBS PTR$: 0 LOC$: 0 MASK$: 0 XXFLAG, 0 /POINTS TO FLAG IN MEMORY ABOVE 4000 .NOLIST BE / MASK; SKIP; LOC; VALUE IF SKIPS; VALUE IF NO SKIP EUSUB, 7777; SMA CLA; EU1; CLA; SNA CLA 7777; SPA SNA CLA; EU2; TAD Z40; NOP 0 ETSUB, 1; SNA CLA; KTYPE; PUTT; TYPE 1; SNA CLA; ET1; PUTT; TYPE MSK10, 10; SNA CLA; ET8; DCA SCHAR; TYPE 0 EDSUB, 1; SNA CLA; SCHU; -1; "^ 2; SNA CLA; YSKP; SKP CLA; SZA CLA 0 EHSUB, 4; SNA CLA; EH4; TQMK; T0 CXSUB, EVSUB, ESSUB, EOSUB, 0 .LIST BE /RADIX TABLES: /MUST BE IN SAME OVERLAY AS = AND ^O AND ^D ORAD, NOP 1000 100 10 DRAD, NP&177+1200 /TAD NP 1000. 100. 10. XXSUBS, EDSUB EHSUB EOSUB ESSUB ETSUB EUSUB / EVSUB / CXSUB /MUST ALL BE TOGETHER IN SAME OVERLAY PAGE /NUMERICAL OUTPUT ROUTINE ZEROD, 0 DCA ZER$ /INITIALIZE "LEADING ZEROS" FLAG TAD I ZEROD ISZ ZEROD DCA DEV$ /SAVE OUTPUT ROUTINE ADDRESS TAD NLINK /POS OR NEGATIVE? SNA CLA JMP 2$ /POSITIVE TAD (ORAD CIA TAD RADIX SNA CLA JMP 1$ /OCTAL TAD N /DECIMAL CIA DCA N /NEGATE SKP 1$: TAD Z4 /CONVERT - TO 1 TAD ("- JMS I DEV$ /OUTPUT MINUS SIGN 2$: MTHREE DCA CNT$ /ITERATION COUNT TAD RADIX DCA R$ 3$: ISZ R$ TAD I R$ DCA 4$ /GET DIVISOR TAD N MQLDVI /DIVIDE BY A POWER OF THE BASE 4$: 0 TAD ZER$ SNA JMP 5$ /IGNORE LEADING ZEROS TAD ("0 JMS I DEV$ STL RAR DCA ZER$ /SET LEADING ZEROS FLAG 5$: TAD DVT1 /GET REMAINDER DCA N ISZ CNT$ /GO AROUND AGAIN? JMP 3$ /WHY NOT? TAD N TAD ("0 JMS I DEV$ /OUTPUT LAST DIGIT NO MATTER WHAT JMP I ZEROD DEV$: 0 /WHERE WE'RE SENDING THE DIGITS ZER$: 0 CNT$: 0 R$: 0 .SBTTL Cmd = CEQL, NCHK /COMMAND = .ERROR 21 /NO NUMBER TAD RADIX DCA TMP$ JMS I (POKE /LOOK AHEAD ONE CHARACTER TAD (-"= /CHECK FOR = SIGN SZA CLA JMP 1$ /SINGLE = SCAN /DOUBLE = (PASS UP SECOND ONE) SKP CLA /CLEAR AC 1$: TAD Z4 TAD (ORAD DCA RADIX /SET OCTAL RADIX TEMPORARILY JMS ZEROD TPUT TAD TMP$ DCA RADIX /RESTORE ORIGINAL RADIX ISZ CLNF /: SEEN? CRLF /NO, END WITH CRLF DCA CLNF POPJ TMP$: 0 .SBTTL Cmd \ .SBTTL Cmd | CBSL, TAD LASTC /GET CHARACTER BEFORE IT WAS TRANSLATED TO UPPER CASE AND Z40 /SEE IF IT WAS \ OR | (VERICAL BAR) SZA CLA JMP I (VBAR /COMMAND | (VERTICAL BAR) NCHK /COMMAND \ (BACKSLASH) JMP CBSN JMS ZEROD UPOC POPJ CBSN, PUSHJ NMBR2 /INITIALIZE RESULT TO 0 JMS PTCH TAD (-"- /CHECK FOR MINUS SIGN SZA JMP .+3 /NOT MINUS PUSHJ CMIN /RECORD MINUS SIGN CIA CLL RTR SNA CLA /CHECK FOR PLUS SIGN L$: ISZ P /BUMP POINTER PAST SIGN JMS PTCH TAD (-72 CLL TAD Z12 SNL /IS IT A DIGIT? POPJ /NO PUSHJ NMBR2 /YES - ACCUMULATE IT JMP L$ /AND LOOP PTCH, 0 TAD P /V3C STL CIA /CHECK FOR END OF BUFFER TAD ZZ SZL SNA CLA POPJ CDF 10 TAD I P /GET A CHAR AND Z377 CDF 0 JMP I PTCH .SBTTL Cmd ^D .SBTTL Cmd ^O CTL.D, TAD Z4 /SET RADIX DECIMAL CTL.O, TAD (ORAD /SET RADIX OCTAL DCA RADIX TAD I RADIX DCA I (NMRBAS /EITHER "NOP"(8) OR "TAD NP"(10) POPJ PAGE RELOC