/3 I/O OVERLAY FOR TECO / 10-APR-79 TEST FOR : WASN'T RE-ENTRANT .EXTERNAL QOVRLC,EOVRLC,XOVRLC,FOVRLC .EXTERNAL QCHK,QUOTST,SORT,TSTSEP,ERR,UPPERC .ZTERNAL NAME,ZM10,Z6,SCHAR,Z77,Z200,NMT,NFLG .EXTERNAL GETUSR,PUSHJ,ECDISM .ZTERNAL ERROR,OUTR,R,EBFLG,OUTHND,ODEV .EXTERNAL OCNT,OMAXLN,OUNAM,DECPUT,OSETP,STECO1,STECO2,IBLK .ZTERNAL INHND,ICRCNT,REND,INRCNT,QPTR,ZIREST,CLNF .EXTERNAL POPJ,NNEW13 .GLOBAL IOVRLY .GLOBAL CHR.EB,CHR.ER,CHR.EW .GLOBAL OUHNDL TWOO=CLA STL RTL MTWO=STA CLL RAL OSDCBT=7760 /OS/8 DEVICE CONTROL TABLE - IN FIELD 1 .ENABLE 7BIT .MACRO .ERROR ERNUM .GLOBAL ERR'ERNUM ERR'ERNUM: ERR .ENDM .MACRO .SORT ARG1,ARG2 SORT; ARG1; ARG2-ARG1 .ENDM .ASECT TECOVI *3200 IOVRLY, 0 QOVRLC EOVRLC XOVRLC FOVRLC /SUBROUTINE TO DO LOOKUPS AND ENTERS (LINK CRITICAL ON ENTRY) OPEN, 0 /CALLED WITH MONITOR CODE - 2 IN AC DCA RSTSW /ENTER OR LOOKUP SZL CLA /IF THIS IS THE OUTPUT SIDE OF AN "EB" COMMAND, JMP DEVLOD /SKIP THE STATEMENT SCAN QCHK TAD DSKNAM /PACKED SIXBIT FOR 'DSK:' DCA DEVC TAD (": /RESTORE : NGOM1, DCA DEVCOL DCA NAME /CLEAR NAME DCA NAME+1 DCA NAME+2 MTWO DCA PERDSW NAMCM1, DCA NAMCNT NAMEC, QUOTST /GET CHAR AND TEST FOR ALTM JMP DEVQOT /ALTM - END OF NAME .SORT DEVLST,DEVTAB /CHECK SPECIAL CHARS ([,:. AND SPACE TSTSEP /NO, SEE IF ALPHANUMERIC .ERROR 08 /ILLEGAL CHAR TAD NAMCNT TAD ZM10 SMA CLA /MORE THAN 6 CHARS? JMP NAMEC /YES, IGNORE TAD NAMCNT /NO, PACK IT TAD Z6 /*K* (ALSO *K*) NEW FOR SYMBIONT KLUDGE CLL RAR DCA TEMP1 /*K* NOTE ASSUMPTION NAME STARTS AT LOC 3! TAD SCHAR UPPERC /** "UPPERC" ALWAYS COMPLEMENTS LINK AND Z77 SNL JMP 2$ CLL RTL RTL RTL 2$: TAD I TEMP1 DCA I TEMP1 ISZ NAMCNT JMP NAMEC PERD, ISZ PERDSW /FOUND A PERIOD TAD NAME SNA CLA /ERROR IF WE HAVE JMP ERR08 /DOUBLE PERIODS OR NO FILE NAME DCA DEVCOL /DEVICE NO LONGER LEGAL DCA NAME+3 /ZERO EXTENSION OUT TAD Z6 /AND SET POINTER TO 6TH CHARACTER JMP NAMCM1 COLON, TAD NAME+1 SNA /WE MUST PACK THE NAME INTO ONE WORD OURSELVES JMP 2$ /BECAUSE IF "OPEN" IS CALLED FROM THE OUTPUT TAD NAME /SIDE OF AN "EB" COMMAND, WE SKIP SMA CLA /THE NAME COLLECTOR.(WITH GOOD REASON - CLL CML RAR /THE USR OVERLAYS THE COMMAND LINE). TAD NAME+1 /SINCE THE OS/8 "ASSIGN" CALL TO THE USR 2$: TAD NAME /REPLACES THE 2ND NAME WORD WITH THE DEVICE DCA DEVC /NUMBER, ALL NAME INFO MUST BE HELD IN WORD 1. JMP NGOM1 /DEVICE NAME STORED - RESET FOR FILE NAME DEVLST, ". DEVCOL, ": /CHANGED TO 0 AFTER FIRST : FOUND "/ DSKNAM, 5723 /=0423+1300+4000 - SERVES AS LIST TERMINATOR DEVQOT, ISZ PERDSW /IF WE NEVER SAW A PERIOD, DCA NAME+3 /WIPE OUT THE EXTENSION JMS I (GETUSR /BRING USR INTO CORE DEVLOD, TAD I OPEN /MOVE HANDLER ADDRESS DCA DEVHND ISZ OPEN /AND BUMP POINTER TWOO TAD RSTSW DCA CODE /ENTER OR LOOKUP CIF 10 /AND RESET TABLES JMS I Z200 13 RSTSW, 0 /DON'T ZAP OPEN FILES ON INPUT /0 IS LOOKUP, 2 IS ENTER DCA DEVNO /ZERO SECOND NAME WORD CIF 10 JMS I Z200 1 /ASSIGN HANDLER DEVC, 0 DEVNO, 0 DEVHND, 0 JMP OPNERR /ERROR - KICK USR OUT FIRST TAD (3 /*K* SAVED MANY LOCATIONS WHEN NAME HAD TO BE AT 0! DCA STBLK TAD RSTSW /GET LOOKUP-ENTER SWITCH TAD NAME /IF NAME IS NULL AND THIS IS A LOOKUP, SNA CLA JMP OPSUCC /IT JUST SUCCEEDED TAD DEVNO /DEVICE # CIF 10 JMS I Z200 CODE, 0 /ENTER OR LOOKUP STBLK, 0 /FILLED WITH STARTING BLOCK TEMP1, FLN, 0 /FILLED WITH -LENGTH /**** CHECK IF AC MUST = 0 JMP OPNERR /ERROR OPSUCC, TAD DEVHND /HANDLER ADDRESS IN AC JMP I OPEN PERDSW, 7777 /FLIP FLOP FOR EXTENSION NAMCNT, 0 /CHARACTER COUNT OPNERR, TAD RSTSW /WE SHOULD ONLY KILL THE OUTPUT FILE SNA CLA JMP LUKERR /IF THIS IS AN OUTPUT ERROR EBERR, TAD ERROR DCA OUTR DISERR, PUSHJ PECDSM, ECDISM /DISMISS THE USR .ERROR 16 LUKERR, DCA NMT PUSHJ ERVAL TAD NFLG /SEE IF NUMBER WAS CREATED SMA CLA JMP DISERR /NO, GIVE ERROR MESSAGE JMP I PECDSM /YES, RETURN VALUE DEVTAB, PERD /. COLON /: SWITCH // PAGE .SBTTL Cmd EB CHR.EB, CLA CMA CLL /"EDIT BACKUP" COMMAND WITH LINK CLEAR PUSHJ /USE 'ROPEN' TO SET POINTERS CHR.ER /WITHOUT KICKING OUT THE USR (AC=-1 ON ENTRY) TAD I (DEVNO /DEVICE # TAD (OSDCBT-1 DCA R CDF 10 TAD I R /GET DEVICE CODE FROM DCB TABLE CDF SMA CLA /NEGATIVE IF FILE-STRUCTURED JMP I (EBERR /YOU CAN'T DO THAT! TAD NAME+3 /EXTENSION TAD (-'BK KSNA, SNA JMP I (EBERR /CAN'T EB A .BK FILE TAD DOTBK /RESTORE EXTENSION DCA R /SAVE IT TAD DOTBK /.BK EXTENSION DCA NAME+3 CIF 10 TAD I (DEVNO /DEVICE # JMS I Z200 /DELETE THE OLD BACKUP 4 NAME 0 DOTBK, 'BK /WHO CARES IF IT'S NOT THERE? TAD R /OLD EXTENSION DCA NAME+3 CLA STL IAC /SET EDIT BACKUP FLAG AND DO AN "ENTER" SKP /LINK MUST BE SET HERE FOR OPEN .SBTTL Cmd EW CHR.EW, CLL DCA EBFLG /LINK NORMALLY 0 WHEN GOTTEN HERE / RAL / DCA T$ / TAD OUTR / CIA / TAD ERROR / SZA CLA / .ERROR 38 /?OFO / TAD T$ / RAR CLA IAC /OPEN OUTPUT FILE JMS I (OPEN /ENTER CODE IN AC OUHNDL, 4001 /HANDLER ADDRESS DCA OUTHND /HANDLER ENTRY TAD I (DEVNO DCA ODEV /SAVE DEV # DCA I (OCNT /CLEAR BLOCK COUNT TAD I (FLN DCA I (OMAXLN /MAXIMUM FILE LENGTH TAD NAME DCA I (OUNAM TAD NAME+1 DCA I (OUNAM+1 TAD NAME+2 DCA I (OUNAM+2 TAD NAME+3 DCA I (OUNAM+3 TAD (DECPUT DCA OUTR /ENABLE CHARACTER OUTPUT ROUTINE TAD (ECDISM DCA I (DECPUT /FAKE RETURN FROM CHAR I/O ROUTINE TAD I (STBLK JMP I (OSETP .SBTTL Cmd ER CHR.ER, DCA QPTR /ENTERED WITH AC=-1 IF MONITOR IS TO BE KEPT TAD (SNL DCA I (STECO1 TAD KSNA DCA I (STECO2 CLL STA DCA NMT JMS I (OPEN /LOOKUP CODE IN AC INHNDL, 7201 /HANDLER ADDRESS DCA INHND /SAVE HANDLER ENTRY STA DCA ICRCNT /POINTER STA DCA REND /CLEAR END-OF-FILE FLAG TAD I (STBLK DCA I (IBLK /FIRST BLOCK TAD I (FLN DCA INRCNT /SET UP INPUT FILE LENGTH PUSHJ ERVAL ISZ QPTR /SHOULD WE DISMISS THE MONITOR? JMP I (ECDISM /YES - KICK THE USR OUT AND POPJ JMP I ZIREST /EXIT ERVAL, ISZ CLNF /WAS THERE A : ON ER OR EB? LSKIP, SKP /NO JMP MAKNUM /YES DCA CLNF /RESET COLON FLAG POPJ MAKNUM, TAD NMT JMP I (NNEW13 SWITCH, QUOTST SKPCLA, SKP!CLA /FILENAME ENDS WITH SLASH UPPERC TAD (-"S SZA CLA .ERROR 28 /UNDEFINED I/O SWITCH TAD SKPCLA DCA I (STECO1 TAD LSKIP DCA I (STECO2 JMP I (NAMEC PAGE