*DECK,INSTALL INSTALLATION INFORMATION FOR SENATOR 2.7. INTRODUCTION. SENATOR 2.7 IS DESIGNED TO RUN ON THE FOLLOWING OPERATING SYSTEMS - NOS 2.0 (PSR 562 AND BEYOND) NOS/BE 1.5 (PSR 577 AND BEYOND) TAPE FORMAT. SENATOR IS NORMALLY SUPPLIED ON A TAPE WITH THE FOLLOWING OPTIONS - NINE TRACK 1600 BPI F=SI (SCOPE FORMAT) VSN=SENREL L=SENATOR-RELEASE THE TAPE CONTAINS A NUMBER OF FILES - FILE CONTENTS ---- -------- 1 THIS INSTALLATION INFORMATION. 2 NOS CCL INSTALLATION PROCS 3 SCOPE INSTALLATION DECKS 4 NOS/BE INSTALLATION PROCS 5 SENATOR PL, UPDATE FORMAT 6 SENATOR OVERLAYS, ASSEMBLED FOR NOS. 7 *SENHELP*, THE ON-LINE HELP FILE, FOR NOS 8 PRINTER-READY SENATOR MANUAL (NOS VERSION) 9 COMPILED AUXILARY PROGRAMS (OVERLAYS) 10-11 LISTINGS OF ALL OF THE ABOVE INSTALLATION PROCEDURES/DECKS. INSTALLATION CCL PROCEDURES ARE SUPPLIED FOR NOS AND NOS/BE SITES. THE FOLLOWING PROCEDURES/JOBS MAY BE USED - JOB FUNCTION --- -------- GENDISK SETS UP DISK FILES FROM RELEASE TAPE GENALL CALLS GENSEN, GENAUX, AND GENHELP GENSEN ASSEMBLE SENATOR GENAUX ASSEMBLE/COMPILE AUXILARY ROUTINES GENHELP GENERATE MANUAL AND ON-LINE HELP FILE THESE PROCEDURES/JOBS MAY NEED SOME MODIFICATION FOR YOUR SITE. THE ASSEMBLIES NEED THE *COMC* COMMON DECKS FROM A SITE-SUPPLIED PL. THE AUXILARY ROUTINES USE THE PASCAL COMPILER, WHICH MUST BE ATTACHED FROM SOMEWHERE. (SEE BELOW) AFTER RUNNING *GENDISK*, THE REMAINING JOBS MAY BE RUN IN ANY ORDER, OR CONCURRENTLY. *GENALL* GENERATES EVERYTHING. *** NOS NOTE *** IT IS NECESSARY TO MOVE THE ON-LINE HELP FILE ("SENHELP") FROM THE INSTALLATION USER NUMBER TO UN=LIBRARY (UI=377776). THE FOLLOWING CONTROL CARDS WILL WORK FROM "DIS": SUI,377776. ATTACH,S=SENHELP/UN=XXX. XXX IS INSTALLATION UN DEFINE,SENHELP. COPY,S,SENHELP,V. CHANGE,SENHELP/CT=PU,M=R. CLEAR. **************** *** NOS/BE NOTE *** FOR NOS/BE, THE ON-LINE HELP FILE (SENHELP) MUST RESIDE UNDER ID=PUBLIC. THE FOLLOWING CONTROL STATEMENTS WILL WORK FROM DIS: ATTACH,S,SENHELP,ID=SENATOR. REQUEST,SENHELP,*PF. COPYBF,S,SENHELP. CATALOG,SENHELP,ID=PUBLIC,RP=999,XR=SENATOR,PW=PUBLICPW. WHERE "PUBLICPW" IS THE INSTALLATION PUBLIC PASSWORD. ONE OTHER NOTE OF CAUTION WHEN USING THE NOS/BE INSTALL DECKS: THE MODIFICATION FILES "SENIN", "SENINA", "SENINS" AND "SENIND" MUST HAVE AT LEAST ONE UPDATE DIRECTIVE. THIS IS BECAUSE THE "COMBINE" UTILITY WILL NOT FUNCTION PROPERLY (IE, LIKE *PACK*) IF THERE IS AN EMPTY RECORD. THEREFORE, BEFORE BEGINNING THE PROCEDURES "GENALL", "GENSEN", "GENAUX" OR "GENHELP" PREPARE THE MOD FILES THUSLY: SENIN - MUST HAVE AT LEAST A *C,SENATOR UPDATE DIRECTIVE. SENIND - MUST HAVE AT LEAST A *C,DOCSEN UPDATE DIRECTIVE. SENINS - MUST HAVE AT LEAST A *C,SENDOC UPDATE DIRECTIVE. SENINA - MUST HAVE AT LEAST A *C,ALIAS.ERRPAS UPDATE DIRECTIVE. **************** THE AUXILARY PROGRAMS ARE WRITTEN IN PASCAL. IF A PASCAL COMPILER IS NOT AVAILABLE, THE OVERLAYS ARE AVAILABLE ON THE RELEASE TAPE. THE ROUTINES ARE ONLY A FEW PAGES EACH, AND COULD BE RE-WRITTEN IN ANOTHER LANGUAGE, IF DESIRED. THEY ARE WRITTEN FOR PASCAL-6000, RELEASE 3 FROM UNIV. OF MINNESOTA. THE USER MAY SUPPLY UPDATE CORRECTIONS TO ANY OF THE INSTALLATION PROCEDURES. SEE THE DOCUMENTATION IN THE PROCEDURES FOR DETAILS. SENATOR OPTIONS/MODS. THERE ARE A NUMBER OF INSTALLATION OPTIONS AVAILABLE IN SENATOR. A COUPLE ARE DISCUSSED HERE. THE REMAINING OPTIONS APPEAR NEAR THE BEGINNING OF THE SENATOR LISTING (COMDECK COMSSEN). SENATOR HAS SEVERAL USEFUL DEBUGGING COMMANDS. THESE COMMANDS ARE ASSEMBLED IF *F=1* IS SPECIFIED ON THE SENATOR ASSEMBLY. DEBUG IS RECOMMENDED IF CODE IS TO BE DEBUGGED. NOTE - THE *SET* COMMAND MAY CONSTITUTE A HOLE IN SECURITY IF SENATOR IS INSTALLED ON THE SYSTEM AS A PRIVILEGED PROGRAM. THE ONLINE *HELP* FILE DEFAULTS TO UN=LIBRARY (NOS) ID=PUBLIC (NOS/BE) THIS MAY BE CHANGED IN *COMSSEN*. MOST SITES LIKE TO ADD AND/OR DELETE SYSTEMS IN SENATOR. THIS REQUIRES MODS AT THREE PLACES - - IN TABLE *SYST*, 0,0 OVERLAY. - IN TABLE */CCC/TPPT*, 3,0 OVERLAY - CONTROL STATEMENT SKELETONS IN 3,0 OVERLAY THESE TABLES ARE WELL DOCUMENTED, AND THE MODS SHOULD BE EASY. SYSTEM MODIFICATIONS. SENATOR DOES NOT HAVE TO BE INSTALLED ON THE SYSTEM - IT MAY BE RUN FROM A FILE NAMED *SENATOR*. HOWEVER, THE FOLLOWING SYSTEM MODIFICATIONS ARE SUGGESTED - - INSTALL THE AUXILARY ROUTINES ON THE RUNNING SYSTEM. THESE ROUTINES SCAN COMPILER LISTINGS AND PRODUCE ERROR REPORTS AT THE TERMINAL. - INSTALL SENATOR ON THE SYSTEM. IT WILL RUN FASTER, ESPECIALLY IN *SCP/SCOPE* MODE. - FOR NOS, THE *DEST=* OPTION WILL WORK ONLY IF *LFM* IS MODIFIED TO ALLOW A USER TO ROUTE A JOB TO ANOTHER USER NUMBER. IF THERE ARE NO EXPORT/RBF TERMINALS AT YOUR SITE, FORGET IT. (THIS WAS A ONE-LINE DELETE AT TEMPLE.) - FOR NOS, ADD *SENATOR* TO THE IAFEX/TELEX TABLE OF COMMANDS. THIS ALLOWS SENATOR TO BE CALLED FROM ANY IAFEX SUBSYSTEM. - FOR NOS/BE, THE *RMT* COMMAND REQUIRES A *TBL* CALL THAT ALLOWS A USER TO OBTAIN A LIST OF HIS REMOTE OUTPUT FILES. A SIMPLE CHANGE TO A TABLE IN *TBL* IS REQUIRED. THIS MOD IS RECOMMENDED, SINCE IT DOES NOT CONSTITUTE A SECURITY PROBLEM, AND THE *RMT* COMMAND IS QUITE USEFUL. THE *TBL* MOD IS AS FOLLOWS: *D,IN40692.47 (AFTER TBL.2359) VFD 12/2 9 - SEND OUTPUT/PUNCH FNTS TO CM *C TBL OTHER NOTES. FUTURE MODS/RELEASES (IF THERE IS TIME TO CREATE THEM) WILL BE SUPPLIED IN THE SAME TAPE FORMAT. WE ARE ALWAYS INTERESTING IN HEARING ABOUT - INSTALLATION PROBLEMS/SUGGESTIONS LOCAL MODS (IF SUITABLE, WE MAY INCLUDE THEM ON THE STANDARD PL) BUG REPORTS SUGGESTED ENHANCEMENTS (GET IN LINE, I-VE HEARD THEM ALL) IF YOU HAVE ANY PROBLEMS, I MAY BE REACHED AT - (215) 787-6412 OR SENATOR DISTRIBUTION TEMPLE UNIVERSITY COMPUTER ACTIVITY BROAD AND MONTGOMERY ST. PHILADELPHIA, PA. 19122 BILL CHESWICK TEMPLE UNIVERSITY SYSTEMS GROUP *DECK,NOS .PROC,GENDISK,VSN=SENREL. ********************************** * GENDISK - COPY RELEASE TAPE TO * * PERM FILES. * ********************************** * * RELEASE TAPE FORMAT - * FILE * 1 INSTALLATION NOTES * 2 NOS INSTALLATION PROCS * 3 SCOPE INST. DECKS * 4 NOS/BE INST. PROCS * 5 SEQUENTIAL SENATOR PL * 6 SENATOR ABS - NOS VERSION * 7 ON-LINE HELP FILE * 8 PRINTER-READY SENATOR MANUAL * 9 AUXILIARY BINARIES * 10 ASSEMBLY LISTINGS * LABEL,TAPE,#VSN=VSN,NT,F=SI. * PURGE,SENPL/NA. PURGE,SENHELP/NA. PURGE,SENMAN/NA. PURGE,NEWSEN/NA. PURGE,SENAUX/NA. * SKIPF,TAPE,4. SKIP INSTALL STUFF * DEFINE,SENPL. UPDATE,A,P=TAPE,N=SENPL,R. * DEFINE,NEWSEN. SKIPF,TAPE. SKIP EOF MARK COPYBF,TAPE,NEWSEN. * DEFINE,SENHELP. COPYBF,TAPE,SENHELP. * DEFINE,SENMAN. COPYBF,TAPE,SENMAN. * DEFINE,SENAUX. COPYBF,TAPE,SENAUX. * REWIND,TAPE. * CHANGE,NEWSEN/CT=PU,M=R. CHANGE,SENMAN/CT=PU,M=R. CHANGE,SENHELP/CT=PU,M=R. RETURN,SENPL,NEWSEN,SENHELP,SENMAN,SENAUX,TAPE. ******************** * GENDISK COMPLETE * ******************** * PERM FILES CREATED - * SENPL - UPDATE PL * SENHELP - ON-LINE HELP FILE * SENMAN - PRINTER-READY MANUAL * NEWSEN - ABS OF SENATOR * SENAUX - AUXILARY PROGRAMS * * MOVE "SENHELP" TO UN=LIBRARY * ******************** *WEOR .PROC,GENALL,VSN=SENREL. **************************** * GENERATE SENATOR PACKAGE * **************************** * ENTRY EITHER *SENPL* HAS PL, OR * IT IS READ FROM THE RELEASE * TAPE. * ATTACH,OLDPL=SENPL/NA. IFE(.NOT.FILE(OLDPL,AS),GETFILE. BEGIN,GENDISK,,#VSN=VSN. RETURN,OLDPL. ENDIF(GETFILE) * BEGIN,GENSEN. * BEGIN,GENHELP. BEGIN,GENAUX. ***************************** * SENATOR PACKAGE GENERATED * ***************************** * PERMANANT FILES - * NEWSEN, SENHELP, SENMAN, * SENAUX * * MOVE "SENHELP" TO UN=LIBRARY *WEOR .PROC,GENSEN,IN=SENIN,USER=USER. ******************** * ASSEMBLE SENATOR * ******************** * * ENTRY - SENIN CONTAINS PERM. MODS * (OPTIONAL) * USER CONTAINS LOCAL MODS * (OPTIONAL) * BEGIN,GETFILE,,IN. BEGIN,GETFILE,,USER. ATTACH,OLDPL=SENPL. ATTACH,OPL/UN=SYSTEM. RETURN,II,NEWSEN. PURGE,NEWSEN/NA. PURGE,SENOUT/NA. * SETTL,500D. * COPYBR,IN,II. COPYBR,USER,II. NOTE,II,NR./*C SENATOR PACK,II. * UPDATE,Q,I=II,O=LIST. DEFINE,NEWSEN. COMPASS,I,X,D,P,L=LIST,S=NOSTEXT,S=PSSTEXT,S=IPTEXT,B=NEWSEN,F=1. CHANGE,NEWSEN/CT=PU,M=R. DEFINE,SENOUT. LISTING FILE BKSP,LIST,2. COPY,LIST,SENOUT. RETURN,SENOUT. ********************** * ASSEMBLY COMPLETE. * ********************** *WEOR .PROC,GENHELP,I1=SENINS,I2=SENIND. **************************** * GENERATE SENATOR MANUAL/ * * ON-LINE HELP * **************************** * * ENTRY - SENPL IS DIRECT ACCESS * SENINS HAS *SENDOC* MODS * (OPTIONAL) * SENIND HAS *DOCSEN* MODS * (OPTIONAL) * ATTACH,OLDPL=SENPL. ATTACH,OPL/UN=SYSTEM. SETTL,200D. PURGE,SENMAN,SENHELP/NA. RETURN,SENMAN,SENHELP,II1,II2. * BEGIN,GETFILE,,I1. BEGIN,GETFILE,,I2. * COPYBR,I1,II1. NOTE,II1,NR./*C SENDOC PACK,II1. * UPDATE,Q,I=II1,L=1. SENDOC COMPASS,I,X,S=NOSTEXT,S=IPTEXT,L=LIST,B=SENDOC. * COPYBR,I2,II2. NOTE,II2,NR./*C DOCSEN PACK,II2. * UPDATE,Q,I=II2,L=1. DOCSEN DEFINE,SENHELP,SENMAN. /SENDOC,I,H=SENHELP,L=SENMAN. * CHANGE,SENHELP,SENMAN/CT=PU,M=R. ******************** * SENDOC COMPLETE. * ******************** * PERM FILES CREATED - * SENHELP - ON-LINE HELP FILE * SENMAN - PRINTER-READY MANUAL * * MOVE "SENHELP" TO UN=LIBRARY ******************** *WEOR .PROC,GENAUX,IN=SENINA. ****************************** * GENERATE AUXILARY PROGRAMS * ****************************** * * ENTRY - SENINA HAS MODS (OPTIONAL) * PASCAL, PASCLIB ARE DIRECT * ACCESS (RELEASE 3) * ATTACH,OLDPL=SENPL. ATTACH,OPL/UN=SYSTEM. IFE(.NOT.FILE(PASCAL,AS),GETFILE. ATTACH,PASCAL,PASCLIB/UN=LIB. ENDIF(GETFILE) * BEGIN,GETFILE,,IN. * RETURN,II,ALIAS,SENAUX,AUXPL. PURGE,SENAUX/NA. DEFINE,SENAUX. * * CREATE PL WITH MODS * COPYBR,IN,II. NOTE,II,NR./*C ALIAS.ERRPAS PACK,II. UPDATE,Q,N=AUXPL,C=0,I=II,L=1. * * CREATE ALIAS * NOTE,IN./*C ALIAS UPDATE,Q,I=IN,L=1. COMPASS,I,S=NOSTEXT,X,B=ALIAS,L=LIST. * NOTE,IN./*C SENSEQ REWIND,COMPILE,IN,SENSEQ. UPDATE,Q,I=IN,L=1. COMPASS,I,S=NOSTEXT,X,B=SENSEQ,L=LIST. REWIND,SENSEQ. COPYBR,SENSEQ,SENAUX. * GEN,ERRALG. ALGOL GEN,ERRCOB4. COBOL 4 GEN,ERRCOM. COMPASS GEN,ERRPAS. MINNESOTA PASCAL 6000, R3 * ************************* * AUXILARY GEN COMPLETE * ************************* * PERMANANT FILES - * SENAUX - AUX. BINARIES. ************************* .DATA,GEN. .PROC,GEN,PROG. * * CREATE PROG * REWIND,LGO. NOTE,II./*C PROG UPDATE,P=AUXPL,I=II,L=1. RFL,60000. PASCAL,COMPILE,LIST. LOAD,LGO. NOGO,PROG. /ALIAS,PROG,PROG,PROG. REWIND,PROG. COPYBR,PROG,SENAUX. * * PROG CREATED. * *WEOR .PROC,GENTAPE,VSN=SENREL. ************************* * GENERATE RELEASE TAPE * ************************* * ENTRY EITHER *SENPL* HAS PL, OR * IT IS READ FROM THE RELEASE * TAPE. * * NOTE - IF *SENOUT* AND *NEWSEN* * ARE ON PERM FILE, DON-T BOTHER * GEN-ING SENATOR. * RETURN,LIST,NEWSEN,SENOUT. * ATTACH,NEWSEN,SENOUT/NA. IFE,.NOT.FILE(NEWSEN,AS).OR..NOT.FILE(SENOUT,AS),GENALL. BEGIN,GENALL,,#VSN=VSN. ELSE,GENALL. COPY,SENOUT,LIST. BEGIN,GENHELP. BEGIN,GENAUX. ENDIF,GENALL. * ATTACH,OLDPL=SENPL. * RETURN,IN,INSTALL,NOS,SCOPE,NOSBE. * NOTE,IN./*C INSTALL UPDATE,Q,D,8,I=IN,L=1,C=INSTALL. NOTE,IN./*C NOS UPDATE,Q,D,8,I=IN,L=1,C=NOS. NOTE,IN./*C SCOPE UPDATE,Q,D,8,I=IN,L=1,C=SCOPE. NOTE,IN./*C NOSBE UPDATE,Q,D,8,I=IN,L=1,C=NOSBE. * * LABEL,TAPE,W,L=$SENATOR-RELEASE$,NT,F=SI,#VSN=VSN. * REWIND,NEWSEN,SENHELP,SENMAN,SENAUX,LIST. REWIND,INSTALL,NOS,SCOPE,NOSBE,OLDPL. * COPYBF,INSTALL,TAPE. COPYBF,NOS,TAPE. COPYBF,SCOPE,TAPE. COPYBF,NOSBE,TAPE. * UPDATE,N=TAPE,B,R,L=1. WRITEF,TAPE. * COPYBF,NEWSEN,TAPE. COPYBF,SENHELP,TAPE. COPYBF,SENMAN,TAPE. COPYBF,SENAUX,TAPE. COPY,LIST,TAPE. CATALOG,TAPE,R,U,N. **************************** * TAPE GENERATION COMPLETE * **************************** *WEOR .PROC,GETFILE,LFN. RETURN,LFN. GET,LFN/NA. IFE(.NOT.FILE(LFN,AS),GET. ATTACH,LFN/NA. ENDIF(GET) *WEOR .PROC,GENUP. ********************* * UPDATE SENATOR PL * ********************* * * ENTRY - SENIN = SENATOR MODS * (OPTIONAL) * SENINS = SENDOC MODS * (OPTIONAL) * SENIND = DOCSEN MODS * (OPTIONAL) * SENINA = AUX MODS * (OPTIONAL) * SENPL = SENATOR PL * * EXIT - OSENPL = OLD SENATOR PL * SENPL = NEW SENATOR PL * OLDMODS = PACKED COLLECTION * OF ALL THE INPUT MODS * ATTACH,OLDPL=SENPL. BEGIN,GETFILE,,SENIN. BEGIN,GETFILE,,SENINA. BEGIN,GETFILE,,SENIND. BEGIN,GETFILE,,SENINS. * PURGE,OSENPL/NA. CHANGE,OSENPL=SENPL. DEFINE,NEWPL=SENPL. RETURN,IN. * COPYBR,SENIN,IN. COPYBR,SENINA,IN. COPYBR,SENIND,IN. COPYBR,SENINS,IN. PACK,IN. * UPDATE,N,I=IN,C=0,L=1. * PURGE,OLDMODS/NA. DEFINE,OLDMODS. REWIND,IN. COPY,IN,OLDMODS. RETURN,OLDMODS. * PURGE,SENIN,SENINA,SENIND,SENINS/NA. *********************** * GENERATION COMPLETE * *********************** * PERM FILES - * SENPL, OSENPL, OLDMODS *DECK SCOPE BC,T500. COMMENT. COMMENT. GENSEN - ASSEMBLE SENTOR. COMMENT. COMMENT. ENTRY - SENPL ON DISK. COMMENT. COMMENT. SENIN HAS MODS AND COMMENT. *COMPILE CARD. COMMENT. COMMENT. COMCLIB HAS COMC DECKS COMMENT. FOR XTEXT. COMMENT. ATTACH,OLDPL,SENPL,ID=SENATOR,MR=1. ATTACH,SENIN,ID=SENATOR. ATTACH,COMCLIB,ID=SENATOR,MR=1. UPDATE,Q,I=SENIN. RFL,70000. COMPASS,I,B=NEWSEN,X=COMCLIB,L=LIST,D,P,S=CPUTEXT,S=PFMTEXT,S=IPTEXT. EXIT,U. RFL,20000. PURGE,Q1,NEWSEN,ID=SENATOR,PW=SEN. EXIT,U. PURGE,Q2,LIST,ID=SENATOR,PW=SEN. EXIT,U. CATALOG,NEWSEN,ID=SENATOR,XR=SEN,RP=999. CATALOG,LIST,ID=SENATOR,XR=SEN,RP=10. COMMENT. COMMENT. NEWSEN READY, LIST HAS LISTING. COMMENT. *WEOR BC,T200. COMMENT. COMMENT. GENERATE SENATOR MANUAL AND COMMENT. ON-LINE HELP FILE. COMMENT. COMMENT. ENTRY - SENPL ON DISK. COMMENT. COMMENT. SENINS HAS *SENDOC* MODS COMMENT AND *COMPILE CARD. COMMENT. COMMENT. SENIND HAS *DOCSEN* MODS COMMENT. AND *COMPILE CARD. COMMENT. COMMENT. OPL CONTAINS COMC DECKS FOR XTEXT. COMMENT. ATTACH,OPL,COMCLIB,ID=SENATOR,MR=1. ATTACH,OLDPL,SENPL,ID=SENATOR,MR=1. ATTACH,SENINS,SENINS,ID=SENATOR. UPDATE,Q,I=SENINS,L=1. RFL,64000. COMPASS,I,B=SENDOC,X=OPL,S=CPUTEXT,S=IPTEXT,L=LIST. ATTACH,SENIND,SENIND,ID=SENATOR. UPDATE,Q,I=SENIND,L=1. SENDOC,I,H=SENHELP,L=SENMAN. PURGE,X,SENHELP,ID=SENATOR,PW=SEN. UNLOAD,X. EXIT,U. PURGE,X,SENMAN,ID=SENATOR,PW=SEN. UNLOAD,X. EXIT,U. CATALOG,SENHELP,SENHELP,ID=SENATOR,XR=SEN,RP=999. CATALOG,SENMAN,SENMAN,ID=SENATOR,XR=SEN,RP=999. COMMENT. COMMENT. SENHELP AND SENMAN READY COMMENT. *DECK NOSBE .PROC,GENDISK,VSN=SENREL. COMMENT.********************************** COMMENT.* GENDISK - COPY RELEASE TAPE TO * COMMENT.* PERM FILES. * COMMENT.********************************** COMMENT.* COMMENT.* RELEASE TAPE FORMAT - COMMENT.* FILE COMMENT.* 1 INSTALLATION NOTES COMMENT.* 2 NOS INSTALLATION PROCS COMMENT.* 3 SCOPE INST. DECKS COMMENT.* 4 NOS/BE INST. PROCS COMMENT.* 5 SEQUENTIAL SENATOR PL COMMENT.* 6 SENATOR ABS - NOS VERSION COMMENT.* 7 ON-LINE HELP FILE COMMENT.* 8 PRINTER-READY SENATOR MANUAL COMMENT.* 9 AUXILIARY BINARIES COMMENT.* 10-11 ASSEMBLY LISTINGS COMMENT.* LABEL,TAPE,R,#VSN=VSN,NORING. COMMENT.* PURGE,SENPL,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENHELP,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENMAN,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,NEWSEN,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENAUX,ID=SENATOR,PW=SENATOR. EXIT,U. UNLOAD,SENPL,SENHELP,SENMAN,NEWSEN,SENAUX. COMMENT.* SKIPF,TAPE,4,17. SKIP INSTALL STUFF COMMENT.* REQUEST,SENPL,*PF. UPDATE,A,P=TAPE,N=SENPL,R. CATALOG,SENPL,ID=SENATOR,RP=999,XR=SENATOR,PW=SENATOR. COMMENT.* REQUEST,NEWSEN,*PF. SKIPF,TAPE,1,17. SKIP EOF MARK COPYBF,TAPE,NEWSEN. CATALOG,NEWSEN,ID=SENATOR,RP=999,XR=SENATOR. COMMENT.* REQUEST,SENHELP,*PF. COPYBF,TAPE,SENHELP. CATALOG,SENHELP,ID=SENATOR,RP=999,XR=SENATOR. COMMENT.* REQUEST,SENMAN,*PF. COPYBF,TAPE,SENMAN. CATALOG,SENMAN,ID=SENATOR,RP=999,XR=SENATOR. COMMENT.* REQUEST,SENAUX,*PF. COPYBF,TAPE,SENAUX. CATALOG,SENAUX,ID=SENATOR,RP=999,XR=SENATOR. COMMENT.* REWIND,TAPE. COMMENT.* RETURN,SENPL,NEWSEN,SENHELP,SENMAN,SENAUX,TAPE. COMMENT.******************** COMMENT.* GENDISK COMPLETE * COMMENT.******************** COMMENT.* PERM FILES CREATED - COMMENT.* SENPL - UPDATE PL COMMENT.* SENHELP - ON-LINE HELP FILE COMMENT.* SENMAN - PRINTER-READY MANUAL COMMENT.* NEWSEN - ABS OF SENATOR COMMENT.* SENAUX - AUXILARY PROGRAMS COMMENT.* COMMENT.* COMMENT.* MOVE "SENHELP" TO ID=PUBLIC COMMENT.* COMMENT.******************** *WEOR .PROC,GENALL,VSN=SENREL. COMMENT.**************************** COMMENT.* GENERATE SENATOR PACKAGE * COMMENT.**************************** COMMENT.* ENTRY EITHER *SENPL* HAS PL, OR COMMENT.* IT IS READ FROM THE RELEASE COMMENT.* TAPE. COMMENT.* ATTACH,OLDPL,SENPL,ID=SENATOR. EXIT,U. IFE(.NOT.FILE(OLDPL,AS),GETFILE. BEGIN,GENDISK,,#VSN=VSN. ENDIF(GETFILE) COMMENT.* RETURN,OLDPL. COMMENT.* BEGIN,GENHELP. UNLOAD,OLDPL. BEGIN,GENAUX. UNLOAD,OLDPL. BEGIN,GENSEN. UNLOAD,OLDPL. COMMENT.***************************** COMMENT.* SENATOR PACKAGE GENERATED * COMMENT.***************************** COMMENT.* PERMANANT FILES - COMMENT.* NEWSEN, SENHELP, SENMAN, COMMENT.* SENAUX COMMENT.* COMMENT.* MOVE "SENHELP" TO ID=PUBLIC *WEOR .PROC,GENSEN,IN=SENIN,USER=USER. COMMENT.******************** COMMENT.* ASSEMBLE SENATOR * COMMENT.******************** COMMENT.* COMMENT.* ENTRY - SENIN CONTAINS PERM. MODS COMMENT.* (MUST HAVE AT LEAST ONE COMMENT.* UPDATE DIRECTIVE LIKE A COMMENT.* COMMENT OR *C SENATOR COMMENT.* USER CONTAINS LOCAL MODS COMMENT.* (OPTIONAL) COMMENT.* BEGIN,GETFILE,,IN. BEGIN,GETFILE,,USER. ATTACH,OLDPL,SENPL,ID=SENATOR. ATTACH,OPL,COMCLIB,ID=PUBLIC. ACQUIRE COMMON COMMON DECKS RETURN,II,NEWSEN,II1,II2,SENOUT. PURGE,NEWSEN,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENOUT,ID=SENATOR,PW=SENATOR. EXIT,U. UNLOAD,NEWSEN,SENOUT. COMMENT.* COMMENT.* COPYBR,IN,II. COPYBR,USER,II. REWIND,II,II2. COPYBF,II,II2. REWIND,II,II2. COMBINE,II2,II,0. REWIND,II. UNLOAD,II2. COMMENT.* UPDATE,Q,I=II,O=LIST. REQUEST,NEWSEN,*PF. COMPASS,I,X=OPL,D,P,L=LIST,S=CPUTEXT,S=PFMTEXT,S=IPTEXT,B=NEWSEN,F=0,BL. CATALOG,NEWSEN,ID=SENATOR,RP=999,XR=SENATOR. REQUEST,SENOUT,*PF. LISTING FILE BKSP,LIST,2. COPY,LIST,SENOUT. CATALOG,SENOUT,ID=SENATOR,RP=999,XR=SENATOR. RETURN,SENOUT. COMMENT.********************** COMMENT.* ASSEMBLY COMPLETE. * COMMENT.********************** UNLOAD,OPL. *WEOR .PROC,GENHELP,I1=SENINS,I2=SENIND. COMMENT.**************************** COMMENT.* GENERATE SENATOR MANUAL/ * COMMENT.* ON-LINE HELP * COMMENT.**************************** COMMENT.* COMMENT.* ENTRY - SENPL IS DIRECT ACCESS. COMMENT.* SENINS HAS *SENDOC* MODS. COMMENT.* (MUST HAVE AT LEAST ONE COMMENT.* UPDATE DIRECTIVE, LIKE COMMENT.* A COMMENT OR *C,SENDOC) COMMENT.* SENIND HAS *DOCSEN* MODS. COMMENT.* (MUST HAVE AT LEAST ONE COMMENT.* UPDATE DIRECTIVE, LIKE COMMENT.* A COMMENT OR *C,DOCSEN) COMMENT.* ATTACH,OLDPL,SENPL,ID=SENATOR. ATTACH,OPL,COMCLIB,ID=PUBLIC. COMMON COMMON DECKS PURGE,SENMAN,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENHELP,ID=SENATOR,PW=SENATOR. EXIT,U. RETURN,SENMAN,SENHELP,II1,II2,II3. COMMENT.* BEGIN,GETFILE,,I1. BEGIN,GETFILE,,I2. COMMENT.* COPYBR,I1,II1. REWIND,II1,II3. COPYBF,II1,II3. REWIND,II1,II3. COMBINE,II3,II1,0. REWIND,II1. UNLOAD,II3. COMMENT.* UPDATE,Q,I=II1,L=1. SENDOC COMPASS,I,X=OPL,S=CPUTEXT,S=IPTEXT,L=LIST,B=SENDOC,BL. COMMENT.* COPYBR,I2,II2. REWIND,II2,II3. COPYBF,II2,II3. REWIND,II2,II3. COMBINE,II3,II2,0. REWIND,II2. UNLOAD,II3. COMMENT.* UPDATE,Q,I=II2,L=1. DOCSEN REQUEST,SENHELP,*PF. REQUEST,SENMAN,*PF. SENDOC,I,H=SENHELP,L=SENMAN. COMMENT.* CATALOG,SENHELP,ID=SENATOR,RP=999,XR=SENATOR. CATALOG,SENMAN,ID=SENATOR,RP=999,XR=SENATOR. COMMENT.******************** COMMENT.* SENDOC COMPLETE. * COMMENT.******************** COMMENT.* PERM FILES CREATED - COMMENT.* SENHELP - ON-LINE HELP FILE COMMENT.* SENMAN - PRINTER-READY MANUAL COMMENT.* COMMENT.* MOVE "SENHELP" TO ID=PUBLIC COMMENT.******************** UNLOAD,OPL. *WEOR .PROC,GENAUX,IN=SENINA. COMMENT.****************************** COMMENT.* GENERATE AUXILARY PROGRAMS * COMMENT.****************************** COMMENT.* COMMENT.* ENTRY - SENINA HAS MODS COMMENT.* (MUST HAVE AT LEAST A COMMENT.* *C ALIAS.ERRPAS ) COMMENT.* PASCAL, PASCLIB ARE ON-LINE COMMENT.* ATTACH,OLDPL,SENPL,ID=SENATOR. ATTACH,OPL,COMCLIB,ID=PUBLIC. COMMON COMMON DECKS COMMENT.* BEGIN,GETFILE,,IN. COMMENT.* RETURN,II,ALIAS,SENAUX,AUXPL,II2. PURGE,SENAUX,ID=SENATOR,PW=SENATOR. UNLOAD,SENAUX. EXIT,U. REQUEST,SENAUX,*PF. COMMENT.* COMMENT.* CREATE PL WITH MODS COMMENT.* COPYBR,IN,II. REWIND,II,II2. COPYBF,II,II2. REWIND,II,II2. COMBINE,II2,II,0. REWIND,II. UNLOAD,II2. UPDATE,Q,N=AUXPL,C=0,I=II,L=1. COMMENT.* COMMENT.* CREATE ALIAS COMMENT.* UPDATE,Q,I=IN3,L=1,P=AUXPL. COMPASS,I,S=CPUTEXT,D,X,B=ALIAS,L=LIST. EXPECT 1 ASSEMBLY ERROR (OK) COMMENT.* REWIND,COMPILE,IN,SENSEQ. UPDATE,Q,I=IN4,L=1. COMPASS,I,S=CPUTEXT,X,B=SENSEQ,L=LIST,BL,D. EXPECT 1 ASSEMBLY ERROR (OK REWIND,SENSEQ. COPYBR,SENSEQ,SENAUX. COMMENT.* BEGIN,GENPR,,ERRALG. ALGOL 5 BEGIN,GENPR,,ERRCOB4. COBOL 4 BEGIN,GENPR,,ERRCOM. COMAPSS 3 BEGIN,GENPR,,ERRPAS. PASCAL 3 CATALOG,SENAUX,ID=SENATOR,RP=999,XR=SENATOR. COMMENT.* COMMENT.************************* COMMENT.* AUXILARY GEN COMPLETE * COMMENT.************************* COMMENT.* PERMANANT FILES - COMMENT.* SENAUX - AUX. BINARIES. COMMENT.************************* UNLOAD,OPL. .DATA,IN3. *TEXT *C ALIAS *ENDTEXT .DATA,IN4. *TEXT *C SENSEQ *ENDTEXT *WEOR .PROC,GENPR,PROG. COMMENT.* COMMENT.* CREATE PROG COMMENT.* REWIND,LGO. REWIND,IN5. UPDATE,P=AUXPL,I=IN5,L=1. RFL,60000. PASCAL,COMPILE,LIST. LOAD,LGO. NOGO,PROG. ALIAS,PROG,PROG,PROG. REWIND,PROG. COPYBR,PROG,SENAUX. COMMENT.* COMMENT.* PROG CREATED. COMMENT.* .DATA,IN5. *TEXT *C PROG *ENDTEXT *WEOR .PROC,GENTAPE,VSN=SENREL. COMMENT.************************* COMMENT.* GENERATE RELEASE TAPE * COMMENT.************************* COMMENT.* ENTRY EITHER *SENPL* HAS PL, OR COMMENT.* IT IS READ FROM THE RELEASE COMMENT.* TAPE. COMMENT.* COMMENT.* NOTE - IF *SENOUT* AND *NEWSEN* COMMENT.* ARE ON PERM FILE, DON-T BOTHER COMMENT.* GEN-ING SENATOR. COMMENT.* RETURN,LIST,NEWSEN,SENOUT. COMMENT.* ATTACH,NEWSEN,ID=SENATOR. EXIT,U. ATTACH,SENOUT,ID=SENATOR. EXIT,U. IFE,.NOT.FILE(NEWSEN,AS).OR..NOT.FILE(SENOUT,AS),GENALL. BEGIN,GENALL,,#VSN=VSN. ELSE,GENALL. COPY,SENOUT,LIST. UNLOAD,OLDPL. BEGIN,GENHELP. UNLOAD,OLDPL. BEGIN,GENAUX. UNLOAD,OLDPL. ENDIF,GENALL. COMMENT.* UNLOAD,OLDPL. ATTACH,OLDPL,SENPL,ID=SENATOR. COMMENT.* RETURN,IN,INSTALL,NOS,SCOPE,NOSBE. REWIND,LGO. UPDATE,Q,D,8,I=IN6,L=1,C=INSTALL. UPDATE,Q,D,8,I=IN7,L=1,C=NOS. UPDATE,Q,D,8,I=IN8,L=1,C=SCOPE. UPDATE,Q,D,8,I=IN9,L=1,C=NOSBE. COMMENT.* COMMENT.* LABEL,TAPE,W,L=$SENATOR-RELEASE$,#VSN=VSN,RING. COMMENT.* REWIND,NEWSEN,SENHELP,SENMAN,SENAUX,LIST. UNLOAD,QNULLQ. REWIND,INSTALL,NOS,SCOPE,NOSBE,OLDPL. COMMENT.* COPYBF,INSTALL,TAPE. COPYBF,NOS,TAPE. COPYBF,SCOPE,TAPE. COPYBF,NOSBE,TAPE. COMMENT.* UPDATE,N=TAPE,B,R,L=1. COPYBF,QNULLQ,TAPE. COMMENT.* COPYBF,NEWSEN,TAPE. COPYBF,SENHELP,TAPE. COPYBF,SENMAN,TAPE. COPYBF,SENAUX,TAPE. COPY,LIST,TAPE. REWIND,TAPE. ITEMIZE,TAPE. COMMENT.**************************** COMMENT.* TAPE GENERATION COMPLETE COMMENT.**************************** .DATA,IN6. *TEXT *C INSTALL *ENDTEXT .DATA,IN7. *TEXT *C NOS *ENDTEXT .DATA,IN8. *TEXT *C SCOPE *ENDTEXT .DATA,IN9. *TEXT *C NOSBE *ENDTEXT *WEOR .PROC,GETFILE,LFN. RETURN,LFN. ATTACH,LFN,ID=SENATOR. EXIT,U. *WEOR .PROC,GENUP. COMMENT.********************* COMMENT.* UPDATE SENATOR PL * COMMENT.********************* COMMENT.* COMMENT.* ENTRY - SENIN = SENATOR MODS COMMENT.* (OPTIONAL) COMMENT.* SENINS = SENDOC MODS COMMENT.* (OPTIONAL) COMMENT.* SENIND = DOCSEN MODS COMMENT.* (OPTIONAL) COMMENT.* SENINA = AUX MODS COMMENT.* (OPTIONAL) COMMENT.* SENPL = SENATOR PL COMMENT.* COMMENT.* EXIT - OSENPL = OLD SENATOR PL COMMENT.* SENPL = NEW SENATOR PL COMMENT.* OLDMODS = PACKED COLLECTION COMMENT.* OF ALL THE INPUT MODS COMMENT.* ATTACH,OLDPL,SENPL,ID=SENATOR,PW=SENATOR. ALL PERMISSIONS NEEDED BEGIN,GETFILE,,SENIN. BEGIN,GETFILE,,SENINA. BEGIN,GETFILE,,SENIND. BEGIN,GETFILE,,SENINS. COMMENT.* PURGE,OSENPL,ID=SENATOR,PW=SENATOR. UNLOAD,OSENPL. EXIT,U. RENAME,OLDPL,OSENPL. UNLOAD,OLDPL. ATTACH,OLDPL,OSENPL,ID=SENATOR. REQUEST,NEWPL,*PF. RETURN,IN. COMMENT.* COPYBR,SENIN,IN. COPYBR,SENINA,IN. COPYBR,SENIND,IN. COPYBR,SENINS,IN. REWIND,IN,II2. COPYBF,IN,II2. REWIND,IN,II2. COMBINE,II2,IN,0. REWIND,IN. UNLOAD,II2. COMMENT.* UPDATE,N,I=IN,C=0,L=1. COMMENT.* PURGE,OLDMODS,ID=SENATOR,PW=SENATOR. UNLOAD,OLDMODS. EXIT,U. REQUEST,OLDMODS,*PF. REWIND,IN. COPY,IN,OLDMODS. CATALOG,OLDMODS,ID=SENATOR,RP=999,XR=SENATOR,PW=SENATOR. RETURN,OLDMODS. COMMENT.* UNLOAD,SENIN,SENINA,SENIND,SENINS. PURGE,SENIN,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENINA,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENIND,ID=SENATOR,PW=SENATOR. EXIT,U. PURGE,SENINS,ID=SENATOR,PW=SENATOR. EXIT,U. UNLOAD,SENIN,SENINA,SENIND,SENINS. COMMENT.*********************** COMMENT.* GENERATION COMPLETE * COMMENT.*********************** COMMENT.* PERM FILES - COMMENT.* SENPL, OSENPL, OLDMODS *WEOR,17 *DECK SENATOR IDENT SENATOR,104B ABS SST HN,FL,DALL LIST F ENTRY SENATOR ENTRY SEN ENTRY RFL= SYSCOM B1 SENATOR SPACE 4,10 *** SENATOR - INTERACTIVE TEXT EDITOR. * B. CHESWICK, * S. LIDIE. FALL 1977, LEHIGH UNIVERSITY. * * SUPPLIMENTAL CODE BY: * * N. DEILY. LEHIGH UNIVERSITY. * S. HOBSON. TEMPLE UNIVERSITY. * S. PETCHON. TEMPLE UNIVERSITY. HISTORY SPACE 2,10 ** CORRECTION HISTORY. * * SENATOR 2.5. RELEASE VERSION CREATED MARCH, 1980. * * HISTORY INFORMATION SHOULD BE INSERTED AT THE END * OF THE HISTORY LIST. ENTRIES SHOULD HAVE THE FOLLOTING FORM - * * IDENT DATE AUTHOR * BRIEF DESCRIPTION. * * * * SEN1 80/04/08 S.LIDIE. * MAKE A COUPLE MINOR CHANGES FOR SCOPE. * * SEN2 80/04/10 B.CHESWICK * ADD *CMUR* DEFINITION FOR SCOPE INSTALLATION. * * SEN3 80/08/06 * IF SWITCH 6 IS TURNED ON, TURN OFF THE *IAF* * PROMPT. THIS IS AN EXPERIMENT. * ALSO, ADD THE G= PARAMETER TO FTN5. * * SEN4 80/09/05 * HAVE SYSTEM COBOL CALL *ERRCOB5*. * * SEN5 81/04/29 B.CHESWICK * NOS LEVEL 531 MODS: * - TURN OFF "?" SYSTEM PROMPT * - REMOVE OLD DEBUG CODE * - ADD "SEN" ENTRY POINT FOR CONVENIENCE * - GET HELP FILE FROM UN=LIBRARY * - CHANGE SOME SCP DEFINITIONS * - REMOVE EXTRANEOUS DAYFILE MESSAGE (TT75 ASSIGNED...) * * SEN6 81/06/02 B.CHESWICK. * FIX NON-INTERACTIVE EXECUTION, WHICH WAS MAKING A "TLX" CALL. * REMOVE SOME TEMPLE U. LOCAL CODE. * CHANGE ALGOL TO ALGOL5. * CHANGE KCL TO CCL IN SOME 3,0 FUNCTIONS. * * SEN7 82/08/06 B.CHESWICK * NOS 2 MODIFICATIONS: * - SET ZZZZZVT AND ZZZZZVC TO NO-DROP STATUS. * - CHANGE SUBMIT TO REPORT 4 CHAR JSN * * SEN8 S.LIDIE 82/03/29 * - CHANGE COPYRIGHT DATE. * - ADD SOME INTERNAL DOC TO EDIT * - ADD CHECKS FOR CERTAIN ILLEGAL COMMANDS IN MACROS (EDIT) * - FIX PUNCH COMMAND TO USE *SUF* * - FIX ELLIPSES CHANGE. * - FIX A CHECK IN *DUP* * - FIX SYSTEM PROCESSING IN *SUBMIT* AND *PUNCH* * - DELETE EXTRA BLANK IN EDIT PROMPT. * - REMOVE *BASIC* EXECUTE. * * SEN9 S.LIDIE 82/03/29 * VARIOUS NOS/BE CHANGES AND ENHANCEMENTS: * - FIX LIST,P COMMAND FOR NOS/BE. * - FIX NOS/BE FILE NAME. * - ADJUST FOR FILE NAME CHANGE IN NOS/BE FROM SCOPE. * - CHANGE RESERVED FILE NAME FOR *BATCH* IN NOS/BE. * - CLEAN UP LABELS IN IFNOS/IFNOSBE TESTS. * * SEN10 S.LIDIE 82/03/29 * - CHANGE VERSION NUMBER. * - ADD A SIMPLE STRING REPLACEMENT TO *INPUT* MODE. * - RCE - MAKE PARAMETER THE DEFAULT INSTEAD OF FILE. * - ADD *BLANK* AND *REMOVE* COMMAND TO EDIT * - CHANGE SENATOR VERSION NUMBER. * * SEN11 B.CHESWICK 82/08/09 * REWRITE *RPV* TO USE THE *REPREIVE* MACRO. ALSO, CLEAN * UP ASSOCIATED PROCESSING OF TIME, SRU, AND OTHER LIMITS, * AND BUFFER FLUSHING, FILE LIMITS, ETC. * * SEN12 B.CHESWICK 82/11/07 * MANY MINOR REPAIRS: * - ADD *GNA* MACRO AND FIX LONG FILE NAMES AND NUMERIC FILE NAM * - FIX STATUS,D FOR THE NEW REPRIEVE * - ADD *DMP*/*DMD* CALL AFTER UNUSUAL ERRORS * - MOVE PSE INTO ALPHABETICAL ORDER * - FIX ERROR PROCESSING IN *SUBMIT* COMMAND * - ADD "BYE" COMMAND * - REPORT TRUNCATED LINES IN "ROF" * - FIX ILLEGAL FILE NAME MESSAGE IN RCE * - CHANGE USF TO USE FTN5 TABS * - FIX FILE NAMES BEGINNING WITH 5-9 (SHELLEY'S BUG) * - ADD NEW *SENSEQ* MODS. * * SEN13 S. O. LIDIE 83/01/01 * FIX SENATOR RELEASE PL FOR NOS/BE 1.5 PSR LEVEL 577. * - UPDATE COPYRIGHT DATE. * - UPDATE COMCPTM DOCUMENTATION. * - SENHELP PF ID=PUBLIC. * - USE REPRIEVE MACRO, FIX UP DSM, PRA, RPV AND RAF, * INVENT NOS/BE STYLE COMSRPV (EXTENDED RPV). * - UPDATE INSTALL NOTES. * - SUPPLY GENDECKS FOR NOS/BE. * - DEFAULT NOS/BE SYSTEXT = CPUTEXT. * - ECS SUBR NOW COMPATIBLE WITH CCL. * - FIX A FEW SCP ABBREVIATIONS. * - FIX MISCELLANEOUS ASSEMBLY ERRORS AND OTHER SMALL BUGS. * - FIX A BUG IN THE BOTTOM COMMAND. * - FIX AUDIT LIST OPTION FOR A CATLIST. * - UPDATE PF RETURN CODES FOR PFM. * - FIX GFI NOT TO SYSERR ON LONG ALPHANUMERIC. * - RENAME SHOULD CALL SNS TO SET NEW TABS. * - FIX A BUG IN ON-LINE HELP (HELP,KEYWRD DID NOT WORK). * - ON-LINE HELP WILL NOT RETURN SENHELP IF FILE IS LOCAL. * - REMOVE UNUSED CODE IN CCT. * - DEST=C IS DEFAULT FOR NOS/BE. * - SYSTEM SCOPE SHOULD BE DATA TYPE NOT SDATA. * * SEN14 S. O. LIDIE 83/01/01 * ADDITIONAL MODS: * - UPDATE VERSION TO 2.7. * - RE-WRITE STATUS COMMAND FOR READY/EDIT. * - DEFAULT FILENAME OF NONAME.DAT FOR EDIT. * - GET RID OF READ COMMAND. * - IMPLEMENT CODE TO SAVE LINES *MARK*ED IN EDIT MODE. * ALSO, THE CURRENT EDIT LINE IS REMEMBERED. ICF IS * MODIFIED TO RESET EDIT RANGE TO 0-999999 INSTEAD OF * DURING EDIT INITIALIZATION. * - WARN USER OF LINES MORE THAN LINE LEN CHARS AND MARK THEM. * ALSO THE NEW FEATURE OF *RDS* TO READ WITH NO SPACE FILL * IS USED, WHICH DOES DECREASE CPU TIMES FOR AN OLD. * - ADD EDIT ZONE COMMAND FOR FINDING STRING ZONES. * - IMPLEMENT BANG FEATURE TO EXECUTE CONTROL STATEMENTS FROM * READY OR EDIT MODE (PREFIX CHARACTER IS EXCLAMATION POINT). * - ADD OUT COMMAND (IDENTICAL TO PRINT). DELETE PRINT. * - ADD NOUT COMMAND (IDENTICAL TO NPRINT). DELETE NPRINT. * - ADD PRC OPTION (PERMIT READY COMMANDS FROM EDIT). * - ADD CODE TO RELAX CONTRAINTS FOR *USE* COMMAND. ANY SENATOR * COMMAND MAY NOW APPEAR WITHIN A USE FILE EXCEPT ANOTHER USE. * - ADD DEBUG=T OR =F RCE PARAMETER TO INVOKE CID/PMD/C5TDMP. * DO NOT SAVE CURRENT FILE IF COMMAND WAS EXECUTE. * REMOVE SENATOR(GOTO) FROM RCE, USE CCL NOW. * * SEN15 R. L. OLIVER + S. O. LIDIE 83/07/27 * - FIX CONTINUED CONTROL STATEMENTS IN RCE. * - TURN OFF PROMPT IN SCP MODE (NOS). * - CATLIST NOW OBEYS *TYPE* FOR NOS AND NOS/BE. * - RESET CSET TO NORMAL (NOS). * - SET COMPLETE BIT FOR PUNCH COMMAND. * - ADD CARRIAGE CONTROL FOR NOS/BE STATUS. * - FIX CONTROL BYTE I/O FOR A 63-CSET NOS ASSEMBLY. * - CORRECT *GFI* RETURN CODE. * - FIX *ROS* WITH LONG DATA FILES. * - CHECK FOR BAD DEST IN *SUBMIT*. * - REMOVE DUPLICATE RUN/COM/EXE DEFINITIONS FOR SYMPL. * - ADD VERSION TO STATUS,M * - CONVERT SYSTEM PASCAL TO USE SENSEQ. TAB IS NOW BACKSLASH. * - ADD NOS *RMT* COMMAND. CHANGE SUBMIT TO ROUTE TO *TO*. * - IN RPV, CLEAR RANDOM BIT IN S FET JUST IN CASE THE ABORT * OCCURED DURING A NOS RMT. SET PROMPT/CSET ATTRIBUTES TOO. * - PRINT MUST SET SYSYEM ORDINAL CORRECTLY FOR *SCF*. * * --- END OF HISTORY --- SPACE 2,4 IPARAMS SENATOR SPACE 4,10 ** DETERMINE OPERATING SYSTEM. A IFC EQ,*"OS.NAME"*KRONOS* IFNOS OPSYN IFCP IFNOSBE OPSYN SKIP A ELSE B IFC EQ,*"OS.NAME"*NOS* IFNOS OPSYN IFCP IFNOSBE OPSYN SKIP B ELSE IFNOSBE OPSYN IFCP IFNOS OPSYN SKIP B ENDIF A ENDIF SENATOR SPACE 4,10 ** SET VERSION NUMBER. IFNOS D MICRO 5,5,$"DATE"$ ELSE D MICRO 2,5,$"DATE"$ ENDIF VER MICRO 1,,$2.7 ("D")$ SENATOR SPACE 4,10 IFNOS TITLE SENATOR "VER" (NOS) COMMENT SENATOR "VER" (NOS) ELSE TITLE SENATOR "VER" (NOS/BE) COMMENT SENATOR "VER" (NOS/BE) ENDIF SENATOR SPACE 4,10 COMMENT (C) 1983 LEHIGH UNIVERSITY. SENATOR SPACE 4,10 DEBUG EQU *F NOT ZERO IF ASSEMBLE DEBUG CODE. SENATOR SPACE 4,10 IFNOS XTEXT COMCMAC XTEXT COMSDSP XTEXT COMSPFM XTEXT COMSRPV XTEXT COMSTCM WE ARE NOW ASSEMBLING CODE OTHER ELSE ACTR EQU RA.ACT ARGR EQU RA.ARG LWPR EQU RA.LWP PGNR EQU RA.PGN CMUR EQU RA.CMU ENDIF SPACE 4,10 *** SENATOR. * * SENATOR IS AN INTERACTIVE TEXT EDITOR THAT MAY BE USED * TO CREATE, MODIFY, AND EXECUTE PROGRAMS, DATA, AND TEXT * FILES IN GENERAL. A NUMBER OF LANGUAGES ARE AVAILABLE, * AND NEW ONES MAY BE ADDED EASILY. * * COMPLETE USER DOCUMENTATION OF SENATOR IS AVAILABLE * IN THE MANUAL INCLUDED IN THE SENATOR PROGRAM LIBRARY. * * THIS VERSION OF SENATOR RUNS UNDER NOS 2.0 AND NOS/BE 1.5. * IT SHOULD ALSO RUN UNDER NOS 1, KRONOS 2, AND SCOPE 3.4 * WITH MINIMAL MODIFICATIONS. * * EXCEPT FOR SOME MINOR NOS/BE COMMANDS, SENATOR DOES * NOT REQUIRE MODIFICATIONS TO THE OPERATING SYSTEM. (THE * *RMT* COMMAND NEEDS A CHANGE TO *TBL* TO WORK PROPERLY.) * * SENATOR MAY BE RUN FROM A FILE OR INSTALLED IN THE * OPERATING SYSTEM. IT HAS SEVERAL AUXILARY PROGRAMS * THAT SCAN COMPILER LISTINGS FOR ERRORS. THESE PROGRAMS * SHOULD BE INSTALLED IN THE OPERATING SYSTEM. * * * SENATOR HAS BEEN RUNNING AT LEHIGH UNIVERSITY SINCE * 1977 UNDER SCOPE 3.4.4. AT TEMPLE UNIVERSITY, IT HAS * BEEN THE PRINCIPAL EDITOR UNDER NOS 1.3 SINCE SUMMER * 1978. THE CODE WAS WRITTEN WITH CARE AND MANY COMMENTS. * WITH THE EXCEPTION OF A FEW AREAS, MODIFYING AND DEBUGGING * SENATOR IS FAIRLY EASY, SHOULD IT BE NECESSARY. * IT IS NOW RUNNING UNDER NOS 2.0/562 AND NOS/BE 1.5/577. SPACE 4,10 *** HISTORY. * * SENATOR WAS ORIGINALLY WRITTEN AT LEHIGH BY SEVERAL * UNDERGRADUATES IN RESPONSE TO *SETUP* AND *EDITOR*. * AFTER SEVERAL YEARS OF WRITING AND RE-WRITING IT WAS * INSTALLED AND USED AS AN ALTERNATIVE TO *EDITOR* UNDER * SCOPE. * * IN SUMMER OF 1977 VERSION 2 WAS STARTED. THE NEW VERSION * WAS WRITTEN TO 1) IMPROVE COMMAND SYNTAX, 2) REDESIGN *EDIT*, * 3) USE THE NOS COMMON DECKS, 4) APPROACH THE *NOS* CODING * CONVENTIONS, AND 5) SIMPLIFY THE TEXT-HANDLING DATA STRUCTURE. * * AS A RESULT OF THIS RE-WRITE, THE NEW VERSION WAS SMALLER, * FASTER, AND ALMOST BUG-FREE FROM THE START. * * SINCE THEN, THE AUXILARY ROUTINES HAVE BEEN ADDED, ALONG * WITH DOCUMENTATION AND A NUMBER OF ENHANCEMENTS. TITLE 0,0 OVERLAY - MACROS. ** ASCII - GENERATE ASCII DATA. * * THIS MACRO GENERATES BYTES OF ASCII CHARACTERS FROM A * STREAM OF DISPLAY CODE. THE FOLLOWING RULES ARE USED * * AN ALPHA IMMEDIATELY PRECEDED BY A (') IS TRANSLATED * AS A CAPITAL LETTER. THE (') IS NOT TRANSLATED. * ALL OTHER ALPHA-S ARE LOWER CASE * A PAIR OF (?) DELIMITS THE NAME OF A SPECIAL ASCII * CHARACTERS. A SYMBOL CONSISTING OF THE DELIMITED * NAME PRECEDED BY AN *A* MUST BE DEFINED AND CONTAIN * THE RELEVANT ASCII CODE * ALL OTHER CHARACTERS ARE TRANSLATED DIRECTLY TO THE * ASCII EQUIVALENTS, IF POSSIBLE. * * * ASCII ('READY.) * * PRODUCES CAPITAL *R* AND LOWER CASE *EADY.* * * ASCII (?BEL??BEL??BEL?) * * SENDS 3 BELLS ASCII MACRO P1 .A MICRO 1,,*_P1_* NOREF N,BIAS BIAS SET 0 IFNOSBE 1 BIAS SET 4000B BSS 0 FORCE UPPER KR IFNOS 2 VFD 12/2L"BO" BIAS SET 4000B BIT FOR BINARY OUTPUT * .1 DUP 72 LOOP ALOT .B MICRO 1,1,*".A"* * * PROCESS THE CHARACTER IN ".A" * .2 IFC LE,*".B"*Z* IF ALPHA, LOWER .A MICRO 2,,*".A"* VFD 12/1R".B"+140B+BIAS .2 ELSE .3 IFC EQ,*".B"*'* IF UPPER CASE .B MICRO 2,1,*".A"* .A MICRO 3,,*".A"* VFD 12/1R".B"+100B+BIAS .3 ELSE .4 IFC EQ,*".B"*?* .C MICRO 1,,".A" ? IS THE MICRO DELIMITERS N MICCNT .C .A MICRO N+3,,*".A"* VFD 12/A_".C"+BIAS .4 ELSE OTHER CHARACTERS N SET 1R".B"-1R0 .C MICRO N*3+1,3,*0600610620630640650660670700710530550520570500 ,51044075040054056043133135072042137041046047077074076100134136073* .A MICRO 2,,*".A"* VFD 12/".C"B+BIAS .4 ENDIF .3 ENDIF .2 ENDIF * .2 IFC EQ,*".A"**,1 .1 STOPDUP .1 ENDD * VFD 12/0,*P/0 END OF LINE ENDM BSSR SPACE 4,10 ** BSSR - MACRO TO DEFINE BUFFER SPACE WITHOUT * ACTUALLY ALLOCATING PROGRAM SPACE. IN EFFECT, * BUFFER SPACE IS ALLOCATED IN BLANK COMMON. * NOTE THAT ANY PROGRAM USING THIS MACRO * WILL PROBABLY HAVE TO ENSURE THAT IT HAS * ADEQUATE F.L. BEFORE EXECUTING. * * BUFF BSSR WORDS * * WHERE *BUFF* IS THE NAME OF A BUFFER, * WHICH IS *WORDS* IN LENGTH. PURGMAC BSSR MACRO BSSR,P1,P2 IF -DEF,'?BSSR..,2 BSS 0 '?BSSR.. SET * LOC '?BSSR.. P1 BSS 0 '?BSSR.. SET '?BSSR..+P2 LOC *O BSSR ENDM GNA SPACE 4,10 ** GNA MACRO - GET NEXT ARTIFACT. * * GNA P1,P2 * * THIS MACRO CALLS *GNA* TO GET THE NEXT INPUT TOKEN (ARTIFACT). * IT'S TWO PARAMETERS VARY WHAT IS CONSIDERED TO BE A TOKEN. * * WHERE P1 = *FN* IS FILE NAME ALLOWED * = *NUM* IF NUMERIC POSSIBLE * P2 = AO IF ALPHA ARTIFACT IS NOT ALPHANUMERIC 000270 * * THE *P1* PARAMETER DEALS WITH THE FACT THAT BOTH A NUMBER * AND A NOS FILE NAME MAY BEGIN WITH A DIGIT. THE PARAMETER * INDICATES WHETHER IT IS TO BE TREATED AS A FILE NAME * (*FN*) OR AN INTEGER (*NUM*). * * THE *P2* PARAMETER, WHEN SPECIFIED, INDICATES THAT * AN ALPHA TOKEN MAY NOT CONTAIN DIGITS. THIS ALLOWS THE * COMMAND: * LIST250 * TO BE TREATED AS TWO TOKENS. GNA MACRO P1,P2 .1 IFC EQ,/P1/NUM/ R= B4,1 .1 ELSE R= B4,0 .1 ENDIF * .1 IFC EQ,/P2// R= B7,0 .1 ELSE R= B7,1 .1 ENDIF * RJ GNA ENDM ECS SPACE 4,10 ** ECS MACRO - ENTER CONTROL STATEMENTS. * * ECS FWA,LWA,FNT * * WHERE FWA - FWA OF CONTROL STATEMENTS * LWA - LWA+1 OF CONTROL STATEMENTS ECS MACRO P1,P2,P3 R= X1,P1 SB7 P2_-_P1 EQ ECS ENDM LOAD SPACE 4,10 ** LOAD MACRO - LOAD A SENATOR OVERLAY. * * THIS MACRO LOADS PRIMARY OVERLAYS INTO SENATOR. * THE CALING ROUTINE MAY SPECIFY THE ENTRY POINT, OR * THE DEFAULT MAY BE USED. IN ANY EVENT, CONTROL * DOES NOT RETURN TO THE CALLER. * * LOAD LEVEL,ENTRY,SEC * * WHERE LEVEL IS THE PRIMARY OVERLAY LEVEL * OR *LAST* TO LOAD LAST OVERLAY * ENTRY IS THE ENTRY POINT (OPTIONAL) * SEC IS THE SECONDARY OVERLAY (OPTIONAL). * * USES ALL * * CALLS LSO LOAD MACRO P1,P2,P3 .1 IFC EQ,*P1*LAST* R= X1,0 .1 ELSE R= X0,P3 R= X1,P1 LX1 6 BX1 X1+X0 .1 ENDIF R= B7,P2 EQ LSO LOAD SENATOR OVERLAY ENDM MOVE SPACE 4,10 ** MOVE - MOVE DATA BLOCK. * * * MOVE COUNT,FROM,TO * ENTRY *COUNT* = WORD COUNT OF BLOCK TO BE MOVED. * *FROM* = ADDRESS OF FIRST WORD OF SOURCE BLOCK. * *TO* = ADDRESS OF FIRST WORD OF DESTINATION BLOCK. * CALLS MVE= (COMCMVE) PURGMAC MOVE MOVE MACRO C,F,T R= X1,C R= X2,F R= X3,T RJ =XMVE= ENDM MXX-X SPACE 4,20 ** MXX-X - SELECT LESSER (MINIMUM FUNCTION) OF TWO INTEGERS. * * THIS OPDEF COMPARES TWO INTEGERS IN *XJ* AND *XK*, AND * PLACES THE ALGEBRAICALLY LESSER VALUE IN *XI*. * * MXI XJ-XK * * ENTRY *XI* = RESULT REGISTER (CANNOT BE *XJ* OR *XK*). * *XJ* AND *XK* = COMPARISON REGISTERS. * * EXIT (X.LARGER) = 0. * (X.SMALLER) = UNCHANGED. * IF ON ENTRY (XJ)=(XK), * THEN ON EXIT (XJ)=0 AND (XK)=UNCHANGED. * (XI) = MIN(XJ,XK) * * USES B - NONE. * A - NONE. * X - *XI*, *XJ*, *XK*. PURGDEF MXX-X MXX-X OPDEF I,J,K IX.I X.J-X.K AX.I -1 BX.J X.I*X.J BX.K -X.I*X.K IX.I X.J+X.K MXX-X ENDM SPACE 4,10 ** PFERR - MACRO TO SET UP THE TABLE OF PF ERRORS. * * CODE IS GIVEN A *B* RADIX * * CODE PFERR (MESSAGE) MACRO PFERR,P1,P2 + VFD 42/_P1_B,18/=C=_P2_= ENDM PRINT SPACE 4,10 ** PRINT MACRO - WRITEC A LINE TO THE TERMINAL. * * PRINT MESSAGE,X * * CARRIAGE CONTROL IS ADDED BY THIS ROUTINE, IF NEEDED. * X - APPEND GIVEN CONTROL BYTE TO EOL. * * NOTE: NOS ASSEMBLIES ARE CODE OTHER (SEE *COMSTCM*) WITH THE * SINGLE QUOTE REDEFINED TO BE A ZERO CHARACTER. THIS ALLOWS * CODING WITH IAF CONTROL BYTES THAT IS INDEPENDANT OF THE * INSTALLING SITE'S CHARACTER SET. THIS DISALLOWS, AMONG OTHER * THINGS, USING A SINGLE QUOTE IN A *PRINT* MACRO. PRINT MACRO P1,P2 IFNOSBE WRITEC O,(=C= _P1_=) ELSE 2 .2 IFC EQ,*P2** WRITEC O,(=C=_P1_=) .2 ELSE * ADD A BLANK IF CONTROL BYTE NOT ON BYTE BOUNDARY. .A MICRO 1,,=P1= .B MICCNT .A .C SET .B/2*2 .3 IFNE .C,.B,1 .A MICRO 1,,=".A"'= APPEND ZERO CHARACTER WRITEC O,(=C=".A""P2"=) .2 ENDIF .1 ENDIF ENDM PRINTC SPACE 4,10 ** PRINTC - WRITE A CODED LINE TO THE TERMINAL. * * PRINTC ADDR PRINTC MACRO P1 WRITEC O,P1 PRINTC ENDM PRINTS SPACE 4,10 ** PRINTS MACRO - WRITE A STRING TO THE TERMINAL. * * PRINTS ADDR,LEN * * THE CALLER MUST SUPPLY CARRIAGE CONTROL HERE. KRONOS * INSTALLATIONS SIMPLY IGNORE IT. PRINTS MACRO P1,P2 IFNOSBE WRITES O,P1,P2 ELSE 1 WRITES O,P1+1,P2-1 ENDM STRLEN SPACE 4,10 ** STRLEN MACRO - FIND PACKED LENGTH OF A STRING. * * STRLEN P1 * * P1 - REGISTER CONTAINING THE LENGTH OF THE STRING * * EXIT X6 HAS PACKED LENGTH * * USES B 7 * X 2,3,6 * * CALLS NONE STRLEN MACRO P1 R= X2,P1+9+2 PX2 X2 SA3 =10.0 FX6 X2/X3 UX6,B7 X6 LX6 B7 LENGTH OF TEXT LINE ENDM PVL SPACE 4,10 ** PVL - PRINT VALUE AND LABEL. * * PVL (LABEL) * * X1 HAS THE VALUE * * SEE *PVL* FOR DETAILS PVL MACRO P1 SA5 =C=_P1_= RJ PVL PRINT VALUE AND LABEL ENDM PRINT VALUE AND LABEL STAT SPACE 4,10 ** STAT MACRO - COLLECT BUFFERED I/O STATISTICS. * * STAT FET,ORD * * WHERE FET IS ADDRESS OF FILE TO CHECK * ORD - STATISTICS ORDINAL TO UPDATE * (1-4) * CALLS UBS STAT MACRO P1,P2 .1 IFNE STAT$,0 R= X1,P1 R= B7,P2 RJ UBS UPDATE BUFFER STATISTICS .1 ENDIF ENDM TABLE SPACE 4,10 ** TABLE - SET UP A TABLE. * * P1 TABLE P2 * * GENERATES THE DATA WORD * *+ VFD 42/0L_P1,18/P2 MACRO TABLE,P1,P2 + VFD 42/0L_P1,18/P2 ENDM TREAD SPACE 4,10 ** TREAD MACRO - READ A LINE FROM TTY. * * READS A LINE INTO (IN), SETS (INC) AND (INL). * * EXIT X1 HAS COMDECK READ RETURN CODE * * USES ALL. * * CALLS RDS=, WTS= TREAD MACRO RJ RIL READ INPUT LINE ENDM READ INPUT LINE UPC SPACE 4,10 ** UPC - UNPACK CHARACTERS. * * UP TO 10 PACKED CHARACTERS WILL BE MOVED TO THE INDICATED * STRING BUFFER. * * UPC ADDR,STRING * * ADDR = ADDRESS OF R1 BUFFER. * STRING = 1 TO 10 CHARACTERS (OR REGISTER). * * CALLS *UTS*. UPC MACRO ADDR,STRING R= B7,ADDR SET FWA OF STRING BUFFER .1 IF REG,_STRING_ .2 IFC NE,/_STRING_/X1/,1 R= X1,STRING .1 ELSE .A MICRO 1,,/_STRING_/ .B MICCNT .A .B DECMIC .B SA1 =".B"L_STRING_ .1 ENDIF RJ UTS UNPACK TEXT STRING UPC ENDM WRITEA SPACE 4,10 ** WRITEA - ASCII WRITE. * * WRITEA FET,(STRING) * * SEE *ASCII* MACRO FOR DESCRIPTION OF *STRING* WRITEA MACRO P1,P2 LOCAL L1,L2 USE WRITEA L1 ASCII (_P2_) L2 BSS 0 USE * * SC IFNOSBE WRITER O,,RCL R= X2,P1 R= B6,L1 R= B7,L2-L1 RJ WTA WRITE ASCII SC ELSE 1 WRITEW O,L1,L2-L1 ENDM SPACE 4,10 QUAL SCP QUAL * QUAL READY QUAL * QUAL UTL QUAL * QUAL CCC QUAL * QUAL EDIT QUAL * QUAL HELP QUAL * SPACE 4 LIST X *CALL COMCPTM *CALL,COMSSEN SPACE 4,10 COMSRPV SPACE 4,8 OSRPV IFNOSBE IF NOS/BE, CREATE COMSRPV DEFINITIONS COMSRPV CTEXT COMSRPV - REPRIEVE (EXTENDED) DEFINITIONS FOR NOS/BE. COMSRPV SPACE 4,8 **** COMSRPV - NOS/BE EXTENDED REPRIEVE DEFINITIONS. * * S. O. LIDIE. 12/28/82. * * DEFINE *RPVBLK* MACRO WHICH ALLOCATES THE EXTENDED REPRIEVE * PARAMETER BLOCK AND THE EXCHANGE PACKAGE AREA. VARIOUS * MASK VALUES AND ERROR CODES ARE DEFINED AS WELL. THESE * DEFINITIONS ARE THE MINIMUM REQUIRED FOR NOS COMPATABILITY. RPVBLK SPACE 4,8 ** RPVBLK - SETUP EXTENDED REPRIEVE PARAMETER BLOCK. * * TAG RPVBLK XFER,XJP,CHKLWA * * TAG = SYMBOL FOR ADDRESS OF PARAMETER BLOCK. * XFER = ADDRESS OF ERROR PROCESSING ROUTINE (TRANSFER * ADDRESS). * XJP = SYMBOL FOR ADDRESS OF EXCHANGE PACKAGE WITHIN * PARAMETER BLOCK (OPTIONAL). * CHKLWA = CHECKSUM LAST WORD ADDRESS (OPTIONAL). PURGMAC RPVBLK RPVBLK MACRO P1,P2,P3 + VFD 36/0,12/31B,1/0,10/**,1/0 VFD 30/_P3,30/_P1 VFD 60/0 VFD 24/**,24/0,12/0 VFD 60/0 VFD 60/0 VFD 60/0 VFD 48/0,12/0 VFD 42/0,18/0 P2 BSS 20B RPVBLK ENDM COMSRPV SPACE 4,8 BASE O QUAL COMSRPV COMSRPV SPACE 4,10 ** EXTENDED REPRIEVE PARAMETER BLOCK OFFSETS. LNTH EQU 0 LENGTH FUNC EQU 0 FUNCTION CKLW EQU 1 CHECKSUM LWA TADD EQU 1 TRANSFER ADDRESS CKSM EQU 2 CHECKSUM RETURNED BY *RPV* NMSK EQU 3 NEW REPRIEVE MASK ERCL EQU 3 ERROR CLASS ERCD EQU 3 ERROR CODE RETURNED BY *RPV* PINT EQU 4 PENDING INTERRUPTS PRAR EQU 5 PENDING RA+1 REQUEST ITIO EQU 6 INTERRUPTED TERMINAL I/O OSEF EQU 7 OPERATING SYSTEM ERROR FLAG COMSRPV SPACE 4,10 ** REPRIEVE BIT MASKS FOR SETUP CALL TO *RPV*. EEMS EQU 1 ERROR EXIT MASK (CPU MODE ERROR) PCMS EQU 2 PPU CALL ERROR MASK SRMS EQU 4 SRU LIMIT (CPU TIME, I/O TIME, RMS LIMIT) OTMS EQU 10 OPERATOR TERMINATION (DROP, KILL, RERUN) PPMS EQU 20 PPU ABORT MASK (ALSO ECS PARITY ERROR) CPMS EQU 40 CPU ABORT MASK NTMS EQU 100 NORMAL TERMINATION MASK TIMS EQU 200 TERMINAL INTERRUPT MASK (USER ABORT) COMSRPV SPACE 4,10 ** ERROR CODES RETURNED BY *RPV*. NTEC EQU 0 NORMAL TERMINATION ERROR CODE TLEC EQU 1 TIME LIMIT ERROR CODE EEEC EQU 2 ERROR EXIT ERROR CODE (CPU MODE ERROR) PPEC EQU 3 PPU ABORT ERROR CODE CPEC EQU 4 CPU ABORT ERROR CODE PCEC EQU 5 PPU CALL ERROR ERROR CODE ODEC EQU 6 OPERATOR DROP ERROR CODE OKEC EQU 7 OPERATOR KILL ERROR CODE RREC EQU 10 OPERATOR RERUN ERROR CODE ECEC EQU 12 ECS PARITY ERROR ERROR CODE MLEC EQU 17 MASS STORAGE LIMIT ERROR CODE SREC EQU 21 I/O LIMIT ERROR CODE TIEC EQU 40 TERMINAL INTERRRUPT ERROR CODE (USER ABORT) COMSRPV SPACE 4,10 QUAL * BASE * ENDX OSRPV ENDIF END OF NOS/BE COMSRPV DEFINITIONS LIST * TITLE SYSTEM DEFINITIONS. ** SYST MACRO - DEFINE ENTRIES IN *SYST*. * * THIS MACRO SETS UP THE SYSTEM TABLE (*SYST*). * * SYS SYST T,CFL,EFL,TCH,(T1,T2,...,TN),LLC * * WHERE T IS THE SYSTEM TYPE - * F - FORTRAN * B - BASIC * A - ASSEMBLER * D - DATA * C - COBOL * P - PDP11 ASSEMBLER * S - SEQUENCED DATA * CFL - DEFAULT COMPILATION FIELD LENGTH * EFL - DEFAULT EXECUTION FIELD LENGTH * TCH - DEFAULT TAB CHARACTER * T1,T2,... - UP TO 13 TAB COLUMNS * LLC - LINE LENGTH CODE - * SL72 - 72 COLUMNS (DEFAULT) * SL80 - 80 COLUMNS * SL90 - 90 COLUMNS * SLMX - MAXIMUM MACRO SYST,P1,P2,P3,P4,P5,P6,P7 LOCAL L1,L2 L1 BSS 0 FORCE UPPER + VFD 42/0L_P1,18/SYT_P2 .1 IFC NE,$P3$$ + VFD 36/0L_P3,24/0 .1 ELSE 1 + VFD 60/1L0 .1 IFC NE,$P4$$ + VFD 36/0L_P4,24/0 .1 ELSE 1 + VFD 60/1L0 .1 IFC NE,$P5$$ + VFD 6/1L_P5,1/0,5/L2 .1 ELSE 1 + VFD 6/0,1/1,5/L2 * * INSERT THE TABS * N SET 0 NUMBER OF TABS * IRP P6 VFD 8/P6 N SET N+1 IRP * L2 EQU N ERRPL L2-13-1 * .2 DUP 13-L2,1 FILL OUT THE TAB COLUMNS VFD 8/0 * VFD 4/P7 SYSTEM LINE LENGTH CODE * .A MICRO 1,3,$P1$ S".A" SET SYSN SYSN SET SYSN+1 NUMBER OF SYSTEMS ENDM SYT SPACE 4,10 ORG 104B ** SYT - TABLE OF SYSTEM TYPES SYT BSS 0 SYSN SET 0 NUMBER OF SYSTEMS LOC 0 SYTA BSS 1 ASSEMBLER SYTB BSS 1 BASIC SYTC BSS 1 COBOL SYTD BSS 1 DATA SYTF BSS 1 FORTRAN SYTP BSS 1 PDP-11 ASSEMBLER SYTS BSS 1 SEQUENCED DATA LOC *O ORG SYT SYSL SPACE 4,10 ** SYSL - TABLE OF LINE LENGTHS. * * THIS IS A TABLE OF MAXIMUM TEXT LENGTHS FOR VARIOUS * SYSTEMS. SYSL BSS 0 LOC 0 SL72 CON 72 (MUST BE FIRST) SL80 CON 80 SL90 CON 90 SLMX CON N.LINE LOC *O SYST SPACE 4,10 ** SYST - TABLE OF SYSTEMS. * * EACH ENTRY HAS THE FOLLOWING FORMAT - * **T 42/ SYSTEM NAME,18/ SYSTEM TYPE **T 36/COMPILATION FL,24/0 **T 36/EXECUITON FL,24/0 **T 6/TABCH,1/T,5/NTAB,8/T1,8/T2,8/T3,8/T4,8/T5,8/T6 **T 8/T7,8/T8,8/T9,8/T10,8/T11,8/T12,8/T13,4/LLC SYST BSS 0 * SYSTEMS THAT SHOULD BE AVAILABLE AT ALL SITES. NONE SYST D NULL SYSTEM, MUST BE FIRST FORTRAN SYST F,,,(;),(7,11,18,30,36,45,55) BASIC SYST B,,,(^),,SLMX DATA SYST D,,,(;),,SLMX SDATA SYST S,,,(;) COMPASS SYST A,,,(;),(2,11,18,30,36,45,55) S80 SYST S,,,(;),,SL80 USA SYST A,,,(;),(2,11,18,30,36,45,55) USD SYST D,,,(;),,SLMX USF SYST F,,,(;),(7,10,13,16,19,22,25,28,31,34) USP SYST S,50000,,(\),(3,5,7,9,11,13,15,17,19,21,23,25,27) USS SYST S,,,(;),,SL80 FTN5 SYST F,,,(;),(7,10,13,16,19,22,25,28,31,34) COBOL SYST C,,,(;),(12,16,20,40,56) PDP SYST P,,,(/),(1,9,17,33,55,72) SYMPL SYST S,,,(/),(4,7,10,13,16,19,22,25,28,31,34,37,40) PASCAL SYST S,50000,,(\),(3,5,7,9,11,13,15,17,19,21,23,25,27) ALGOL SYST S,,,(/),(4,7,10,13,16,19,22,25,28,31,34,37,40) SNOBOL SYST S,,,(;),(10,50,60) IFNOSBE 1 SCOPE SYST D,,,(;),,SLMX * INSERT LOCAL SYSTEMS HERE. SYSTL EQU *-SYST LENGTH OF SYSTEMS TABLE TITLE GLOBAL VARIABLES. ** GLOBAL VARIABLES. ** FETS. I BSS 0 "IFILE" FILEC BUFI,LBUFI,(FET=6) O BSS 0 "OFILE" FILEC BUFO,LBUFO,(FET=6) S BSS 0 "SFILE" FILEC BUFS,LBUFS,(FET=8) T BSS 0 "TFILE" RFILEB BUFT,LBUFT,(FET=8) C BSS 0 "CFILE" FILEB SENCHK,(ENDSEN-SENCHK),(FET=6) ** BUFFERS. BUFI BSS LBUFI BUFO BSS LBUFO BUFS BSS LBUFS BUFT BSS LBUFT BUFE BSS 0 END OF BUFFER AREA ** INSERT COPYRIGHT IN BUFFER. ORG BUFI DATA C* COPYRIGHT (C) 1983 LEHIGH UNIVERSITY.* DATA C* ALL RIGHTS RESERVED. * ORG BUFE ** STRING BUFFERS. INCC DATA 1R CARRIAGE CONTROL, SOMETIMES IN BSS N.LINE+1 INPUT LINE (+1 FOR USE BY *ROS*) INC BSS 1 COLUMN OF NEXT CHARACTER IN *IN* INL BSS 1 LAST COLUMN OF TEXT IN *IN* JNCC DATA 1R CARRIAGE CONTROL, SOMETIMES JN BSS N.LINE+7 SCRATCH TEXT LINE JNC BSS 1 COLUMN OF NEXT CHARACTER IN *JN* JNL BSS 1 LAST COLUMN OF TEXT IN *JN* HNC EQU BUFS FIRST SCRATCH STRING HNL EQU HNC+1 HN EQU HNL+1 KNC EQU HN+N.LINE SECOND SCRATCH STRING KNL EQU KNC+1 KN EQU KNL+1 ERRNG LBUFS-N.LINE-N.LINE-4 TOO SMALL FOR SCRATCH STRINGS LN BSS 1 LINE NUMBER TLNR SPACE 4,10 ** TLNR - TABLE OF LINE NUMBER RANGES. * * THIS TABLE IS USED WHEN RANGES OF LINES ARE SPECIFIED FOR * A COMMAND. THE COMMAND CALLS *GLR* TO GET A LINE NUMBER * RANGE, AND PLACES THE ENTRY IN THIS TABLE. TO GET A LINE, * THE COMMAND CALLS *NLR* TO GET NEXT LINE IN RANGE. THIS * TABLE HAS THE FOLLOWING FORMAT: * **T 1/F,11/,24/ FROM,24/ TO * * WHERE F IS SET IF THE RANGE IS BACKWARDS * FROM IS THE STARTING LINE NUMBER * TO IS THE FINAL LINE NUMBER * * *FROM* AND *TO* MAY BE THE SAME LINE NUMBER. TLNR BSS N.LNR TLNRL BSS 1 LENGTH OF LNR OR ZERO IF DEFAULT A-Z TLNRP BSS 1 ORDINAL OF CURRENT ENTRY TABLES SPACE 4,10 ** MAJOR SENATOR TABLES. * * FOR SIMPLICITY, THE MAJOR SENATOR TABLES ARE DESCRIBED * HERE. SOME OF THESE TABLES ACTUALLY OCCUR IN THE CHECK- * POINT PACKAGE AT THE END OF THE LISTING. TTPT SPACE 2,10 ** TTPT - TEXT POINTER TABLE. * * THIS DYNAMICALLY ALLOCATED TABLE CONTAINS ONE ENTRY PER LINE * OF TEXT IN THE CURRENT FILE. AN ENTRY HAS THE FOLLOWING * FORMAT: * **T 12/FREE,24/DISK ADDR,1/RESERVED,1/EPNT,1/MARK,21/LINE NUMBER * * FREE = AVAILABLE FOR USE BY ANY COMMAND PROCESSOR. * DISK ADDR = DISK ADDRESS (ON "TFILE") OF TEXT LINE. * RESERVED = RESERVED FOR BC AND SOL. * EPNT = SET FOR LINE POINTED TO BY EDIT POINTER WHEN * EDIT OVERLAY LAST ACTIVE. SEE *FCL* IN EDIT. * MARK = 0/1 IF LINE IS UNMARKED/MARKED. * LINE NO. = LINE NUMBER OF TEXT LINE. * * LIMITS: * * 0 <= LINE NUMBER <= 999999 * DISK ADDRESS: 18/PRU NUMBER, 6/ORDINAL IN PRU * PRU NUMBER STARTS AT 1 * ORDINAL RANGES FROM 1 TO 77B * ZERO WORD INDICATES DELETED ENTRY * * THE FOLLOWING DATA WORDS RELATE TO PROCESSING THIS TABLE. * * FREE NUMBER OF FREE WORDS IN TTPT * LAST ADDRESS OF LAST ENTRY USED OR 0 * TTPTE _ END OF TTPT TIN SPACE 2,5 ** TEXT BUFFERS (TIN1, TIN2, TOUT). * * TEXT IS STORED ON DISK. HOWEVER, THERE MAY BE * TEXT ON THE WAY OUT TO THE DISK, OR ACCESSED FROM * THE DISK. THIS TEXT RESIDES ON ONE OF THREE BUFFERS. * * TEXT IS ALWAYS HANDLED IN PRU BLOCKS. THEREFORE, * LINES ARE NOT WRITTEN OUT TO TEXT ONE-AT-A-TIME. IN- * STEAD, TEXT LINES ARE ACCUMULATED IN (TOUT) (SEE *WOT*) * UNTIL A PRU IS COLLECTED, AND THE PRU IS WRITTEN TO * DISK, AT THE END OF THE FILE. A LINE MUST RESIDE IN * ONLY ONE PRU, IT MAY NOT RUN OVER PRU BOUNDARIES. * THE TOP BYTE OF THE FIRST WORD OF THE LINE HAS THE LENGTH * OF THE REST OF THE LINE IN CHARACTERS. THIS MEANS THAT THE * TEXT READ AND WRITE ROUTINES (*ROT* AND *WOT*) DO NOT * CONCERN THEMSELVES WITH PROBLEMS OF ZERO CHARACTERS * AND STANDARD LINE FORMATS. THEY WRITE AND READ EXACTLY * THE SAME CHARACTERS. * * AS A PROCESSING/HARDWARE CHECK, THE FIRST WORD OF * THE PRU IS THE PRU NUMBER. THIS SERVES TO CHECK THE * LOGIC OF THE TEXT HANDLING ROUTINES AND THE INTEGRITY * OF THE TEXT FILE. * * TEXT IS ALWAYS READ INTO (TIN1), THE PRINCIPLE TEXT * WORKING STORAGE AREA. (TIN2) STORES THE PRU READ BEFORE * THE LATEST PRU. THIS SCHEME REDUCES DISK ACCESSES WHEN * LINES IN A PORTION OF A FILE RESIDE ON TWO SEPARATE * PRUS FAR REMOVED FROM EACH OTHER. THIS SITUATION IS * COMMON WHERE CORRECTIONS ARE MADE TO A FILE, SINCE THE * CORRECTIONS ARE WRITTEN TO THE END OF THE TEXT FILE, * NOT WHERE THE PRE-CORRECTED LINES RESIDE. WITHOUT * THIS SCHEME, WE WOULD FREQUENTLY SET READING ONE PRU, * THEN READ ANOTHER, THEN THE FIRST AGAIN, AND SO ON, * REALLY BANGING THE DAYLIGHTS OUT OF THE DISK AND * INCREASING RESPONSE TIME. * * THE 3-WORD TABLE *PRUS* CONTAINS THE PRU SITTING * IN EACH OF THE THREE TEXT BUFFERS. SINCE PRU NUMBERS * MUST START WITH 1, A 0 ENTRY INDICATES THAT THE BUFFER * IS EMPTY. * * CARE MUST BE TAKEN IN WRITING/CORRECTING THE TEXT * HANDLING CODE BECAUSE A USER CAN ABORT AT ANY TIME, * LEAVING SPURIOUS OR INACCURATE POINTERS. BE EXTRA * CAREFUL WITH SUCH SITUATIONS - THE CODE IS HARD TO TEST. PRUS CON 0,0,0 TIN1 BSS 100B LATEST PRU READ TIN2 BSS 100B PRU BEFORE THAT TOUT BSS 100B OUTPUT PRU TWRD DATA 0 ORDINAL OF NEXT LINE IN PRU FT SPACE 2,10 ** FIT - FILE INFORMATION TABLE. * * THIS TABLE CONTAINS INFORMATION CONCERNING A FILE. * THERE ARE THREE PLACES WHERE THIS TABLE MAY BE FOUND ... * * 1) IN THE CHECKPOINT PACKAGE. CONTAINS THE * INFORMATION ABOUT THE CURRENT FILE. * 2) IN THE *SENINFO* RECORD ON FILES WRITTEN * WHILE THE *SAVE* OPTION IS SELECTED. * 3) IMMEDIATELY BELOW. THIS IS TEMPORARY INFORMATION * ASSEMBLED BY *GFI*. * * THE *FIT* HAS THE FOLLOWING FORMAT - * **T VFST 42/ FILE NAME,18/SYS ORD **T VTTT 6/TABCH,1/T,5/NTAB,8/T1,8/T2,8/T3,8/T48/T5,8/T6 **T 8/T7,8/T8,8/T9,8/T10,8/T11,8/T12,8/T13,4/ **T VBFT 42/BINARY FILE NAME, 18/UNUSED. **T VFLT 36/CFL,24/0 **T 36/EFL,24/0 **T VSTT 42/STEXT,18/UNUSED **T VGTT 42/GTEXT,18/UNUSED **T VLIT 42/LIBRARY,18/UNUSED **T VLOT 42/ *LOAD* FILE,18 UNUSED **T VCLT 42/ *COPYL* FILE, 18/UNUSED **T VBIT 42/RESERVED,18/BITS **T VCPT 60/ COMPILE **T 60/ TIME **T 60/ PARAMETERS **T 60/ **T 60/ **T VEPT 60/ EXECUTION **T 60/ TIME **T 60/ PARAMETERS **T 60/ **T 60/ **T 60/SPARE **T 60/SPARE * * WHERE FILE NAME - JUST WHAT IT SAYS * SYS ORD - SYSTEM ORDINAL * TABCH - TAB CHARACTER * T - SET IF NO TAB CHARACTER * NTAB - NUMBER OF TAB COLUMNS (0-13) * T1,T2,...,T13 - TAB COLUMNS * CFL - COMPILATION FIELD LENGTH OR ZERO * EFL - EXECUTION FIELD LENGTH OR ZERO * STEXT - SYSTEMS TEXT * GTEXT - *G* SYSTEMS TEXT * LIBRARY - COMPILATION/EXECUTION LIBRARY * LOAD FILE - FILE TO BE LOADED WITH THIS FILE * COPYL - FILE THIS FILE IS TO BE COPYL-ED TO * BITS - * B0 - UAT FLAG * COMPILE TIME PARAMETERS - TEXT ADDED TO COMPILE CARD * EXECUTION TIME PARAMETERS - DITTO FOR THE EXECUTE * * * ANY UNKNOWN FIELD IS ZERO. IF THERE IS NO ENTRY * IN A SLOT IN THE FT, THE FILE NAME AND SYSTEM IS * ZERO. SPACE 2,5 BSS 1 ROOM FOR FILE TABLE HEADER TFIT BSS 0 FILE TABLE ENTRY LOC 0 VFST BSS 1 VTTT BSS 1 BSS 1 VBFT BSS 1 VFLT BSS 1 BSS 1 VSTT BSS 1 VGTT BSS 1 VLIT BSS 1 VLOT BSS 1 VCLT BSS 1 VBIT BSS 1 VCPT BSS 5 VEPT BSS 5 BSS 10B SPARE FITL BSS 0 LOC *O FILE SPACE 2,5 ** DATA STRUCTURE OF THE CURRENT FILE. * * THE DATA STRUCTURE OF THE CURRENT FILE CONSISTS OF * THE TEXT POINTER TABLE (TPT) AND THE DIRECT ACCESS DISK * FILE. THE TPT RESIDES IN CORE AND CONTAINS ONE ONE-WORD * ENTRY PER ACTIVE LINE IN THE CURRENT FILE. THE TEXT * RESIDES ON DISK OR IN ONE OF THE TEXT I/O BUFFERS OR * WORKING STORAGE AREAS. * * THE TPT CONTAINS THE STARTING WORD OF THE LINE ON DISK. * THE TEXT ON DISK IS HANDLED IN PRU BLOCKS. THERE ARE NO * FILE OR RECORD MARKS AND A LINE MAY NOT CROSS PRU BOUNDARIES. * * THE LINE IS STORED ON DISK IN PACKED (L) FORM. * A BYTE CONTAINING THE LENGTH OF THE LINE IN CHARACTERS PRECEDE * THE TEXT. COMMON SPACE 4,10 ** COMMON - COMMON STORAGE BETWEEN OVERLAYS. * * THESE DATA WORDS ARE USED FOR INTER-OVERLAY COMMUNICATION. * THEY CONTAIN SUCH VALUES AS COMMAND ORDINALS, FILE NAMES, ETC. COMMON BSS 3 FILE SPACE 2,5 ** THE TEXT FILE - WRITE AND READ MODE. * * SINCE WE USE THE SAME FET AND BUFFER FOR READING AND * WRITING TO THE TEXT FILE, WE HAVE TO DO SOME STUFF WHEN * SWITCHING BETWEEN THESE TWO MODES (SEE *SRM* AND *SWM*). * *READ* IS THE FLAG INDICATING THAT WE ARE CURRENTLY READING * FROM THE TEXT FILE. THE FLAG HAS 3 SETTINGS: * * =0 WRITE MODE - THE BUFFER MAY CONTAIN TEXT GOING OUT * TO THE END OF THE TEXT FILE. * =1 START READ MODE - READ MODE IS JUST STARTING. THE * BUFFER IS EMPTY AND THE FILE POSITION IS UNKNOWN. * ONLY RANDOM READS ARE PERMITTED (SEE *ROT*) * >1 CONTINUE READ MODE - SEQUENTIAL READS ARE PERMITTED. * (PRUS+0) CONTAIN THE NUMBER OF THE LAST PRU * TRANSFERRED. READ DATA 1 SPACE 4,10 * THE FOLLOWING WORDS ARE VERY TEMPORARY AND ARE * STORED IN THE FIRST 100 WORDS OF CORE... RT1 EQU 50B STARTING REAL TIME RT2 EQU RT1+1 ENDING REAL TIME SPACE 4,10 ** 0,0 GLOBAL VARIABLES. * * THESE VALUES ARE SET MOSTLY BY *GFI* AND USED MOSTLY BY *PFM*. * THEY ARE THE FILE INFORMATION FOR THE LAST FILE NAME INPUTTED, * OR FOR OTHER *PFM* ACTIONS. NLFN BSS 1 NEW FILE NAME NSYO BSS 1 NEW SYSTEM ORDINAL NFTY BSS 1 DESIRED FILE TYPE NUSN BSS 1 DESIRED USER NUMBER (GETS/ATTACHES ONLY) NPKN BSS 1 DESIRED PACK NAME NRES BSS 1 CURRENT RESIDENCY SPACE 4,10 TITLE 0,0 OVERLAY - SUBROUTINES. ATL SPACE 4,10 ** ATL - ADD TEXT LINE. * * ATL ADDS A LINE OF TEXT TO THE CURRENT FILE. * * ENTRY (LN) IS THE LINE NUMBER * (ATLA) IS SQUEEZE FLAG (=1 IF SET) * (B7) HAS THE LINE IMAGE (R1 FORMAT) * X2 = LINE LENGTH * (X1) = VFD 12/FREE,24/0,2/0,1/MARK,21/0 * * (B7) = 0 IMPLIES DISK ADDRESS SUPPLIED. * (X2) = DISK ADDRESS FOR NEW *TTPT* ENTRY. OTHER ENTRY * CONDITIONS REMAIN THE SAME. * (ATLZ) HAS UAT BITS (IF IP.UAT) * * EXIT B7 = 0 IF LINE@ENTERED, ELSE =1 * (ATLC) - ORDINAL OF NEW LINE * (ATLZ) ZEROED (IF IP.UAT) * * USES ALL * * CALLS WOT, MVE=, LTP, PRINT, IFL ATL SUBR BX6 X1 SAVE FREE/MARK INFORMATION SA6 ATLF ZR B7,ATL2 IF DISK ADDRESS SUPPLIED (SEE DUP/MOVE) BX6 X6-X6 SA6 ATLD FLAG -NO ADDRESS SUPPLIED- SX6 B7 SA6 WOTB SB6 X2 LENGTH OF LINE SB7 B7-B1 SUBTRACT ONE FOR COLUMN ADDITIONS * DELETE TRAILING BLANKS FROM THE LINE NZ B6,ATL1 IF LINE NOT ZERO LENGTH SX6 1R ZERO LENGTH LINE, SET TO 1 SA6 B7+B1 SB6 B1 EQ ATL3 ATL1 LE B6,B1,ATL3 IF FIRST COLUMN SA1 B7+B6 SX0 X1-1R NZ X0,ATL3 IF NON-BLANK SB6 B6-B1 EQ ATL1 ATL2 BSS 0 BX6 X2 SA6 ATLD SAVE DISK ADDRESS ATL3 SX6 B6 SA6 WOTC SA1 LN FIND THE LINE RJ LTP LOCATE TEXT POINTER SX7 B7 SA7 ATLB SAVE RETURN CODE SA6 ATLC SAVE LINE ORDINAL NZ X7,ATL9 IF NOT FOUND * THE LINE ALREADY EXISTS. SQUEEZE OR REPLACE. SA1 ATLA NZ X1,ATL5 IF SQUEEZE, NO REPLACE SA1 ATLD BX6 X1 NZ X6,ATL4 IF DISK ADDRESS ALREADY KNOWN RJ WOT WRITE OUT TEXT ATL4 BSS 0 SA1 LN FORM NEW TTPT ENTRY LX6 24 BX6 X6+X1 SA1 ATLF BX6 X6+X1 ADD *FREE* FIELD SA1 ATLC SA6 X1+TTPT SB7 B0 LINE CHANGED, EXIT EQ ATLX * MUST SQUEEZE THE LINE ATL5 SA4 ATLC GET ORDINAL SA3 LN GET LINE NUMBER SA2 TTPTE GET END OF TTPT MX0 -21 ATL6 SA5 X4+TTPT GET TTPT ENTRY ZR X5,ATL7 IF ZERO ENTRY BX1 -X0*X5 IX3 X1-X3 NZ X3,ATL8 IF NO MORE SQUEEZING SX3 B1 INCREMENT IT LINE NUMBER IX3 X3+X1 SA1 =1000000D IX6 X3-X1 PL X6,ATL19 IF LINE NUMBER TOO LONG BX6 X0*X5 BX6 X6+X3 CHANGE ENTRY SA6 A5 ATL7 IX1 X2-X4 ZR X1,ATL8 IF END OF TTPT SX4 X4+B1 EQ ATL6 ATL8 SX6 -B1 SQUEEZED, CHANGE TO INSERT SA6 ATLB NEW RETURN CODE FOR LTP * THE LINE MUST BE INSERTED. SEE IF THERE IS ROOM IN CORE. ATL9 SA1 FREE NZ X1,ATL10 IF ROOM IN CORE SX6 D.FL RJ IFL INCREMENT FIELD LENGTH PL X0,ATL18 IF NO MORE MEMORY * ROOM IN CORE. WRITE THE LINE ATL10 BSS 0 SA1 ATLD NZ X1,ATL11 IF DISK ADDRESS SUPPLIED RJ WOT WRITE ONE TEXT LINE SA6 ATLD SAVE PARTIAL TTPT ENTRY * NOW WE HAVE TO PLACE THE NEW TTPT ENPRY IN ITS TABLE. EXCEPT * FOR THE END-OF-FILE CASE, ATLC IS THE ENTRY WE MUST PLACE THE * THE LINE BEFORE. ESSENTIALLY, WE SIMPLY LOOOK THROUGH THE * FILE FOR A ZERO ENTRY. IF THERE IS ONE, MAKE ROOM FOR * THE NEW ENTRY. WE CHECK UP THE FILE FIRST, THEN DOWN. ATL11 BSS 0 SA5 ATLC SA1 ATLB SX0 X1-2 ZR X0,ATL13 IF ENTRY IS AT EOF * SEE IF THE FILE IS ALL PACKED UP, ELIMINATING THE NEED * FOR SEARCHING UP AND DOWN THE FILE FOR A HOLE. SA4 TTPTE CHECK FOR HOLES SA3 FREE IX0 X3+X4 SX0 X0+TTPT+1+6 SA2 FL IX6 X2-X0 ZR X6,ATL16 IF NO HOLES, DON-T BOTHER * SEARCH BACKWARD FOR A ZERO ENTRY ATL12 SX5 X5-1 NG X5,ATL14 IF NO PRECEDING ZERO SA1 X5+TTPT NZ X1,ATL12 IF NOT ZERO ENTRX * FOUND A ZERO. SHIFT THE FILE DOWN SA1 ATLC IX1 X1-X5 MOVE X1-1,X5+1+TTPT,X5+TTPT SA1 ATLC MARK WHERE-TO-PUT-THE-ENTRY SX6 X1-1 SA6 A1 EQ ATL17 * LINE IS AFTER EOF. WE ARE GUARENTEED THAT THERE IS CORE FOR * THE LINE FROM THE MACHINATIONS EARLIER IN THIS ROUTINE. ATL13 SX6 X5+B1 SA6 A5 SA1 TTPTE IX0 X1-X6 PL X0,ATL17 IF NOT PAST TTPTE SX6 X1+B1 SA6 A1 INCREMENT TTPTE EQ ATL17 * NO SPACE UP THE FILE, TRY DOWN THE FILE. ATL14 SA4 TTPTE SA5 ATLC ATL15 SX5 X5+B1 TRY NEXT ENTRY IX0 X4-X5 NG X0,ATL16 IF EOF SA1 X5+TTPT NZ X1,ATL15 IF NOT A ZERO SA4 ATLC MOVE THEM UP IX1 X5-X4 MOVE X1,X4+TTPT,X4+TTPT+1 EQ ATL17 * NO SPACE ABOVE, MOVE THE REST OF THE FILE DOWN. ATL16 SX6 X4+B1 SA6 A4 SA5 ATLC IX1 X6-X5 MOVE X1,TTPT+X5,TTPT+X5+1 * OK, (ATLC) _ A USEABLE SPACE, ADD IT. ATL17 SA1 LN FORM TTPT ENTRY SA2 ATLD LX2 24 BX6 X1+X2 SA1 ATLF BX6 X6+X1 ADD *FREE* FIELD SA1 ATLC SA6 X1+TTPT SA1 FREE DECREMENT FREE SPACE SX6 X1-1 SA6 A1 SB7 B0 SA1 LEN SX6 X1+B1 SA6 A1 EQ ATLX EXIT ATL18 PRINT (CURRENT FILE FULL, LINE IGNORED) SB7 B1 EQ ATLX EXIT ATL19 PRINT (SQUEEZED LINE NUMBER TOO LARGE) SB7 B1 EQ ATLX ATLA BSS 1 SQUEEZE FLAG ATLB BSS 1 LTP RETURN CODE ATLC BSS 1 LINE ORDINAL ATLD BSS 1 DISK ADDRESS OF LINE (MAY BE USER SUPPLIED) ATLF BSS 1 *FREE* FIELD FOR NEW ENTRY BDL SPACE 4,10 ** BDL - BLANK DISPLAY LINE. * * THIS ROUTINE BLANKS THE N.LINE-CHARACTER DISPLAY * LINE STARTING AT (B7) * * ENTRY B7 = STARTING ADDRESS * * USES B 6,7 * A 6 * X 6 * * CALLS NONE BDL1 SA6 B7 SB7 B7+B1 LT B7,B6,BDL1 IF MORE TO BLANK BDL SUBR IF MORE TO BLANK SX6 1R SB6 B7+N.LINE EQ BDL1 ENTER LOOP CCF SPACE 4,10 IFGE DEBUG,1 ** CCF - CHECK CURRENT FILE (DEBUG). * * THIS ROUTINE ROOTS AROUND THE CURRENT FILE AND * ITS POINTERS TRYING TO FIND SOMETHING WRONG. ITS * PRINCIPLE TASK IS CHECKING THE *TPT*. THIS TABLE * IS SCANNED FOR ILLEGAL/OUT OF SEQUENCE LINE NUMBERS, * ILLEGAL DISK ADDRESSES, AND OTHER CONFUSION. THE * NUMBER OF ACTIVE LINES IS COMPARED WITH *LEN*. SOME * CHECKING OF *FREE* AND *FL* COULD BE PERFORMED, * THOUGH NOT YET. * * USES ALL * * CALLS NONE CCF SUBR SA4 LAST SA3 TTPTE NG X3,*+400000B IF BAD END POINTER NG X4,*+400000B IF BAD LAST IX0 X3-X4 NG X0,*+400000B IF LAST BEYOND EOF NG X1,*+400000B IF NEGATIVE LINE NUMBER SX4 -B1 LAST LINE NUMBER SB7 B0 ORDINAL OF CURRENT ENTRY SB6 B0 COUNT OF ACTIVE ENTRIES SB5 X3 CCF1 SA1 B7+TTPT CHECK AN ENTRY ZR X1,CCF2 IF ZERO ENTRY MX0 -21 CHECK LINE NUMBER BX2 -X0*X1 SA5 =1000000D IX5 X2-X5 PL X5,*+400000B IF TOO BIG IX5 X4-X2 PL X5,*+400000B IF OUT OF ORDER BX4 X2 BX2 X1 CHECK DISK ADDRESS LX2 -24 MX0 -24 BX2 -X0*X2 ZR X2,*+400000B IF ZERO ADDRESS AX2 6 CHECK RPU ZR X2,*+400000B IF ZERO PRU NUMBER SB6 B6+B1 COUNT THE ENTRY CCF2 EQ B7,B5,CCF3 IF END GT B7,B5,*+400000B IF NEVER SB7 B7+B1 EQ CCF1 CCF3 SA1 LEN SX0 B6 CHECK *LEN* IX2 X0-X1 NZ X2,*+400000B IF LENGTH NOT RIGHT * THIS IS A GOOD PLACE TO CHECK *FREE* EQ CCFX ENDIF CCT SPACE 4,10 ** CCT - CHECK CURRENT TIME. * * THIS ROUTINE CHECKS THE ALARM TIME AND, IF IT HAS * BEEN EXCEEDED, INFORMS THE USER. FURTHER, *CCT* ALSO * WARNS THE USER IF LESS THAN ONE CP SECOND REMAINS. * * ENTRY (FALA) = 6L HH.MM * * CALLS PRINT, SYS= * * USES ALL. CCT SUBR SA3 FALA ZR X3,CCTX IF ALARM NOT SET LX3 -24 CLOCK CCTA SA1 CCTA CHECK TIME OF DAY AX1 4*6 DROP SECONDS MX0 -6*6 BX1 -X0*X1 IX0 X1-X3 MI X0,CCTX IF NOT TIME FOR ALARM LX1 4*6 BX5 X1 PUTI JN SET PUT FWA PUTT (IT IS NOW),2 PUTF X5,1,6,B6 PUTZ WRITEA O,(?BEL??BEL??BEL??BEL??BEL??BEL??BEL?) PRINTC JN PRINT ( ) BX6 X6-X6 SA6 FALA CLEAR ALARM FLAG EQ CCTX CCTA BSS 1 *TIM* REPLY WORD CLL SPACE 4,10 ** CLL - CHECK LINE LENGTH. * * THIS ROUTINE CHECKS THE LENGTH ON A LINE AND COMPARES * IT WITH THE MAXIMUM LENGTH FOR THIS SYSTEM. * * * THIS ROUTINE ISSUES WARNINGS ONLY. THE REFORMATTING * ROUTINES MAKE SURE THE LINE IS NOT ILLEGALLY LONG * (GT N.LINE). * * ENTRY (B7) _ LENGTH OF THE LINE * (LN) HAS LINE NUMBER * * EXIT MESSAGE ISSUED IF NEEDED * * USES ALL * * CALLS WTO, WTC CLL SUBR SA1 SYS ZR X1,*+400000B IF NO SYSTEM SB2 X1 LX1 2 *4 SX1 X1+B2 *5 SA1 SYST+X1+4 GET LENGTH MX0 -4 BX1 -X0*X1 SA1 SYSL+X1 GET LENGTH BX7 X1 SA1 B7 IX1 X1-X7 NG X1,CLLX IF LT THE LIMIT ZR X1,CLLX IF EQ THE LIMIT RJ CDD CONVERT DECIMAL DIGITS SA1 CLLA+2 PUT IN LENGTH MX0 3*6 LX0 -12 BX1 -X0*X1 CLEAR AMOUNT LX6 30-0 BX6 X0*X6 BX6 X6+X1 SA6 A1 SA1 LN ADD LINE NUMBER RJ CDD CONVERT DECIMAL DIGITS MX0 2*6 LX6 6 BX6 -X0*X6 SA1 CLLA+1 BX1 X0*X1 BX6 X6+X1 SA6 A1 WRITEC O,CLLA PRINT ( ) EQ CLLX EXIT CLLA DIS ,* NOTE - LINE 123456 IS 77 CHARS TOO LONG* CPD SPACE 4,10 ** CPD - CHECK POINT DUMP. * * DUMPS THE CHECKPOINT PACKAGE TO OUR DISK FILE. * THIS ROUTINE IS GENERALLY CALLED JUST BEFORE WE EXIT SENATOR * SO ALL PERTINENT INFORMATION IS REMEMBERED. *USE* INFORMATION * IS ALSO KEPT ON THE CHECKPOINT FILE, WHICH IS USED BY *PUF* * DURING A RESTART TO POSITION THE USE FILE FOR FURTHER USING. * * ENTRY: NONE * * EXIT: FILE DUMPED * * USES: ALL. * * CALLS: CIO=, WTW= CPD SUBR RJ SWM SET WRITE MODE SA1 TWRD ZR X1,CPD1 IF NOTHING TO WRITE SX0 X1-1 ZR X0,CPD1 IF NOTHING TO WRITE TO DISK RJ WPD WRITE PRU TO DISK CPD1 RJ SRM SET READ MODE SA1 PRUS+2 NZ X1,CPD2 IF NOT ZERO SA1 NPRU CPD2 BSS 0 BX6 X1 SA6 NPRU SA1 FL SX6 X1+77B ENSURE FL IS A MULTIPLE OF 100B AX6 6 LX6 6 SA6 A1 SA1 C+1 SX7 X1 SA7 A1+B1 (IN) = FIRST SA7 A7+B1 (OUT) = FIRST SA6 A7+B1 (LIMIT) = FL REWIND C,R SA1 C+4 LIMIT SX6 X1-1 SA6 C+2 (IN) = FL - 1 WRITER C,R WRITER O,R FLUSH OUTPUT BUFFER EQ CPDX EXIT CPT SPACE 4,10 ** CPT - CONTRACT POINTER TABLE. * * IF IT WILL SAVE SOME FIELD LENGTH, THIS ROUTINE * CONTRACTS THE POINTER TABLE BY SQUEEZING OUT THE * ZEROED (DELETED) ENTRIES. * * USES ALL * * CALLS SYS CPT SUBR SB6 B0 B6 = CURRENT READ ORDINAL SB5 B0 CURRENT WRITE ORDINAL SA1 TTPTE SB4 X1 B4 = LAST READ ORDINAL CPT1 SA1 B6+TTPT ZR X1,CPT2 IF ZERO ENTRY, SKIP BX6 X1 SA6 B5+TTPT SB5 B5+B1 CPT2 SB6 B6+B1 LE B6,B4,CPT1 IF MORE TO MOVE BX6 X6-X6 SA6 B5+TTPT BX6 X6-X6 SA6 LAST SX6 B5 SA6 TTPTE SX6 B6-B5 SA1 FREE SX0 X6-200B NG X0,CPTX IF NOT TO MEM SX6 X0+100B COMPUTE FL DECR AX6 6 LX6 6 SA1 FREE IX7 X1-X6 SA7 A1 SA1 FL IX6 X1-X6 SA6 A1 NEW FL LX6 30 SA6 CPTA MEMORY CM,CPTA,R DECREASE MEMORY EQ CPTX EXIT CPTA BSS 1 MEM STATUS WORD CVT SPACE 4,10 ** CVT - CONVERT TYPE * * CONVERT THE DISPLAY-CODE FILE-TYPE IDENTIFIER * TO THE BIT PATTERN. * * ENTRY X1 = TYPE, *L* FORMAT * * EXIT X6 = BIT PATTERN OR -1 * (SEE *DFR* FOR BIT PATTERN) * * CALLS SLS CVT1 SX6 -1 ERROR CVT SUBR MX0 42 SB7 CVTA RJ SLS SEARCH LIST ZR X6,CVT1 IF NOT FOUND BX6 -X0*X6 EQ CVTX EXIT CVTA BSS 0 IFNOS CON 1LI+4B CON 1LD+2B CON 1LL+1B CON 1LP+6B ELSE CON 1LP+2B CON 1LL+1B ENDIF DATA 0 DEL SPACE 4,10 ** DEL - DELETE A LINE. * * THIS ROUTINE DELETES A SINGLE LINE FROM THE TPT. * THE APPROPRIATE COUNTERS ARE CHANGED APPROPRIATELY. * * ENTRY X1 = ORDINAL OF LINE TO DELETE (MUST NOT BE * ALREADY DELETED) * * USES A 1,6 * X 1,6 * * CALLS NONE DEL SUBR SA1 X1+TTPT ZR X1,*+400000B IF ALREADY DELETED BX6 X6-X6 SA6 A1 SA1 FREE CHANGE COUNTERS SX6 X1+B1 SA6 A1 SA1 LEN SX6 X1-1 SA6 A1 EQ DELX EXIT DFR SPACE 4,10 ** DFR - DETERMINE FILE RESIDENCY. * * THIS ROUTINE DETERMINES THELOCATION OF A GIVEN FILE. * * ENTRY X1 = FILE NAME * (NUSN) HAS USER NUMBER/PF ID * * EXIT (DFRA) HAS RESIDENCY BITS * (NUSN) = 0 IF (NUSN) = (IUN) * * DFRA 57/0,1/I,1/D,1/L * * I - INDIRECT ACCESS FILE * D - DIRECT ACCESS FILE * L - LOCAL FILE * * CALLS PFC, FNT * * USES ALL DFR SUBR IFNOS RJ PFC CHECK PERM FILE. SX6 B7+B7 SHIFT BITS OVER SA6 DFRA SA1 NUSN SA2 IUN BX6 X1-X2 NZ X6,DFR1 IF NUSN .NE. IUN SA6 A1 CLEAR NUSN DFR1 SA1 NLFN RJ FNT CHECK FNT-S SA1 DFRA ZR B7,DFRX EXIT IF NOT FOUND SX6 X1+B1 SET LOCAL BIT SA6 A1 EQ DFRX EXIT ELSE RJ FNT CHECK FNTS SX6 B7 SA6 DFRA EQ DFRX ENDIF DFRA BSS 1 RESIDENCY BITS DME SPACE 4,10 ** DME - DELETE MARKED ENTRIES. * * THIS ROUTINE DELETES ALL MARKED ENTRIES IN THE TTPT. * AN ENTRY IS CONSIDERED MARKED IF THE SIGN BIT IS SET. * * USES A 1,5,6 * B 7 * X 0,1,4,5,6 * * CALLS DOL, FFL, DEL DME SUBR RJ FFL FIND FIRST LINE DME1 BX1 X6 SA5 X1+TTPT PL X5,DME2 IF NOT MARKED BX4 X1 SAVE ORDINAL RJ DEL DELETE LINE BX1 X4 DME2 RJ DOL DOWN ONE LINE ZR B7,DME1 IF NOT EOF EQ DMEX EXIT SPACE 4,10 IFGE DEBUG,1 ** DMP - DMP SENATOR CORE (DEBUG). * * DMP,ADDR. * * WHERE ADDR IS AN OCTAL ADDRESS OR ONE OF THE * PERMITTED LABELS (SEE *GSAA*). THE WORD IS DUMPED IN * BYTE FORMAT PRECEDED BY ITS ADDRESS. DMP0 PRINT ( ) DMP SUBR DMP1 RJ GSA GET SENATOR ADDRESS NG B7,DMP0 IF ILLEGAL OR END OF DMP SX6 B7 SA6 DMPA SAVE ADDRESS PUTI JN SET PUT FWA SA5 DMPA (X5) = DMP ADDRESS PUTO X5,,,2 SA5 X5 GET ACTUAL WORD PUTO (X5,48,12),4,Z,+1 PUTO (X5,36,12),4,Z,+1 PUTO (X5,24,12),4,Z,+1 PUTO (X5,12,12),4,Z,+1 PUTO (X5,0,12),4,Z,+1 SA1 DMPA SA1 X1 RJ SZC SPACE-FILL ZERO CHARACTERS PUTF X6,,10,B6+B1 PUT DISPLAY CODE PUTZ PRINTC JN EQ DMP1 DMPA BSS 1 DMP ADDRESS ENDIF DOL SPACE 4,10 ** DOL - DOWN ONE LINE. * * MOVES DOWN THE FILE ONE LINE * * ENTRY X1 IS STARTING ORDINAL * * USES A 1,5 * X 0,1,5,6 * B 7 * * EXIT B7 = 0, X6 HAS THE ORDINAL OF NEXT LOWER LINE * X5 = TTPT ENTRY * IF B7 = 1, BOTTOM OF FILE HIT DOL1 IX0 X1-X6 ZR X0,DOLX IF EOF NG X0,*+400000B IF PAST EOF SX6 X6+B1 SA5 X6+TTPT ZR X5,DOL1 IF NOT FILLED SB7 B0 DOL SUBR BX6 X1 SA1 TTPTE SB7 B1 EQ DOL1 DSM SPACE 4,10 ** DSM - DUMP SENATOR MEMORY. * * CALL *DMP* TO DUMP OUR MEMORY ON BAD SENATOR ERRORS. DSM SUBR SA5 FL IFNOS SYSTEM DMD,R,X5,0 ELSE LX5 12 VFD 30/FWA,18/LWA,12/0 BX6 X5 SA6 DSMA STORE *DMP* STATUS WORD SYSTEM DMP,RCL,DSMA ENDIF EQ DSMX IFNOSBE 1 DSMA BSS 1 *DMP* STATUS WORD ECS SPACE 4,10 ** ECS - ENTER CONTROL STATEMENTS. * * THIS ROUTINE SENDS ONE OR MORE CONTROL STATEMENTS * (OR CONTROL CARDS, IF YOU PREFER) TO THE OPERATING * SYSTEM TO BE EXECUTED. CONTROL IS *NOT* RETURNED * TO THE CALLER, HENCE THIS ROUTINE IS JUMPED TO. * * ENTRY X1 _ THE CONTROL STATEMENT BUFFER * B7 = LENGTH OF THE BUFFER IN WORDS * * CALLS CIO=, SUF, SYS= KR IFNOSBE ECS BSS 0 BX6 X1 SA6 ECSD SAVE FWA OF CONTROL STATEMENTS * TOGGLE CONTROL STATEMENT FILENAME BETWEEN ZZZZZV0 AND ZZZZZV1. ACCSF ECSA,ECSB ACCESS CONTROL STATEMENT FILE SA2 ECSA (X2) = CURRENT CSF FILENAME SA1 ECSC (X1) = POSSIBLE CSF FILENAME BX0 X1-X2 NZ X0,ECS1 IF NEW FILENAME OK TO USE SA1 A1+B1 (X1) = NEW CSF FILENAME ECS1 BSS 0 MX6 0 SA6 ECSB CLEAR CSF POSITION (START AT BOI) BX6 X1 SA6 ECSA STORE NEW CSF FILENAME FOR *FIN* RJ SUF SET AND UNLOAD FILE SA5 ECSD (X5) = FWA OF CONTROL STATEMENTS WRITEW S,X5,B7 WRITE CONTROL STATEMENTS WRITER S,,RCL FLUSH TO RMS REWIND S,RCL ENCSF ECSA,ECSB ENTER CONTROL STATEMENT FILE ENDRUN START THEM UP ECSA CON 0 LFN ECSB CON 0 CSF POSITION ECSC BSS 0 POSSIBLE CONTROL STATEMENT FILE FILENAMES CON 7LZZZZZV0 CON 7LZZZZZV1 ECSD CON 0 FWA OF CONTROL STATEMENTS KR ELSE ECS SB2 X1 FWA SB3 X1+B7 LWA+1 SX6 X1 FORM FET POINTING TO INPUT STUFF SA6 S+1 FIRST SA6 A6+B1 IN SA6 A6+B1 OUT SX6 B3+100B SA6 A6+B1 LIMIT SA1 =0L"XFILE" RJ SUF SET AND UNLOAD FILE SX6 B3 SET IN SA6 S+2 WRITER S,R ENCSF S ENTER THE STATEMENTS ENDRUN KR ENDIF FFL SPACE 4,10 ** FFL - FIND FIRST LINE. * * FINDS ORDINAL OF FIRST LINE OF THE FILE. * * ENTRY FILE MUST NOT BE EMPTY * * EXIT X6 IS THE ORDINAL * * USES A 5 * X 5, 6 * * CALLS NONE. FFL SUBR SX6 0 SA5 LEN ZR X5,FFLX IF FILE EMPTY FFL1 SA5 X6+TTPT NZ X5,FFLX IF FOUND SX6 X6+B1 EQ FFL1 FLL SPACE 4,10 ** FLL - FIND LAST LINE. * * FINDS THE LAST LINE IN THE FILE. * * EXIT X6 IS ORDINAL OF LAST ENTRY IN FILE * * USES A 5 * X 5,6 * * CALLS NONE FLL SUBR SA5 TTPTE BX6 X5 SA5 LEN ZR X5,FLLX IF FILE EMPTY FLL1 SA5 X6+TTPT NZ X5,FLLX IF FOUND SX6 X6-1 EQ FLL1 FNT SPACE 4,10 ** FNT - GET FNT FOR A FILE. * * ENTRY (X1) = THE FILE NAME * * EXIT (FNTA) CONTAINS THE 3 WORD FNT OR 0 IFNOS * (IN KRONOS, FNTS IS THE FET HEADER) ENDIF * B7 = 0 FILE NON-EXISTANT * B7 = 1 LOCAL FILE * B7 = 2 TERMINAL I/O FILE * B7 = 3 PERMANENT FILE * * USES ALL. * * CALLS SYS= FNT SUBR KR IFNOSBE BX6 X1 SA6 FNTA STORE LFN FOR *PRM* PERM FNTA,RC SA1 FNTA MX0 -5 AX1 9-0 SB7 B0 BX1 -X0*X1 EXTRACT STATUS BITS ZR X1,FNTX IF NO FILE SB7 B1 LX1 59-4 MI X1,FNTX IF LOCAL SB7 3 SET LOCAL AND PF BITS EQ FNTX IF PERMANENT FILE BSSZ 4 PFN FNTA BSS 1 LFN KR ELSE SX6 B1 BX6 X1+X6 SA6 FNTA FET HEADER STATUS FNTA SA1 FNTA SEE IF THE FILE EXISTS SX0 7776B EXTRACT STATUS FIELD BX2 X0*X1 SB7 X2 ZR B7,FNTX IF FILE NOT FOUND SB7 B1 FILE EXISTS EQ FNTX EXIT FNTA BSS 1 FET HEADER FOR STATUS KR ENDIF GCP SPACE 4,10 ** GCP - GET COMMAND PARAMETER. * * GCP SEARCHED (IN) FOR AN ALPHABETIC PARAMETER, IGNORING * LEADING DELIMITERS. IF NOT FOUND, THE INPUT POINTER IS * RESTORED TO ITS CALLING POSITION. * * NOTE: A */* IS A COMMAND (INDICATES A STRING) * * ENTRY )INC) = NEXT COLUMN TO CHECK * * EXIT X6 = THE PARAMETER OR 0 * B7 = *GNA* RETURN CODE * * USES ALL * * CALLS GNA GCP2 SA1 GCPA RESET INPUT POINTER BX6 X1 SA6 INC SX6 0 GCP SUBR SA1 INC SAVE INPUT POINTER BX6 X1 SA6 GCPA GCP1 GNA FN EQ B7,B1,GCPX IF FOUND SX0 B7-3 NZ X0,GCP2 IF NOT LEADING DELIMITER SX0 X6-1R/ ZR X0,GCPX IF */*, EXIT EQ GCP1 GCPA BSS 1 INPUT COLUMN POINTER GFS SPACE 4,10 ** GFI - GET FILE INFORMATION. * * THIS ROUTINE CRACKS THE FILE NAME INFORMATION FROM A COMMAND * AND EITHER RETRIEVES THE FILE FROM WHEREVER OR SIMPLY RETURNS * THE WHERE-ABOUTS OF THE FILE. * * IF THE *DEMAND* FLAG IS SET, WE MUST GET A FILE NAME * FROM TO USER EITHER FROM THE COMMAND LINE OR BY ASKING * FOR IT. IF THE FLAG IS NOT SET, WE WILL ACCEPT THE FILE * IF IT APPEARS ON THE COMMAND LINE, BUT WE WILL USE THE * CURRENT FILE IF NOTHING IF GIVEN. * * IF THE FETCH FLAG IS SET, WE ATTACH/GET THE FILE FROM * WHEREVER HE WANTS. IF THE FLAG IS OFF, WE LOOK AROUND * AND TELL HIM WHERE THE FILE RESIDES. * * IF AN ERROR IS ENCOUNTERED, THE WHOLE ROUTINE IS ABORTED. * ERRORS INCLUDE SYNTAX ERRORS ON THE COMMAND LINE, ILLEGAL * FILE TYPES (EXECUTE-ONLY, ETC.), OR ILLEGAL PASSWORDS. * * * ENTRY B7 = DEMAND FLAG (=1 DEMAND) * B6 = FETCH FLAG (=1 FETCH) * =2 IF *NOT FOUND* IS LEGAL * * EXIT B7 = 0 IF OK * = 1 IF *END* ENTERED * = 2 IF FILE NOT FOUND * (NLFN) HAS NEW FILE NAME * (NSYO) HAS NEW SYSTEM ORDINAL * (NFTY) HAS DESIRED FILE RESIDENCY * (NRES) HAS CURRENT FILE RESIDENCY * (NUSN) HAS USER NUMBER OR 0 * (NPKN) HAS PACKNAM/SETNAME OR 0 * (TFIT) HAS SENINFO STUFF * * USES ALL * * CALLS GSY, GPF GFI SUBR SX6 B7 SAVE DEMAND FLAG SA6 GFIA SX7 B6 FETCH FLAG SA7 GFIB GFI1 BX6 -X6-X6 SA6 NLFN SA6 NSYO IFNOS SA1 PN INITIALIZE STUFF BX6 X1 SA6 NPKN SA1 UN BX6 X1 SA6 NUSN ELSE SA1 SN BX6 X1 SA6 NPKN SA1 ID BX6 X1 SA6 NUSN ENDIF SA1 CTY BX6 X1 SA6 NFTY BX6 X6-X6 SA6 GFIH GFI2 GNA FN NG B7,GFI3 IF LONG ALPHANUMERIC ZR B7,GFI10 EOL, NOTHING THERE SX0 B7-3 NZ X0,GFI3 IF NOT DELIMITER SX0 X6-1R/ ZR X0,GFI7 IF LOCAL FILE TYPE SX0 X6-1R( NZ X0,GFI2 IF NOT PACKNAM/SETNAME, SKIP IT * GET PACKNAM/SETNAME BX6 X6-X6 SA6 NPKN GNA FN LE B7,B0,GFI13 IF ILLEGAL PACKNAM/SETNAME SX0 X6-1R) ZR X0,GFI13 IF NULL, ERROR FOR NOW NE B7,B1,GFI13 IF DELIMITER, ILLEGAL SA6 NPKN GNA FN SX0 X6-1R) ZR X0,GFI2 IT-S OK, SKIP IT EQ GFI13 ERROR, GO REPORT IT * ALPHANUMERIC ENCOUNTERED. SAVE IT AND CHECK THE NEXT * CHARACTER GFI3 SA6 GFIH SAVE IT AND CHECK NEXT CHARACTER GNA FN GFI4 ZR B7,GFI5 IF EOL SX0 B7-3 NZ X0,GFI13 IF VERY LONG ALPHANUMERIC SX0 X6-1R"COLON" ZR X0,GFI6 IF USER NUMBER/ID SX0 X6-1R/ ZR X0,GFI7 IF TYPE * (.) OR SOME OTHER DELIMITER. GFIH HAS FILE NAME. GFI5 SA1 GFIH BX7 X1 SA7 NLFN MX0 -18 BX0 -X0*X7 NZ X0,GFI13 IF FILE NAME GT 7 CHARS ZR B7,GFI10 IF EOL SX0 X6-1R. NZ X0,GFI10 IF NOT SYSTEM, START PROCESSING RJ GSY GET SYSTEM NZ B7,GFI15 IF *END* OR ERROR SA6 NSYO EQ GFI10 GO PROCESS THE NAME * PROCESS QUALIFIERS GFI6 SA1 GFIH SET USER NUMBER/ID BX6 X1 SA6 NUSN EQ GFI9 GFI7 SA1 GFIH TYPE NZ X1,GFI8 IF HE GAVE A TYPE SX1 1RL ASSUME LOCAL LX1 54-0 GFI8 RJ CVT CONVERT TYPE NG X6,GFI13 IF ILLEGAL SA6 NFTY * GET NEXT PARAMETER GFI9 BX6 X6-X6 SA6 GFIH SB7 2 GNA FN EQ B7,B1,GFI3 IF ALPHA EQ GFI4 * ALL PARAMETERS HAVE BEEN READ. CONVERT * THE TYPE GFI10 BSS 0 IFNOSBE SA1 NLFN ZR X1,GFI11 IF NO FILE RJ VFN VALIDATE FILE NAME NZ X6,GFI13 IF ILLEGAL GFI11 BSS 0 ENDIF * SEE OF HE GAVE A FILE NAME AND IF ONE WAS DEMANDED. SA1 NLFN ZR X1,GFI12 IF NO FILE GIVEN SX6 B1 SA6 GFIJ INDICATE NOT CURRENT FILE EQ GFI16 GFI12 SA1 GFIA CHECK DEMAND NZ X1,GFI14 IF HE DEMANDED A FILE SA1 CFN MX6 42 BX1 X6*X1 ZR X1,GFI14 IF NO CURRENT FILE TO USE BX6 X1 SA6 NLFN BX6 X6-X6 INDICATE USED THE CURRENT FILE SA6 GFIJ EQ GFI16 GFI13 PRINT (ILLEGAL FILE NAME) SB7 -B1 EQ GFIX EXIT GFI14 PRINT (FILE NAME -),ES TREAD ZR X1,GFI1 IF NOT EOR/EOF * *END* GFI15 BSS 0 SB7 B1 *END*/ERROR EQ GFIX EXIT * INITIALIZE TFIT WITH ZEROES GFI16 SB7 FITL SX6 0 GFI17 SB7 B7-1 SA6 B7+TFIT NZ B7,GFI17 IF MORE SA1 NLFN BX6 X1 SA6 TFIT+VFST RJ DFR DETERMINE FILE RESIDENCY SA1 DFRA BX6 X1 SA6 NRES SA1 GFIB CHECK FETCH FLAG ZR X1,GFI20 IF DON-T FETCH THE FILE IFNOS SA1 NRES WHERE THE FILE IS SA2 NFTY BX0 X1*X2 ZR X0,GFI23 IF NOT THERE LX2 59-0 NG X2,GFI19 IF LOCAL, WE HAVE IT ALREADY SB7 OGET RJ PFM PERM FILE MANAGER NZ B7,GFIX IF NOT SUCCESSFUL ELSE SCOPE SA1 GFIJ ZR X1,GFI23 IF WE USED CURRENT FILE SA1 NFTY SX0 X1-1 ZR X0,GFI18 IF LOCAL SB7 OGET RJ PFM PERM FILE MANAGER ZR B7,GFI19 IF FOUND EQ B7,B1,GFIX IF STRANGE PROBLEM EQ GFI23 PROCESS FILE-NOT-FOUND GFI18 SA1 NRES MX0 -1 BX0 -X0*X1 ZR X0,GFI23 IF NOT THERE ENDIF * TRY TO GET THE FILE INFORMATION FROM THE FILE (IF THE *SAVE* * OPTION IS SELECTED). GFI19 RJ GSI GET SENATOR INFORMATION ZR B7,GFI20 IF VALID SENINFO SA1 NLFN BX6 X1 SA6 TFIT+VFST * IF HE GAVE A SYSTEM AFTER THE FILE NAME, THAT SYSTEM * IS INITIALIZED. GFI20 SA1 NSYO PL X1,GFI21 IF SYSTEM GIVEN * FINALLY, SEE THE WE NOW HAVE A SYSTEM FOR THIS FILE. IF * NOT, TRY THE CURRENT SYSTEM. IF THERE ISN-T A CURRENT * SYSTEM, USE *DATA*. SA1 TFIT+VFST SX1 X1 EXTRACT SYSTEM NZ X1,GFI22 IF WE HAVE A SYSTEM SA1 SYS NZ X1,GFI21 IF WE HAVE A CURRENT SYSTEM SX1 SDAT ASSUME DATA GFI21 SB7 TFIT RJ SNS SET NEW SYSTEM GFI22 SB7 B0 FILE OK EQ GFIX EXIT * FILE NOT FOUND GFI23 SA1 GFIB SB7 X1 RETURN CODE IF NOT NEEDED GT B7,B1,GFIX EXIT IF NO-FILE OK PRINT (FILE NOT FOUND) SB7 B1 EQ GFIX EXIT GFIA BSS 1 DEMAND FLAG (=1 ON) GFIB BSS 1 FETCH FLAG (1=GET THE FILE) * INFO FROM THE COMMAND LINE GFIH BSS 1 LAST ALPHNUMERIC ENCOUNTERED GFIJ BSS 1 ZR IF CURRENT FILE USED GLN SPACE 4,10 ** GLN - GET LINE NUMBER. * * FETCHES A LINE NUMBER FROM INPUT. IF REQUESTED, * *A* AND *Z* ARE RECOGNIZED AND TRANSLATED TO THE * FIRST AND LAST LINE NUMBERS IN THE CURRENT FILE. * THE CURRENT FILE MUST NOT BE EMPTY. * * ENTRY (IN) IN R1 FORMAT * INL IS LAST COLUMN IN IN * INC IS STARTING COLUMN * B7 = 0 IF 'A' AND 'Z' ALLOWED * = 1 IF NOT * * EXIT B7 = 0 IF VALID LINE NUMBER * X6 = THE LINE NUMBER * B7 = 2 IF DEFINATELY INVALID LINE NUMBER * (INPUT IS NOT ADVANCED) * B7 = 1 IF POSSIBLE RELEVANT DELIMITER * X6 = DELIMITER IN R1 FORMAT * B7 =-1 IF LINE NUMBER TOO LARGE * * USES ALL * * CALLS GNA, DXB, FFL, FLL GLN8 SB7 2 SA1 GLNB BX7 X1 SA7 INC RESET INPUT POINTER GLN SUBR RESET INPUT POINTER SX6 B7 SAVE A,Z FLAG SA6 GLNA SA1 INC SAVE INC BX6 X1 SA6 GLNB GNA NUM,AO JP GLN1+B7+1 GLN1 BSS 0 JP GLN8 IF TOO BIG JP GLN2 IF EOL JP GLN3 IF ALPHA JP GLN6 IF NUMERIC JP GLN7 IF DELIMITER * EOL GLN2 SB7 2 SET RETURN CODE EQ GLNX EXIT * ALPHABETIC GLN3 SA1 GLNA NZ X1,GLN8 IF ALPHA NOT ALLOWED LX6 6 SX0 X6-1RA ZR X0,GLN5 IF *A* SX0 X6-1RZ NZ X0,GLN8 IF NOT *Z*, NO GOOD RJ FLL FIND LAST LINE GLN4 SA5 X6+TTPT GET THE LINE NUMBER MX0 -21 BX6 -X0*X5 SB7 B0 EQ GLNX EXIT GLN5 RJ FFL FIND FIRST LINE EQ GLN4 * NUMERIC GLN6 BX5 X6 RJ DXB DECIMAL TO BINARY SB7 B0 ASSUME NUMBER IS OK SA1 =1000000D IX0 X6-X1 NG X0,GLNX IF OK, EXIT SB7 -B1 RETURN ILLEGAL NUMBER EQ GLNX EXIT * DELIMITER GLN7 SB7 B1 SET DELIMITER CODE EQ GLNX EXIT GLNA BSS 1 A,Z PERMITTED FLAG GLNB BSS 1 INITIAL COLUMN GLR SPACE 4,10 ** GLR - GET LINE RANGE. * * GETS A RANGE OF LINE NUMBERS, LEADING DELIMITERS ARE IGNORED * * ENTRY (IN) HAS RANGE, STARTING ON OR AFTER (INC) * * EXIT B7 = 0 IF SUCCESSFUL * X6 = THE RANGE IN TLNR FORMAT * INC UPDATED * * B7 = 1 IF UNSUCCESSFUL, *INC* UNSCATCHED * * USES ALL * * CALLS GLN, FFL, FLL GLR9 SA1 GLRB BX6 X1 SA6 INC RESTORE INPUT POINTER GLR10 SB7 1 NO GOOD GLR SUBR SA1 INC BX6 X1 SA6 GLRB GLR1 SB7 B0 A AND Z ALLOWED RJ GLN GET LINE NUMBER GT B7,B1,GLR10 IF NO LINE NUMBER NG B7,GLR10 IF ILLEGAL LINE NUMBER ZR B7,GLR3 IF LINE NUMBER SX0 X6-1R/ ZR X0,GLR9 IF SLASH, BACK UP SX0 X6-1R= ZR X0,GLR2 IF EQUALS (DASH) SX0 X6-1R- DELIMITER, CHECK IT NZ X0,GLR1 NOT DASH, SKIP IT GLR2 RJ FFL NO LEADING LINE NUMBER SA5 X6+TTPT MX0 -21 BX6 -X0*X5 SA6 GLRA SAVE FIRST NUMBER EQ GLR6 POST DASH PROCESSING * FIRST LINE NUMBER GIVEN. SEE WHAT IS NEXT GLR3 SA6 GLRA SA1 INC BX6 X1 SA6 GLRB GLR4 SB7 B0 RJ GLN GET LINE NUMBER NE B7,B1,GLR5 IF NOT DELIMITER, IGNORE SX0 X6-1R ZR X0,GLR4 SKIP SX0 X6-1R- ZR X0,GLR6 IF DASH SX0 X6-1R= ZR X0,GLR6 IF = * ONLY 1 NUMBER IN THIS RANGE GLR5 SA1 GLRB BACKUP INPUT BX6 X1 SA6 INC SA1 GLRA FORM ENTRY BX6 X1 LX1 24 BX6 X6+X1 SB7 B0 RETURN CODE EQ GLRX EXIT * DASH ENCOUNTERED - WE HAVE A PAIR OF LINES GLR6 SB7 B0 RJ GLN GET SECOND LINE NUMBER ZR B7,GLR8 IF NUMBER FOUND NE B7,B1,GLR7 NOPE, USE *Z* SX0 X6-1R ZR X0,GLR6 IF BLANK, IGNORE * BLAH AFTER A DASH, ASSUME *Z* GLR7 RJ FLL FIND LAST LINE SA5 X6+TTPT MX0 -21 BX6 -X0*X5 * X6 HAS SECOND LINE NUMBER. FORM THE ENTRY. GLR8 SA1 GLRA IX0 X6-X1 SET SIGN BIT IF NEGATIVE RANGE LX1 24 BX6 X6+X1 FORM ENTRY MX1 1 BX0 X1*X0 BX6 X0+X6 SB7 B0 EQ GLRX EXIT GLRA BSS 1 FIRST LINE NUMBER GLRB BSS 1 INPUT POINTER FOR BACKING UP GNA SPACE 4,10 ** GNA - GET NEXT ARTIFACT. * * THIS ROUTINE GETS THE NEXT ARTIFACT FROM (IN), IGNORING * LEADING BLANKS. * * ENTRY (IN) CONTAINS A LINE * (INL) IS THE LAST COLUMN OF THE LINE * (INC) IS THE FIRST COLUMN TO PROCESS * B4 = 0 IF NUMERIC BEGINS FILE NAME * 1 IF NUMERIC BEGINS NUMBER * B7 = 0 IF ALPHA MAY CONTAIN ALPHANUMERICS * 1 IF ALPHA MAY NOT CONTAIN DIGITS * * EXIT B7 HAS TYPE OF ARTIFACT: * -1 FIRST 7 ALPHANUMERICS OF A LONGER STRING * 0 END OF LINE * 1 ALPHABETIC <= 7 CHARS LONG * 2 NUMERIC <= 7 CHARS LONG * 3 DELIMITER * * X6 HAS THE ARTIFACT, WHICH DEPENDS ON B7: * -1 7L FORMAT * 0 0 * 1 0L FORMAT * 2 0L FORMAT * 3 1R FORMAT * * B6 HAS LENGTH OF STRING IF B7 = 1 OR 2. * * (INC) UPDATED TO NEXT COLUMN AFTER THE ARTIFACT. * * USES ALL * * CALLS NONE. GNA SUBR SA5 INC SA4 INL BX6 X6-X6 IX0 X4-X5 NG X0,GNA9 IF EOL SA1 IN+X5-1 ZR B7,GNA1 IF ALPHAS HAVE ALPHANUMERICS SB7 10D ALPHAS HAVE NO NUMERICS * FIND OUT WHAT SORT OF CHAR WE HAVE. GNA1 SB6 B0 LENGTH SB5 54 BIT SHIFT COUNTER ZR X1,GNA2 IF ZERO CHAR SX0 X1-1R0 NG X0,GNA7 IF ALPHA SX0 X0-9-1 PL X0,GNA2 IF DELIMITER ZR B4,GNA7 IF DIGITS MEAN A FILE NAME EQ GNA4 PROCESS NUMERIC GNA2 SX6 X5+B1 DELIMITER SA6 INC BX6 X1 SB7 3 SB6 B1 SX0 X6-1R NZ X0,GNAX IF NOT BLANK, EXIT * FOUND A BLANK, SKIP OVER EXTRA BLANKS GNA3 SX5 X5+B1 CHECK NEXT CHAR IX0 X4-X5 NG X0,GNA9 IF EOL SA1 IN+X5-1 SX0 X1-1R ZR X0,GNA3 IF A BLANK TO SKIP BX7 X5 SA7 INC EQ GNAX EXIT * NUMERIC, FETCH IT GNA4 LX1 B5 BX6 X6+X1 SB6 B6+B1 SB5 B5-6 SX5 X5+B1 IX0 X4-X5 NG X0,GNA5 IF EOL SA1 IN+X5-1 SX0 X1-1R0 NG X0,GNA5 IF ALPHA SX0 X0-9-1 NG X0,GNA4 IF NUMERIC GNA5 BX7 X5 SA7 INC SB7 2 SB5 7 LE B6,B5,GNAX IF NOT TOO LONG SB7 -B1 TOO-LONG RETURN CODE EQ GNAX EXIT * ALPHABETIC GNA7 LX1 B5 BX6 X6+X1 SB6 B6+B1 SB5 B5-6 SX5 X5+B1 IX0 X4-X5 NG X0,GNA8 IF EOL SA1 IN+X5-1 ZR X1,GNA8 IF ZERO SX0 X1-1R0-9-1 PL X0,GNA8 IF NOT ALPHANUMERIC SX0 X0+B7 PL X0,GNA8 IF NUMERIC, AND NUM. NOT WANTED IN ALPHA SX0 B6-9 ZR X0,GNA8 IF MUCH TOO LONG SX0 B6-7 NZ X0,GNA7 IF NOT A LITTLE TOO LONG SB7 -B1 RETURN LONG-STRING EQ GNA7 GNA8 BX7 X5 SA7 INC SB7 B1 EQ GNAX EXIT * EOL GNA9 SB7 B0 EQ GNAX EXIT SPACE 4,10 IFGE DEBUG,1 ** GSA - GET SENATOR ADDRESS (DEBUG ONLY). * * THIS ROUTINE GETS A SENATOR ADDRESS FROM INPUT. * THE ADDRESS MAY BE EITHER AN OCTAL VALUE, A LABEL * FROM THE TABLE BELOW, OR A PLUS SIGN. IN THE LAST * CASE, THE LAST ADDRESS USED, PLUS ONE, IS USED. * IF (*) IS GIVEN, THE LAST ADDRESS WILL BE RETURNED * * ENTRY (INC) _ NEXT CHAR IN (IN) * * EXIT B7 = ADDRESS OR -1 IF ERROR * * USES ALL * * CALLS WTC, DXB GSA6 PRINT (ILLEGAL ADDRESS) PRINT ( ) GSA7 SB7 -1 GSA SUBR GSA1 GNA NUM JP B7+GSA2+1 GSA2 JP GSA6 TOO LONG JP GSA7 IF EOL JP GSA5 ALPHABETIC JP GSA4 NUMERIC * DELIMITER. IF IT IS A (+), USE NEXT ADDRESS SX0 X6-1R+ NZ X0,GSA3 IF NOT (+) SA1 GSAB SX6 X1+B1 SA6 A1 SB7 X6 EQ GSAX EXIT * IF (*), RETURN LAST ADDR GSA3 SX0 X6-1R* NZ X0,GSA1 IF NOT (*) SA1 GSAB SB7 X1 EQ GSAX * NUMERIC ADDRESS GSA4 SB7 B0 OCTAL BX5 X6 RJ DXB CONVERT TO BINARY NZ X4,GSA6 IF CONVERSION ERROR SA6 GSAB SB7 X6 EQ GSAX EXIT * ALPHABETIC ADDRESS. SEARCH FOR IT GSA5 SB7 GSAA BX1 X6 MX0 42 RJ SLS SEARCH LIST ZR X6,GSA6 IF NOT FOUND SA6 GSAB SB7 X6 EQ GSAX EXIT GSAB BSS 1 LAST ADDRESS RETURNED GSAA BSS 0 ** LIST OF DEBUG LABELS. CSYT TABLE CSYT FREE TABLE FREE FIT TABLE FIT FL TABLE FL GFIA TABLE GFIA PFMA TABLE PFMA PRUS TABLE PRUS ROTA TABLE ROTA S TABLE S TFIT TABLE TFIT TIN1 TABLE TIN1 TIN2 TABLE TIN2 TOUT TABLE TOUT TTPT TABLE TTPT DATA 0 ENDIF GSI SPACE 4,10 ** GSI - GET SAVED INFORMATION. * * THIS ROUTINE CHECKS THE LAST FILE OF A GIVEN FILE FOR SAVED * SENATOR INFORMATION FOR THE FILE TABLE (SEE THE *OPTION* * COMMAND). * * ENTRY (NLFN) HAS FILE NAME * * EXIT B7=0 IF VALID INFO, ELSE 1 * (TFIT-1) HAS SENINFO HEADER * = 0 IF NO SENINFO * (TFIT...) HAS INFO OR IS ZERO IF BAD INFO * * USES (S),(SBUF) * * CALLS CIO=, RDW= GSI1 SB7 FITL CLEAR SENINFO SX6 0 GSI2 SB7 B7-1 SA6 B7+TFIT NZ B7,GSI2 IF MORE PRINT (*SAVE* INFORMATION BAD, IGNORED.) GSI3 RECALL S SB7 1 BAD OR NO INFO GSI SUBR BX6 X6-X6 ASSUME NO SENINFO SB7 B0 RETURN *OK SENINFO* SA6 TFIT-1 SA1 NLFN SX0 B1 ADD COMPLETION BIT BX6 X0+X1 SA6 S REWIND S,R AVOID *READ OR SKIPF AFTER WRITE* SKIPEI S,R SKIPB S,1,,R READ S READO S NZ X1,GSI3 IF NOTHING THERE SA1 =7LSENINFO MX0 42 BX0 X0*X6 IX0 X1-X0 NZ X0,GSI3 IF NOT *SENINFO* SA6 TFIT-1 READW S,TFIT,FITL SX0 B6-FITL-TFIT ZR X0,GSI0 IF LENGTH CORRECT SX0 X0+B1 IF LENGTH SHORT BY MORE THAN 1 NZ X0,GSI1 BAD SENINFO READO S ZR X1,GSI1 IF RECORD IS TOO LONG * CHANGE OLD SENINFO - * VFLT - 30/CFL,30/EFL IN BINARY * * TO NEW SENINFO - * VFLT - 36/CFL,24/0 IN LEFT JUSTIFIED DISPLAY CODE * VFLT+1 - 36/EFL,24/0 IN LEFT JUSTIFIED DISPLAY CODE MOVE FITL-VSTT+1,TFIT+VFLT+1,TFIT+VSTT SA2 TFIT+VFLT SPLIT CFL/EFL INTO SEPERATE WORDS MX0 30 BX1 -X0*X2 RJ COD CONVERT OCTAL TO DISPLAY SB2 B2-B1 START MASK MX0 1 AX0 B2 BX6 X0*X4 JUST THE DISPLAY CODE SA6 TFIT+VFLT+1 SA2 TFIT+VFLT AX2 30 MX0 30 BX1 -X0*X2 RJ COD CONVERT OCTAL TO DISPLAY SB2 B2-B1 START MASK MX0 1 AX0 B2 BX6 X0*X4 JUST THE DISPLAY CODE SA6 TFIT+VFLT SB7 B0 RETURN *OK SENINFO* GSI0 SA1 NLFN UPDATE FILENAME IN TFIT SA2 TFIT+VFST SX6 X2 EXTRACT SYSTEM BX6 X6+X1 OR IN NEW FILE NAME SA6 A2 SX6 B1 TURN SAVE=ON SA6 SVFI RECALL S EQ GSIX EXIT GSY SPACE 4,10 ** GSY - GET SYSTEM. * * THIS ROUTINE SKIPS LEADING DELIMITERS AND GETS A SYSTEM, * ASKING FOR IT IF NECESSARY. * * ENTRY (INC) IS THE STARTING COLUMN TO SEARCH * * EXIT X6 SYSTEM ORDINAL * B7 = 0 IF SUCCESSFUL ELSE 1 * * USES ALL * * CALLS PRINT, SLS, TREAD GSY SUBR GSY1 GNA FN JP B7+GSY2+1 GSY2 BSS 0 JP GSY3 TOO LONG, ILLEGAL JP GSY4 JP GSY5 JP GSY3 JP GSY1 DELIMITER, SKIP GSY3 PRINT (ILLEGAL SYSTEM) GSY4 PRINT (SYSTEM-),ES TREAD NZ X1,GSY4 IF EOX EQ GSY1 TRY AGAIN * LEGAL FORMAT, SEARCH FOR IT. GSY5 SA1 =3LEND SB7 B1 IX0 X1-X6 ZR X0,GSYX IF *END* MX0 3*6 JUST FIRST 3 CHARS BX5 X0*X6 SA1 SYST+SYSTL/SYSN SB6 SYSN SX6 B1 SB7 B0 ASSUME FOUND GSY6 BX1 X0*X1 JUST 3 CHARS IX2 X1-X5 ZR X2,GSYX IF FOUND, EXIT SA1 A1+5 INCREMENT THRU TABLE OF SYSTEMS *SYST* SB6 B6-B1 SX6 X6+B1 NEW SYSTEM ORDINAL GT B6,B0,GSY6 IF MORE TO TRY EQ GSY3 TRY AGAIN IFL SPACE 4,10 ** IFL - INCREMENT FIELD LENGTH. * * ENTER (FL) = CURRENT FIELD LENGTH * (X6) = FL INCREASE DESIRED. * * EXIT X0 = +0 IF NO FL INCREASE GRANTED, ELSE * -0 IF FL INCREASE GRANTED. * (FL) = NEW FIELD LENGTH * (FREE) UPDATED * * CALLS *SYS=* * * USES A 1,6 * X 0,1,2,6 IFL SUBR ENTRY / EXIT SA5 MFL MAXFL SA1 FL SX2 77B IX6 X2+X6 ROUND TO HIGHER 100B AX6 6 LX6 6 IX2 X1+X6 IX0 X5-X2 PL X0,IFL1 IF D.FL OK IX0 X5-X1 HOW MUCH IS LEFT ZR X0,IFLX IF NONE AT ALL BX6 X0 IFL1 SA6 IFLB SAVE MEMORY CHANGE IX0 X6+X1 COMPUTE NEW FL MEMORY CM,IFLA,R,X0 SA1 FL SET FL... SA2 IFLB IX6 X1+X2 SA6 A1 SA1 FREE ... AND FREE IX6 X1+X2 SA6 A1 BX0 -X0-X0 EQ IFLX EXIT IFLA BSS 1 *MEM* STATUS WORD IFLB BSS 1 MEM INCREMENT SPACE 4,10 IFGE DEBUG,1 ** JMP - PLACE JP *+400000B IN A WORD (DEBUG). * * JMP ADDR,N * * WHERE ADDR IS TO BE ZAPPED WITH A *+400000B * N PLACE JUMP IN NEXT OVERLAY LOADED (OPTIONAL) JMP SUBR RJ GSA GET SENATOR ADDRESS NG B7,JMPX IF ILLEGAL ADDRESS SX6 B7 SA6 JMPB SAVE ADDRESS RJ GCP GET COMMAND PARAMETER NZ X6,JMP1 IF *NEXT* GIVEN SA1 JMPA SA2 JMPB BX6 X2 LX6 30 BX6 X6+X1 SA6 X2 SET THE JUMP EQ JMPX EXIT JMP1 SA1 JMPB *NEXT* PARAMETER BX6 X1 SA6 LSOD EQ JMPX EXIT JMPA JP 400000B JMPB BSS 1 JMP ADDRESS ENDIF LSO SPACE 4,10 ** LSO - LOAD SENATOR OVERLAY. * * THIS ROUTINE, CALLED BY THE *LOAD* MACRO, LOADS A * SENATOR OVERLAY AND JUMPS TO THE SPECIFIED ENTRY * POINT. THE LOAD VARIES DEPENDING ON WHETHER WE ARE * ON SYSTEM OR NOT. * * ENTRY X1 = LEVEL NUMBER * 48/,6/PRIMARY,6/SECONDARY * B7 = ENTRY POINT * * EXIT JUMPS TO ENTRY POINT * * USES ALL * * CALLS SYS= LSO SX6 B7 SAVE ENTRY POINT SA6 LSOA NZ X1,LSO1 IF OVERLAY GIVEN SA1 LSOG BX6 X1 SA6 LSOF EQ LSO2 LSO1 BX6 X1 SA1 LSOF SA6 A1 MX0 -6 BX0 -X0*X6 NZ X0,*+400000B SECONDARY LOADS NOT DEFINED SB7 READY-1 BX6 X1 SA6 LSOG LSO2 BSS 0 SA1 =5LSEN00 FORM OVERLAY NAME SA2 LSOF LX2 5*6 IX6 X1+X2 ADD LEVEL NUMBER SA6 LSOC+2 SA1 LWPR SA4 PGNR SA3 LSOB SECOND WORD OF LOAD REQUEST LX1 42-18 POSITION LOADED FROM LIBRARY FLAG SX5 B1 LX2 3*6 MX0 7*6 BX3 X2+X3 ADD LEVEL NUMBER LX5 42-0 SA2 LSOH BX7 X0*X4 FILE/LIBRARY NAME BX1 X5*X1 BX6 X3+X1 OR IN LIBRARY LOAD (*U*) FLAG SX1 B7 LOAD ADDRESS BX6 X6+X1 SA6 A6-B1 SA1 LSOI SYSTEM OVERLAY LIBRARY BX0 X7-X2 NZ X0,LSO3 IF NOT LOADING FROM SYSTEM CC LIB BX7 X1 LSO3 SA7 A6-B1 BX6 X6-X6 SA6 LSOE OVERLAY BEING LOADED KR IFNOSBE LOADREQ A7,R KR ELSE 1 SYSTEM LDR,R,A7 SA1 LSOC+1 MX0 -2 LX1 0-36 BX1 -X0*X1 GET LOADER ERROR FLAGS NZ X1,LSO7 IF ERROR IN LOADING SA1 LSOF BX6 X1 SA6 LSOE NEW LOADED OVERLAY MX0 -6 BX0 -X0*X1 NZ X0,LSO5 IF SECONDARY LOAD IFGE DEBUG,1 JMP PROCESSING SA2 LSOD ZR X2,LSO4 IF NO JMP ADDR SA1 JMPA SET THE JP *+400000B BX6 X2 LX6 30 BX6 X6+X1 SA6 X2 BX6 X6-X6 SA6 A2 LSO4 BSS 0 ENDIF LSO5 BSS 0 SA1 LSOA NZ X1,LSO6 IF ENTRY POINT GIVEN SA1 READY-1 USE THE OVERLAY-S ENTRY ADDRESS LSO6 SB7 X1 JP B7 JUMP TO THE ENTRY LSO7 BSS 0 MESSAGE (=C= LOADER ERROR, "LOADFILE" ENDED=) ENDRUN LSOA BSS 1 ENTRY POINT LSOB VFD 12/**,12/2040B,18/0,18/** LSOC BSS 3 IFGE DEBUG,1,1 LSOD DATA 0 JP *+400000B ADDR LSOE DATA 0 LAST LOADED OVERLAY OR 0 LSOF BSS 1 OVERLAY LEVEL BEING LOADED LSOG DATA 0 OVERLAY BEFORE THIS ONE LSOH BSS 0 SYSTEM LIBRARY TO LOAD FROM IFNOSBE DATA 0LNUCLEUS ELSE DATA 0LSYSLIB ENDIF LSOI DATA 0LSYSOVL LTP SPACE 4,10 ** LTP - LOCATE TEXT POINTER. * * ENTRY: X1 IS THE SOUGHT-AFTER LINE NUMBER * * EXIT: X6 IS THE ORDINAL OF THE TPT ENTRY * B7: 0 IF THE LINE IS FOUND * -1 IF BETWEEN LINES * 1 IF BEFORE THE FIRST LINE OF THE FILE * 2 IF AFTER THE LAST LINE OF THE FILE * * USES A 4,5,6 * B 7 * X 0,4,5,6 * * CALLS NONE. LTP SUBR SA4 LAST SA3 TTPTE IFGE DEBUG,1 DEBUGGING CHECKS NG X3,*+400000B IF BAD END POINTER NG X4,*+400000B IF BAD LAST IX0 X3-X4 NG X0,*+400000B IF LAST BEYOND EOF NG X1,*+400000B IF NEGATIVE LINE NUMBER SA5 =1000000D IX0 X1-X5 PL X0,*+400000B IF LINE NUMBER TOO LARGE ENDIF IF LINE NUMBER TOO LARGE * STARTING FROM (LAST), SEARCH DOWN THE TTPT FOR A * NON-ZERO ENTRY TO START OUR SEARCH FROM. BX6 X4 X6 IS LAST USEFUL ORDINAL LTP1 SA5 X4+TTPT GET THE ENTRY NZ X5,LTP3 IF NOT A BLANK ENTRY IX0 X4-X3 SX4 X4+B1 NZ X0,LTP1 IF NOT END OF FILE * HIT END OF FILE SEARCHING FOR A STARTING POINT. * SEARCH UP TOWARDS THE BEGINNING LTP2 SX4 X4-1 NG X4,LTP10 IF EMPTY FILE SA5 X4+TTPT ZR X5,LTP2 IF ZERO, BACK UP * WE FOUND A NON-ZERO ENTRY TO TRY TO MATCH WITH. * COMPARE WITH THE SOUGHT-AFTER LINE NUMBER IN X1. X5 * HAS THE ENTRY. LTP3 BX6 X4 SAVE ORDINAL MX0 -21 BX2 -X0*X5 IX0 X2-X1 NG X0,LTP5 IF ABOVE THIS ENTRY NZ X0,LTP8 IF BELOW THIS ENTRY * FOUND IT, NO PROBLEM LTP4 SB7 B0 SA6 LAST EQ LTPX EXIT * THE SOUGHT-AFTER ENTRY IS TOWARD THE END OF THE * FILE. SEARCH FOR IT. IF WE PASS IT, RETURN THE * ENTRY FOLLOWING THE SPACE WHERE IT GOES. LTP5 IX0 X4-X3 ZR X0,LTP7 IF END OF FILE SX4 X4+B1 SA5 X4+TTPT ZR X5,LTP5 IF NULL ENTRY, SKIP BX6 X4 MX0 -21 BX2 -X0*X5 IX0 X2-X1 NG X0,LTP5 IF MORE TO SEARCH ZR X0,LTP4 IF FOUND LTP6 SB7 -B1 SA6 LAST EQ LTPX EXIT * END OF FILE HIT. THE ENTRY IS BEYOND END OF FILE. * RETURN THE LAST NON-ZERO ENTRY IN THE FILE. (X6) * ALREADY HAS THE ORDINAL. LTP7 SB7 2 SA6 LAST EQ LTPX EXIT * THE DESIRED LINE IS TOWARD THE BEGINNING OF THE FILE. * AGAIN, IF IT IS BETWEEN TWO ENTRIES, RETURN THE HIGHER * OF THE TWO ENTRIES. LTP8 BX6 X4 SAVE ORDINAL OF HIGHER ENTRY LTP9 SX4 X4-1 NG X4,LTP10 IF BOF HIT SA5 X4+TTPT ZR X5,LTP9 IF ZERO ENTRY MX0 -21 BX2 -X0*X5 IX0 X2-X1 NG X0,LTP6 IF BETWEEN NZ X0,LTP8 IF MORE TO CHECK BX6 X4 SB7 B0 SA6 LAST EQ LTPX EXIT * BEGINNING OF FILE. RETURN THE FIRST LINE OF THE FILE. LTP10 SB7 B1 SA6 LAST EQ LTPX EXIT NLR SPACE 4,10 ** NLR - GET NEXT LINE IN RANGE. * * USING THE LINE NUMBER RANGE TABLE, THIS ROUTINE * RETURNS THE ORDINAL OF THE NEXT LINE AS SPECIFIED BY * THE TABLE. * * ENTRY TLNR SET UP * TLNRL SET TO NUMBER OF TLNR ENTRIES. IF ZERO, * A-Z WILL BE ASSUMED. DONT TOUCH TLNTL- * IT IS USED AS A FLAG BY LNR. * * EXIT B7 = -1 IF END OF RANGES * = 0 IF ONE RETURNED * = 1 IF NEW RANGE * X6 ORDINAL OF THE NEXT NUMBER * USES ALL * * CALLS UNKNOWN NLR12 SB7 -1 NLR SUBR BX6 X6-X6 SET RETURN CODE SA6 NLRC SA1 TLNRL CHECK FOR INITIAL CALL. NG X1,NLR2 IF NO INITIALIZE * POSITIVE TLNRL SIGNALS FIRST CALL. INTERNAL * VALUE IS NEGATIVE THE LONGTH OF THE TABLE. NZ X1,NLR1 IF TLNR NOT DEFAULT SA1 A2Z DEFAULT RANGE BX6 X1 SA6 TLNR SX1 B1 LENGTH OF DEFAULT RANGE NLR1 BX6 -X1 NEGATIVE OF THE LENGTH SA6 TLNRL BX6 X6-X6 SA6 TLNRP EQ NLR9 * FIND THE NEXT NUMBER IN THE CURRENT RANGE NLR2 SA1 NLRA SA4 NLRB PL X4,NLR6 IF RANGE GOES FORWARD * RANGE GOES BACKWARD, MOVE UP FILE. NLR3 RJ UOL DOWN ONE LINE NZ B7,NLR8 IF BOF HIT NLR4 SA5 X6+TTPT MX0 -21 BX3 -X0*X5 BX4 -X0*X4 IX0 X3-X4 NG X0,NLR8 IF NEW RANGE NLR5 SX6 A5-TTPT SA6 NLRA SA1 NLRC SB7 X1 SET RETURN CODE EQ NLRX EXIT * RANGE GOES DOWN THE FILE, CHECK NEXT ENTRY NLR6 RJ DOL DOWN ONE LINE NZ B7,NLR8 IF EOI NLR7 SA5 X6+TTPT SA4 NLRB MX0 -21 BX3 -X0*X5 BX4 -X0*X4 IX0 X4-X3 PL X0,NLR5 IF STILL IN RANGE * NEXT RANGE NLR8 SX6 B1 SA6 NLRC SET RETURN CODE SA1 TLNRP SX6 X1+B1 SA6 A1 SA1 TLNRL IX0 X1+X6 ZR X0,NLR12 IF END OF RANGE PL X0,*+400000B IF PAST THE END SX0 X6-N.LNR ZR X0,*+400000B IF PAST EOT NLR9 SA1 TLNR+X6 BX6 X1 SA6 NLRB STORE LINE ENTRY AX6 24 MX0 -21 BX1 -X0*X6 GET FIRST LINE NUMBER RJ LTP LOCATE TEXT POINTER NZ B7,NLR10 IF NOT EXACT SA6 NLRA SA5 X6+TTPT SB7 B1 EQ NLRX EXIT * NOT EXACT, CHECK NEXT/LAST LINE. NLR10 SA6 NLRA SX7 B1 SAVE RETURN CODE BX1 X6 SA7 NLRC SA4 NLRB * FIRST LINE NUMBER DOESN-T EXIST. THE FOLLOWING DECISION * TABLE INDICATES PROCESSING: * * LINE AT UPWARDS DOWNWARDS * ------- ------- --------- * START USE IT NEXT RANGE * MIDDLE USE IT DOWN AND USE IT * END NEXT RANG USE IT * * USE IT - TRY USING THE VALUE LTP RETURNED * NEXT RANGE - SKIP IT, THERE CAN-T BE ANYTHING IN THE RANGE * DOWN AND USE IT - DOWN ONE LINE AND TRY IT NG X4,NLR11 IF RANGE GOES DOWN GT B7,B1,NLR8 IF RANGE BEYOND EOF EQ NLR7 * A BACKWARD RANGE NLR11 GT B7,B1,NLR4 IF RANGE STARTS ABOVE EOF NG B7,NLR3 IF IN MIDDLE SOMEWHERE EQ NLR8 IF STARTS BELOW EOF NLRA BSS 1 ORDINAL OF LAST TTPT PROCESSED NLRB BSS 1 CURRENT RANGE PROCESSED NLRC BSS 1 ORDINAL OF SOMETHING A2Z VFD 12/0,24/0,24/999999D PFM SPACE 4,110 IFNOSBE PCN SPACE 4,10 ** PCN - PRINT CYCLE NUMBER * * PRINT THE CYCLE NUMBER OF THE LAST PF ACCESS * * ENTRY (PFMA) = CYCLE RETURNED FROM PP * * CALLS WTC, CDD PCN SUBR SA1 PFMA+1 AX1 6 SHIFT OFF CY CODE RJ CDD MX0 -3*6 BX6 -X0*X6 SA1 =7L CYCLE BX6 X1+X6 SA6 PCNA WRITEC O,PCNA EQ PCNX EXIT PCNA BSSZ 2 RJD SPACE 4,10 ** RJD - RIGHT JUSTIFY DISPLAY CODE. * * USED TO POSITION SCOPE PERM FILE INFORMATION. * * ENTRY X1 = DISPLAY CODE, *L* FORMAT * * EXIT X1 = DISPLAY CODE IN *R* FORMAT * * USES A 1 * X 0, 1, 6 * * CALLS NONE RJD SUBR ZR X1,RJDX IF NOTHING TO SHIFT SX0 77B RJD1 BX6 X0*X1 NZ X6,RJDX IF NON-ZERO FOUND LX1 -6 SHIFT ... EQ RJD1 ... AND TRY AGAIN PFM SPACE 4,10 ** PFM - PERMANENT FILE MANAGER. * * PERFORM ALL PERMANENT FILE OPERATIONS * * ENTRY B7 = OPERATION CODE * OGET - GET A FILE (ATTACH) * OPUT - PUT A FILE (CATALOG) * OPUR - PURGE A FILE (PURGE) * (NLFN) FILE NAME * (NUSN) ID * (RP) RENTENTION PERIOD * (TK) TURNKEY * (XR) XR PW * (RD) = READ PASSWORD. * (NPKN) = SETNAME. * (NRES) = RESIDENCY BITS (SEE DFR). * * * EXIT B7 = 0 IF SUCCESSFUL ELSE 1 * (= 2 IF NOT FOUND, OGET ONLY) * (PFMA+1) HAS CYCLE RETURN CODE * * USES ALL * * CALLS SYS, WTC PFM SUBR SA1 NLFN PLUG FILE NAME BX6 X1 SA6 PFMA-4 PFN SA6 PFMA STORE ZZZZZ LFN IN FDB MX0 -1 BX7 -X0+X6 SA7 S FOR UNLOADING SX6 03B SA6 A6+B1 STORE CYCLE RETURN SA1 NUSN RJ RJD RIGHT JUSTIFY DISPLAY LX1 6 SX6 14B ID= BX6 X6+X1 SA6 A6+B1 SA1 TK RJ RJD SX0 20B LX1 6 BX6 X0+X1 SA6 A6+B1 PW=TK (PFMA+3) SA1 RD RJ RJD SX0 21B LX1 6 BX6 X0+X1 SA6 A6+B1 PW=RD (PFMA+4) BX6 X6-X6 ZERO REMAINING FILE AREA SA6 A6+B1 SA6 A6+B1 SA6 A6+B1 SA6 A6+B1 SA6 A6+B1 SA6 A6+B1 PFMA + 10 JP PFM1+B7 PFM1 BSS 0 LOC 0 OGET JP PFM2 OPUT JP PFM3 OPUR JP PFM4 LOC *O ** ATTACH THE FILE PFM2 BSS 0 SA1 NPKN SX6 40B BX6 X1+X6 SA6 PFMA+5 SN=SN SA1 NRES CHECK RESIDENCY INFORMATION SX0 X1-1 SEE IF LOCAL FILE NZ X0,PFM2.1 IF NOT, UNLOAD AND ATTACH IT SA1 =0L"SFILE" BX6 X1 SA6 PFMA STORE FILE NAME IN FDB RJ SUF SET AND UNLOAD FILE ATTACH PFMA,RT,RC SA1 PFMA AX1 9-0 MX0 -9 BX1 -X0*X1 SX0 X1-12B SB7 B1+B1 ASSUME NO FILE ZR X0,PFMX IF SO NZ X1,PFM5 IF SOME OTHER ERROR * WE HAVE THE FILE. UNLOAD THE ZZZZZ COPY AND RE-ATTACH. CLOSE S,UNLOAD,R PFM2.1 BSS 0 SA1 NLFN READ LFN BX6 X1 SA6 PFMA STORE LFN IN FDB RJ SUF SET AND UNLOAD FILE ATTACH PFMA,RT,RC SA1 PFMA CHECK RETURN CODE AX1 9-0 MX0 -9 BX1 -X0*X1 SX0 X1-12B SB7 B1+B1 ASSUME NOT FOUND ZR X0,PFMX IF NOT FOUND EQ PFM5 JUST IN CASE THERE ARE PROBLEMS ** CATALOG. PFM3 BSS 0 SA5 RP SB7 B1 RJ DXB CONVERT TO BINARY LX6 6 SX0 02B RP= BX6 X0+X6 SA6 PFMA+5 RP=RP SA1 TK ADD TK AND XR RJ RJD RIGHT JUSTIFY DISPLAY LX1 6 SX0 04B BX6 X0+X1 SA6 A6+1B TK=TK SA1 RD RJ RJD SX0 10B LX1 6 BX6 X0+X1 SA6 A6+B1 RD=RD SA1 XR ADD XR RJ RJD RIGHT JUSTIFY DISPLAY LX1 6 SX0 13B BX6 X0+X1 SA6 A6+B1 XR=XR SX0 22B BX6 X1+X0 SA6 A6+B1 PW=XR SA1 NLFN BX6 X1 SA6 PFMA STORE LFN CATALOG PFMA,RT,RC EQ PFM5 ** PURGE. PFM4 SX6 131B LC=1 SA6 PFMA+5 LC=1 SA1 XR RJ RJD RIGHT JUSTIFY DISPLAY LX1 6 SX0 22B BX6 X0+X1 SA6 A6+B1 PW=XR SA1 NPKN SX6 40B BX6 X1+X6 SA6 A6+B1 SN=SN CLOSE S,UNLOAD,R PURGE PFMA,RT,RC CLOSE S,UNLOAD,R UNLOAD FILE * PROCESS RETURN CODE PFM5 SA1 PFMA AX1 9-0 MX0 -9 BX1 -X0*X1 SB7 B0 ZR X1,PFMX IF OK, EXIT LX1 18 MX0 42 SB7 PFMB RJ SLS SEARCH LIST NZ X6,PFM7 IF KNOWN PF CODE LX1 -18 UNKNOWN, DISPLAY THE CODE MX0 -3 BX6 -X0*X1 LX1 -3 BX2 -X0*X1 LX2 6 BX6 X6+X2 SX0 2R00 IX6 X6+X0 SA1 PFMC+1 ADD CODE TO MESSAGE MX0 12 BX1 -X0*X1 LX6 48 BX6 X1+X6 SA6 A1 WRITEC O,PFMC EQ PFM8 PFM7 WRITEC O,X6 PFM8 PRINT ( ) SB7 B1 EQ PFMX EXIT BSSZ 4 PERMFILE NAME PFMA BSS 1 BSSZ 10 FDB PARAMETERS PFMB BSS 0 **** PF ERROR MESSAGES. 04 PFERR ( TOO MANY CYCLES) 05 PFERR ( NO ROOM FOR FILE / PFC FULL) 12 PFERR ( NO FILE) 15 PFERR ( CYCLE NUMBER LIMIT REACHED) 16 PFERR ( NO ROOM FOR FILE / PFD FULL) 22 PFERR ( NO FILE) 24 PFERR ( FILE ALREADY LOCAL, ATTACHED BY A DIFFERENT NAME) 25 PFERR ( FILE ARCHIVED) 37 PFERR ( FILE UNAVAILABLE) 40 PFERR ( ILLEGAL SETNAME) 41 PFERR ( SET NOT MOUNTED) **** DATA 0 PFMC DIS ,* PF ERROR 00B* ENDIF SPACE 4,10 IFNOS SPACE 2,4 ** MACROS FOR PFM STUFF. SETPF MACROE L,P,N .1 IFC NE,$L$$,1 =SET CFSN,L,BIT .1 IFC NE,$P$$,1 =SET CFPN,P .1 IFC NE,$N$$,1 =SET CFNF,N SA1 PW SX0 PFMC FORM PASSWORD BX6 X0+X1 SA6 PFMA+CFPW BX6 X6-X6 SA6 PFMA+CFOU SA6 PFMA+CFNF SA1 PFMA CLEAR CS FIELD MX0 42 BX6 X0*X1 SX0 B1 BX6 X6+X0 SA6 A1 SA1 PFMA+1 CLEAR DT MX0 12 BX6 -X0*X1 SA6 A1 ENDM =SET MACRO P1,P2,P3 .2 IFC EQ,$P2$LFN$ SA1 NLFN .2 ELSE 1 SA1 =0L_P2 * MX0 42 BX6 X1*X0 SA6 PFMA+P1 ENDM GETRC MACRO P1 SA1 PFMA LX1 0-10 MX0 -8 B_P1 -X0*X1 ENDM PFC SPACE 4,10 ** PFC - CHECK PERM FILE. * * ENTRY (NLFN) HAS FILE NAME * * EXIT B7 = 0 NOT PERMANANT * 1 DIRECT ACCESS FILE * 2 INDIRECT ACCESS FILE * (PFCA) - (PFCA)+7 - CATALOG ENTRY * * USES ALL * * CALLS PFM PFC SUBR SETPF L="SFILE",P=LFN SA1 PFMA+1 CLEAR *DT* FIELD MX0 12 BX6 -X0*X1 SA6 A1 SX6 PFMC SA6 PFMA+CFPW SA1 PFMA+1 SX6 X1 SA6 A1+B1 IN = FIRST SA6 A6+B1 OUT = FIRST MX6 0 SA6 PFMA+6 CLEAR *RI* FOR *PFM* SA1 NUSN CURRENT USER NUMBER SA2 IUN INITIAL USER NUMBER BX0 X1-X2 ZR X0,PFC0 IF SAME BX6 X1 SA6 PFMA+9 PLUG AUN IN FET PFC0 CATLIST PFMA,NLFN,,,NPKN GETRC X6 SB7 X6-2 ZR B7,PFCX EXIT IF NOT FOUND NZ X6,PFC1 IF OTHER ERROR READW PFMA,PFCA,NWCE SB7 B0 (B7) KILLED BY *RDW=* SA1 PFCA ZR X1,PFCX IF NO FILE NAME, NOT PERMANANT SA1 NUSN CURRENT USER NUMBER SA2 IUN INITIAL USER NUMBER BX1 X1-X2 ZR X1,PFC0.1 IF NOT ALTERNATE USER NUMBER SA1 PFCA+4 EXTRACT MODE LX1 12 MX0 -6 BX6 -X0*X1 SB7 X6-3 NZ B7,PFC0.1 IF NOT EXECUTE ONLY PRINT (EXECUTE ONLY) EQ PFCX PFC0.1 SA1 PFCA+1 LX1 0-11 MX0 -1 EXTRACT DIRECT ACCESS BIT BX1 -X0*X1 SX0 B1+B1 IX0 X0-X1 =1 IF D.A., ELSE 2 SB7 X0 EQ PFCX EXIT PFC1 BSS 0 PROCESS ERROR RETURN CODE LX1 18 MX0 42 SB7 PFMB RJ SLS NZ X6,PFC2 SX6 PFMC PFC2 BSS 0 WRITEC O,X6 SB7 B0 EQ PFCX PFCA BSS NWCE PFD SPACE 4,10 ** PFD - PERM FILE DEFINE. * * THIS ROUTINE DEFINES A SCRATCH PERMFILE TO BE WRITTEN * TO BY *SCF*. THIS PERM FILE IS LATER USED BY *PFM* IF * IF A DIRECT ACCESS FILE IS NEEDED. * * ENTRY (S) HAS THE FILE NAME * (NPKN) HAS PACKNAM, IF ANY * * EXIT (PFDA) = RETURN CODE * * USES ALL REGS * FET AT PFMA PFD SUBR CLOSE S,UNLOAD,R SETPF L="SFILE" CLOSE PFMA,UNLOAD,R SETPF P="SFILE" PURGE PFMA,(=0),,NPKN GET RID OF INTERLOPERS SETPF L=LFN,P="SFILE" DEFINE PFMA,(=0L"SFILE"),(=0),,,,,NPKN GETRC X6 SA6 PFDA SAVE RETURN CODE EQ PFDX EXIT PFDA BSS 1 *DEFINE* RETURN CODE PFM SPACE 4,10 ** PFM - PERFORM PERM FILE I/O * * PERFORMS ALL PERM FILE ACCESSES. * * ENTRY B7 = OPERATION CODE - * OSAV - SAVE * OGET - GET/ATTACH * OPUR - PURGE * OREP - REPLACE * (NLFN) HAS FILE NAME * (DFRA) HAS FILE RESIDENCY * (PW) HAS PASSWORD * (NPKN) HAS PACKNAM/SETNAME * * EXIT B7 = 0 IF SUCCESSFUL ELSE 1 * * USES ALL * * CALLS PFM, SYS, WTC, PFC PFM SUBR SA1 PW SX0 PFMC BX6 X1+X0 SA6 PPW PASSWORD FOR PFM REQUESTS MX6 0 SA6 PFMA+9 CLEAR *UN* IN FET JP PFM1+B7 JUMP TO PROCESSOR PFM1 BSS 0 LOC 0 OGET JP PFM2 GET/ATTACH OPUR JP PFM4 PURGE OREP JP PFM5 REPLACE OSAV JP PFM7 SAVE LOC *O ** GET/ATTACH THE FILE. PFM2 SA1 NRES AX1 1 SX6 =C*NO FILE* ZR X1,PFM97 IF NOT FILE AX1 1 SHIFT OFF DIRECT BIT NZ X1,PFM3 IF INDIRECT SETPF L=LFN SA1 NUSN CURRENT USER NUMBER SA2 IUN INITIAL USER NUMBER BX0 X1-X2 ZR X0,PFM2.1 IF SAME BX6 X1 SA6 PFMA+9 PLUG AUN IN FET PFM2.1 ATTACH PFMA,NLFN,,,R,NPKN GETRC X6 EQ PFM96 REPORT RETURN CODE PFM3 SETPF L=LFN SA1 NUSN CURRENT USER NUMBER SA2 IUN INITIAL USER NUMBER BX0 X1-X2 ZR X0,PFM3.1 IF SAME BX6 X1 SA6 PFMA+9 PLUG AUN IN FET PFM3.1 GET PFMA,NLFN,,,NPKN GETRC X6 EQ PFM96 REPORT RETURN CODE SPACE 2,4 ** PURGE THE FILE. PFM4 SA1 NRES SX6 =C*NO FILE* AX1 1 ZR X1,PFM97 IF NO FILE SETPF P=LFN PURGE PFMA,(=0),,NPKN GETRC X6 EQ PFM96 REPORT RETURN CODE SPACE 2,4 ** REPLACE THE FILE. PFM5 SETPF L=LFN SA1 NFTY LX1 59-2 PL X1,PFM6 IF INDIRECT NOT DESIRED REPLACE PFMA,NLFN,(=0),,,NPKN GETRC X6 NZ X6,PFM6 IF REPLACE DIDN-T WORK SA1 PFDA NZ X1,PFM99 IF NO SCRATCH FILE TO PURGE SA1 NFTY LX1 59-1 PL X1,PFM99 IF NO DIRECT FILE SETPF P="SFILE" PURGE PFMA,(=0),,NPKN GETRC X6 ZR X6,PFM99 IF IT WENT AWAY JP *+400000B SHOULD HAVE BEEN PURGED * REPLACE DIDN-T WORK. USE SCRATCH PF, IF ANY. * NOTE - X6=*REPLACE* RETURN CODE PFM6 SA1 NFTY LX1 59-1 PL X1,PFM96 IF DIRECT NOT WANTED SA1 PFDA NZ X1,PFM96 IF NO DIRECT TO USE SETPF P=LFN PURGE PFMA,(=0),,NPKN SETPF CHANGE DIRECT FILE CHANGE PFMA,(=0L"SFILE"),NLFN,,,,,NPKN GETRC X6 EQ PFM96 REPORT RETURN CODE SPACE 2,4 ** SAVE THE FILE. THE PF IS ASSUMED TO NOT EXIST. PFM7 SETPF L=LFN SA1 NFTY LX1 59-2 SEE IF INDIRECT IS OK PL X1,PFM8 IF NO INDIRECT SAVE PFMA,NLFN,,,,,NPKN GETRC X6 NZ X6,PFM8 IF SAVE DIDN-T WORK SA1 PFDA NZ X1,PFM99 IF NO SCRATCH FILE TO PURGE SA1 NFTY LX1 59-1 PL X1,PFM99 IF NO DIRECT FILE TO PURGE SETPF P="SFILE" PURGE PFMA,,,NPKN GETRC X6 ZR X6,PFM99 IF ALL DONE JP *+400000B SHOULD HAVE BEEN PURGED * THE *SAVE* DIDN-T WORK. IF THERE IS A DIRECT ACCESS FILE, * AND IT WAS OK TO USE A D.A. FILE, THEN RENAME THE SCRATCH * PERM FILE TO THE DESIRED NAME. * X6 = *SAVE* RETURN CODE PFM8 SA1 NFTY LX1 59-1 PL X1,PFM96 NO DIRECT, REPORT RETURN CODE SA1 PFDA NZ X1,PFM96 IF NO DIRECT FILE AVAILABLE SETPF CHANGE PFMA,(=0L"SFILE"),NLFN,,,,,NPKN GETRC X6 EQ PFM96 REPORT THE RETURN CODE SPACE 2,4 * COMPLETION ROUTINES FOR *PFM*. PFM96 ZR X6,PFM99 IF NO ERROR TO REPORT BX1 X6 LX1 18 SEARCH FOR THE MESSAGE MX0 42 SB7 PFMB TABLE OF KNOWN ERROR NUMBERS RJ SLS SEARCH LIST NZ X6,PFM97 IF KNOWN ERROR MESSAGE SX6 PFMC USE SYSTEM ERROR MESSAGE PFM97 WRITEC O,X6 REPORT ERROR SB7 B1 ERROR RETURN EQ PFMX EXIT PFM99 SB7 B0 RETURN OK STATUS EQ PFMX EXIT PFMA FILEB BUFS,LBUFS,EPR,(FET=CFLM) PFMB BSS 0 TABLE OF KNOWN ERROR CODES 01 PFERR (FILE IS BUSY) 02 PFERR (FILE NOT FOUND) 03 PFERR (FILE EMPTY) 10 PFERR (NOT VALIDATED FOR THIS PF REQUEST) 12 PFERR (FILE IS TOO LONG) 14 PFERR (DEVICE NOT AVAILABLE) 16 PFERR (PF UTILITY RUNNING, TRY LATER) 20 PFERR (TOO MANY FILES CATALOGUED) 21 PFERR (TOTAL INDIRECT FILE SPACE EXCEEDED) 24 PFERR (LOCAL FILE LIMIT EXCEEDED) 25 PFERR (LOCAL FILE SIZE LIMIT EXCEEDED) PFMC BSS 3 SYSTEM ERROR MESSAGE RETURNED HERE PPW BSS 1 PASSWORD FOR PFM CALLS ENDIF PKS SPACE 4,10 ** PKS - PACK STRING. * * PACKS A LINE IN R1 TO PACKED STRING FORMAT. THIS * THE FIRST BYTE OF THE FIRST WORD OF THE LINE, FOLLOWED * BY THE PACKED CHARACTERS. THERE IS NOT NECESSARILY * ANY TRAILING ZERO CHARACTERS AT THE END OF THE LINE. * * ENTRY X6 = LENGTH OF R1 LINE * A1 _ FWA OF R1 LINE - 1 * B2 _ WHERE TO PUT THE LINE * * EXIT A6 _ LAST WORD OF PACKED LINE * * USES B 6,7 * A 1,6 * X 1,6 * * CALLS NONE PKS2 SA6 B2 PKS SUBR ZR X6,PKS2 IF ZERO LENGTH LINE NG X6,*+400000B IF NEGATIC LENGTH LINE SX1 X6-N.LINE-1 PL X1,*+400000B IF LINE TOO LONG SB7 X6 B7 = CHARS. LEFT LX6 48-0 POSITION LENGTH IN FIRST BYTE SB6 54-12 PKS1 SA1 A1+B1 PACK NEXT CHAR LX1 B6 BX6 X6+X1 SB6 B6-6 SB7 B7-B1 ZR B7,PKS2 IF END OF LINE PL B6,PKS1 IF NOT END OF WORD SA6 B2 NEW WORD IS READY SB2 B2+B1 BX6 X6-X6 SB6 54 EQ PKS1 PSE SPACE 4,10 ** PRA - PROCESS ABORT. * * *RPV* CALLS THIS ROUTINE TO HANDLE THE VARIOUS TYPES OF * ABORTS, INCLUDING RESOURCE LIMITS, ARITHMETIC ERRORS, ETC. * * ENTRY *SJRA* HAS REPREIVE BLOCK * *SJRB* HAS EXCHANGE PACKAGE PRA SUBR IFNOS PROMPT OFF CSET NORMAL ENDIF SA1 SJRA+/COMSRPV/ERCD GET ERROR CODE MX0 -12 BX1 -X0*X1 OSRPV IFNOS SX0 X1-/COMSRPV/TLEC NZ X0,PRA1 IF NOT CPU TIME LIMIT MESSAGE (=C= CPU TIME LIMIT.=) ABORT PRA1 SX0 X1-/COMSRPV/SREC NZ X0,PRA2 IF NOT SRU LIMIT PRINT (COMMAND ABORTED BY SRU LIMIT - YOU HAVE 8 EXTRA SRUS.) PRINT ( ) EQ PRAX PRA2 SX0 X1-/COMSRPV/MLEC NZ X0,PRA3 IF NOT MASS STORAGE LIMIT PRINT (MASS STORAGE LIMIT, COMMAND ABORTED.) EQ PRAX PRA3 SX0 X1-/COMSRPV/PPEC NZ X0,PRA4 IF NOT PP ABORT RJ DSM DUMP SENATOR MEMORY MESSAGE (=C=COMMAND ABORTED BY PP - CHECK DAYFILE.=) ABORT PRA4 SX0 X1-/COMSRPV/EEEC NZ X0,PRA5 IF NOT CPU ERROR RJ PSE PROCESS SYSERR RJ DSM DUMP SENATOR MEMORY EQ PRAX OSRPV ELSE SX0 X1-/COMSRPV/TLEC NZ X0,PRA1 IF NOT CPU TIME LIMIT PRINT (CPU TIME LIMIT - YOU HAVE 8 MORE SECONDS.) PRINT ( ) EQ PRAX PRA1 BSS 0 SX0 X1-/COMSRPV/PPEC NZ X0,PRA2 IF NOT PPU ABORT PRINT (PPU ABORT) PRINT ( ) RJ DSM EQ PRAX PRA2 BSS 0 SX0 X1-/COMSRPV/EEEC NZ X0,PRA3 IF NOT ERROR EXIT (CPU MODE ERROR) RJ PSE PROCESS SYSERR RJ DSM DUMP SENATOR MEMORY EQ PRAX PRA3 BSS 0 SX0 X1-/COMSRPV/ODEC ZR X0,PRA4 IF OPERATOR DROP SX0 X1-/COMSRPV/OKEC ZR X0,PRA4 IF OPERATOR KILL SX0 X1-/COMSRPV/RREC NZ X0,PRA5 IF NOT OPERATOR RERUN PRA4 BSS 0 PRINT (COMMAND ABORTED BY OPERATOR OR SYSTEM) PRINT ( ) EQ PRAX OSRPV ENDIF PRA5 SX0 X1-/COMSRPV/TIEC NZ X0,PRA6 IF NOT USER INTERUPT IFNOS PRINT (USER BREAK) ELSE PRINT (USER ABORT.) ENDIF EQ PRAX PRA6 BX5 X1 PROCESS UNEXPECTED ERROR PUTI JN PUTT (COMMAND ABORTED, RPV CODE = ),B6+B1 PUTO X5 PUTT (B.) PUTZ PRINTC JN PRINT ( ) RJ DSM DUMP SENATOR MEMORY EQ PRAX PSE SPACE 4,10 ** PSE - PROCESS SYSERR. * * THIS ROUTINE IS CALLED BY *RPV* TO PROCESS * A SYSERR. ANY CPU ARITHMETIC ERROR IS CONSIDERED A SYSERR. * PROCESSING INVOLVES PRINTING THE ADDRESS AND OVERLAY OF * THE ERROR. * * ENTRY *SJRA* HAS REPRIEVE BLOCK * *SJRB* HAS EXCHANGE PACKAGE * PSE SUBR PUTI JN PUTT (SYSERR AT),2 SA1 SJRB GET *P* OUT OF EXCHANGE PACKAGE AX1 2*18 NZ X1,PSE1 IF *P* PRESENT SA1 B0 GET *P* FROM RA+0 AX1 30 MX0 -17 IGNORE TOP (SYSERR) BIT BX1 -X0*X1 PSE1 PUTO X1,,,B6+B1 SA1 LSOE GET ACTIVE OVERLAY SX1 X1+2R00 CONVERT TO DISPLAY PUTF X1,8,3,B6 PUTT (FL=),B6+B1 PUTO ((SJRB+2),36,18),,,B6 PUTZ PRINTC JN PRINT ( ) EQ PSEX EXIT PTL SPACE 4,10 ** PTL - PROCESS TABS IN LINE. * * THIS ROUTINE MOVE THE TEXT IN (JN) TO (IN), PRO- * CESSING TAB CHARACTERS, IF APPROPRIATE. * * ENTRY TABS SET UP * TEXT IN (JN) * * EXIT TEXT IN (IN) * B7 = 0 IF OK ELSE = 1 * * USES ALL * * CALLS MVE, WTC, WTS(IF DEBUG) PTL SUBR SA1 FIT+VTTT LX1 6 NG X1,PTL6 IF NO TAB CHARACTER AX1 54 ZR X1,PTL6 IF NO TAB COLUMNS SB2 X1 B2 = NUMBER OF TAB POSITIONS SB3 B0 B3 = CURRENT TAB POSITION ORDINAL SB4 B1 B4 = NEXT OUTPUT COLUMN SX5 B0 X5 = CURRENT INPUT COLUMN SA4 JNL X4 = LAST INPUT COLUMN SA2 FIT+VTTT LX2 0-54 MX0 -6 BX3 -X0*X2 EXTRACT TAB CHARACTER LX2 1+5+8 BX6 X2 SAVE TAB COLUMNS SA6 PTLA SX7 1R PTL1 SX5 X5+B1 GET NEXT CHARACTER IX0 X4-X5 NG X0,PTL5 IF END OF LINE SA1 JN+X5-1 IX0 X1-X3 NZ X0,PTL4 IF NOT TAB CHAR SX1 1R USE BLANK IF NO TAB COLUMNS LEFT PTL2 EQ B3,B2,PTL4 IF OUT OF TAB POSITIONS SA2 PTLA GET NEXT TAB COLUMN MX0 -8 BX6 -X0*X2 SX0 B4 IX0 X0-X6 NG X0,PTL3 IF NOT PAST NEXT TAB POSITION SB3 B3+B1 BX6 X2 LX6 8 POSITION NEXT TAB COLUMN SA6 A2 SX0 B3-7+1 NZ X0,PTL2 IF NOT NEW TAB WORD SA2 FIT+VTTT+1 USE SECOND TAB WORD BX6 X2 LX6 8 SA6 PTLA EQ PTL2 CHECK NEW COLUMN PTL3 SA7 IN+B4-1 COPY (-X0) BLANKS SB4 B4+B1 SX0 X0+B1 NG X0,PTL3 IF MORE BLANKS EQ PTL1 NEXT CHAR PTL4 SX0 B4-N.LINE-1 ZR X0,PTL7 IF LINE IS TOO LONG BX6 X1 SA6 IN+B4-1 SB4 B4+B1 EQ PTL1 NEXT CHAR PTL5 SX6 B1 END OF LINE SA6 INC SX6 B4-B1 SA6 INL BX6 X6-X6 SB7 B0 LINE WAS OK EQ PTLX PTL6 SA5 JNL COPY THE LINE MOVE X5,JN,IN SA5 JNL SB4 X5+B1 EQ PTL5 PTL7 PRINT (LINE IS MUCH TOO LONG, IGNORED) SB7 B1 EQ PTLX EXIT PTLA BSS 1 CURRENT TAB WORD PVL SPACE 4,10 ** PVL - PRINT VALUE AND LABEL. * * THIS ROUTINE PRINT THE VALUE AND THE LABEL GIVEN. * THE VALUE IS INSERTED IN THE FIRST 6 COLUMNS OF THE * DISPLAY LINE. * * ENTRY X1 HAS THE VALUE * A5 _ THE LABEL * X5 = THE FIRST WORD OF THE LABEL * * EXIT PRINTED * * USES ALL * * CALLS CDD, WTC PVL SUBR RJ CDD CONVERT DECIMAL DIGITS MX0 6*6 LX6 4*6 BX6 X0*X6 BX5 -X0*X5 BX6 X6+X5 SA6 A5 WRITEC O,A5 EQ PVLX EXIT RAF SPACE 4,10 ** RAF - RESET ACTIVE FILES. * * THIS ROUTINE RESETS THE FETS OF ACTIVE FILES. RAF SUBR NOS IFNOS SA1 O+1 CLEAR OUTPUT BUFFER SX6 X1 SA6 A1+B1 *IN* SA6 A6+B1 *OUT* SA1 I SET COMPLETE BIT ON INPUT SX0 B1 BX6 X0+X1 SA6 A1 SA1 S+1 CLEAR RANDOM BIT (SET BY *RMT*) MX0 1 LX0 47-59 BX6 -X0*X1 SA6 A1 EQ RAFX EXIT NOS ELSE SA1 O DON-T FLUSH OUTPUT SX0 374B MASK FOR CODE/STATUS FIELD BX6 -X0*X1 SA6 A1 SB2 RAFA-1 LOOP INDEX RAF1 SB2 B2+B1 ADVANCE TO NEXT FILE SA5 B2 GET FET ADDRESS ZR X5,RAFX IF END OF TABLE, EXIT SA5 X5 GET FET HEADER BX4 X5 LX4 59-0 NG X4,RAF1 IF NOT BUSY, SKIP IT MX0 42 BX6 X0*X5 EXTRACT FILE NAME SX0 B1 ... ADD COMPLETE BIT BX6 X0+X6 SA6 A5 AND SAVE IT SX0 374B EXTRACT OLD CIO CODE BX4 X0*X5 SX0 X4-14B CIO WRITE ZR X0,RAF2 IF WRITE SX0 X4-24B CIO WRITER ZR X0,RAF3 IF WRITER SX0 X4-34B ZR X0,RAF4 IF WRITEF SA1 A5+B1 SET IN = OUT = FIRST SX6 X1 SA6 A1+B1 SA6 A6+B1 EQ RAF1 ON TO NEXT RAF2 BSS 0 WRITE A5,RCL EQ RAF1 RAF3 BSS 0 WRITER A5,,RCL EQ RAF1 RAF4 BSS 0 WRITEF A5,RCL EQ RAF1 RAFA BSS 0 TABLE OF FILES TO CHECK CON I CON O CON S CON T CON C CON 0 END OF TABLE NOS ENDIF RCL SPACE 4,10 ** RCL - REFORMAT COMPASS LINES. * * ENTRY SEE RTL * * EXIT LINE IN (JN) * * USES ALL. * * CALLS DL, MVE=, WTC= RCL SUBR SB7 JN RJ BDL BLANK DISPLAY LINE SA1 FIT+VTTT LX1 6+1+5 MX0 -5 BX1 -X0*X1 NUMBER OF TABS SX0 X1-4 NG X0,RCL18 IF NOT 4 TAB COLUMNS SA5 INC SA4 INL SA3 FIT+VTTT LX3 6 MX0 -6 BX3 -X0*X3 EXTRACT TAB CHARACTER SX6 B0 SA6 JNL RCL1 SA1 IN+X5-1 SKIP LEADING BLANKS SX0 X1-1R NZ X0,RCL2 IF NOT BLANK SX5 X5+B1 IX0 X4-X5 PL X0,RCL1 IF NOT EOL SX6 B1 LINE IS BLANK SA6 JNL SB7 B0 EQ RCLX EXIT RCL2 SX0 X1-1R, ZR X0,RCL17 IF CONTINUATION SX0 X1-1R* ZR X0,RCL17 IF COMMENT IX0 X1-X3 ZR X0,RCL13 IF TAB, MOVE TO COMMENT FIELD * POSSIBLE LABEL FIELD SA2 CSYT SX7 1R"COLON" ASSUME CDC ASSEMBLER SX0 X2-SYTP NZ X0,RCL2.1 IF NOT PDP-11 ASSEMBLER SX7 1R= SET PDP ASSEMBLER SX0 X1-1R; LOOK FOR COMMENT ZR X0,RCL17 IF COMMENT RCL2.1 BSS 0 SX2 X5+B1 SX0 X1-1R+ ZR X0,RCL4 IF FORCE UPPER SX0 X1-1R- ZR X0,RCL4 IF FORCE LOWER * WE HAVE A POSSIBLE LABEL. SEE IF IT IS FOLLOWED BY A * COLON. X5 _ COLUMN WHERE THE LABEL STARTS. SX2 X5 RCL3 SX2 X2+B1 IX0 X4-X2 NG X0,RCL5 EOL, IT IS AN OPERAND SA1 IN+X2-1 IX0 X1-X3 ZR X0,RCL5 IF TAB CHAR, IT IS AN OPERAND SX0 X1-1R ZR X0,RCL5 IF BLANK, OPERAND IX0 X1-X7 LOOK FOR END OF LABEL NZ X0,RCL3 IF NOT COLON SX6 1R SA6 A1 BLANK OUT THE COLON * ITS A LABEL. IT STARTS AT COLUMN X5 AND ENDS AT COLUMN * X2-1. PUT IT IN THE LINE. RCL4 IX6 X2-X5 SX0 X6-N.LINE SA4 FIT+VTTT LX4 6+1+5+8 EXTRACT FIRST TAB COLUMN MX7 -8 BX4 -X7*X4 IX0 X0+X4 PL X0,RCL10 IF LABEL TOO LONG IX7 X6+X4 COMPUTE LENGTH OF NEW LINE SX7 X7-1 SA7 JNL SX7 X2 SA7 A5 MOVE X6,IN+X5-1,JN+X4-1 * OPERAND FIELD. INC IS THE NEXT COLUMN TO BE CONSIDERED. RCL5 SA5 INC SA4 INL SA3 FIT+VTTT LX3 6 MX0 -6 BX3 -X0*X3 SX5 X5-1 RCL6 SX5 X5+B1 IX0 X4-X5 NG X0,RCL16 IF EOL, DONE SA1 IN+X5-1 SX0 X1-1R ZR X0,RCL6 IF BLANK, SKIP IX0 X1-X3 ZR X0,RCL13 IF TAB CHAR, GO TO COMMENTS FIELD * MOVE OPERAND TO (TAB+1) AND ONWARD SA2 FIT+VTTT LX2 6+1+5+2*8 EXTRACT SECOND TAB MX6 -8 BX2 -X6*X2 RCL7 BX6 X1 SX0 X2-N.LINE PL X0,RCL10 IF LINE TOO LONG SA6 JN+X2-1 SX2 X2+B1 SX5 X5+B1 IX0 X4-X5 NG X0,RCL8 IF EOL SA1 IN+X5-1 SX0 X1-1R ZR X0,RCL8 IF BLANK IX0 X1-X3 NZ X0,RCL7 IF NOT TAB CHAR EQ RCL13 RCL8 SX6 X2-1 END OF OPERAND FIELD SA6 JNL RCL9 SX5 X5+B1 NEXT COLUMN IX0 X4-X5 NG X0,RCL16 IF END OF LINE SA1 IN+X5-1 SX0 X1-1R ZR X0,RCL9 IF BLANK, SKIP IX0 X3-X1 ZR X0,RCL13 IF TAB, COMMENT * PROCESS ADDRESS FIELD, WHCIH SHOULD START IN (TAB+2). * IF THAT COLUMN IS IN USE, THEN DONT USE IT. SA2 FIT+VTTT EXTRACT THIRD TAB COLUMN LX2 6+1+5+3*8 MX1 -8 BX2 -X1*X2 SA1 JNL SX1 X1+B1 IX0 X1-X2 NG X0,RCL11 IF ADDRESS AT TAB PLACE SX2 X1+B1 SX0 X2-N.LINE NG X0,RCL11 IF ROOM LEFT RCL10 PRINT (LINE IS MUCH TOO LONG, IGNORED) SB7 B1 EQ RCLX * MOVE THE ADDRESS FIELD RCL11 SA1 IN+X5-1 SA4 INL RCL12 BX6 X1 SA6 JN+X2-1 SX2 X2+B1 SX0 X2-N.LINE PL X0,RCL10 IF LINE TOO BIG SX5 X5+B1 IX0 X4-X5 NG X0,RCL15 IF END OF LINE SA1 IN+X5-1 IX0 X1-X3 NZ X0,RCL12 IF NOT TAB CHAR SX6 X2-1 SA6 JNL * TAB CHAR. MOVE REMAINING TEXT INTO LINE AT (TAB+3) OR * (TAB+4) OR END OF ADDRESS FIELD + 1. AT THIS POINT, * X5 _ THE TAB CHARACTER, JNL _ LAST CHAR IN JN. RCL13 SA2 FIT+VTTT SA1 CSYT SX1 X1-SYTP NZ X1,RCL13.1 IF NOT PDP-11 ASSEMBLER SX5 X5-1 KEEP THIS CHARACTER SX6 1R; SA6 IN+X5 REPLACE TAB WITH COMMENT CHARACTER RCL13.1 BSS 0 LX2 6+1+5+4*8 EXTRACT 4TH TAB COLUMN MX1 -8 BX2 -X1*X2 SA1 JNL SX1 X1+B1 IX0 X1-X2 NG X0,RCL14 IF IT GOES IN THE TAB COLUMN SX2 X1+B1 SA1 FIT+VTTT LX1 6+1+5 MX3 -5 BX3 -X3*X1 NUMBER OF TAB CHARACTERS SX0 X3-5 NG X0,RCL14 IF ONLY 4 TAB COLUMNS LX1 5*8 POSITION FIFTH TAB COLUMN MX2 -8 BX2 -X2*X1 SA1 JNL SX1 X1+B1 IX0 X1-X2 NG X0,RCL14 IF FIFTH TAB OK SX2 X1+B1 LEAVE ONE BLANK BETWEEN THE FIELDS RCL14 SX0 X2-N.LINE MOVE CHARS INTO ADDRESS FIELD PL X0,RCL10 IF LINE TOO LONG SX5 X5+B1 IX0 X4-X5 NG X0,RCL15 IF EOL SA1 IN+X5-1 BX6 X1 SA6 JN+X2-1 SX2 X2+B1 EQ RCL14 * END OF LINE, X2 _ END OF LINE + 1 RCL15 SX6 X2-1 SA6 JNL * END OF LINE, JNL _ END OF LINE RCL16 SB7 B0 EQ RCLX EXIT * COMMENT OR CONTINUATION RCL17 IX1 X4-X5 SX6 X1+B1 SA6 JNL MOVE X6,IN+X5-1,JN SB7 B0 EQ RCLX EXIT RCL18 PRINT (SYSTEM COMPASS NEEDS AT LEAST 4 TAB COLS.) SB7 B1 EQ RCLX EXIT RFL SPACE 4,10 **** RCO - REFORMAT COBOL LINE * * ENTRY LINE IN (IN) * * EXIT REFORMATTED LINE IN (JN) * * USES ALL * * CALLS MVE=, BDL RCO SUBR SB7 JN RJ BDL BLANK DISPLAY LINE SA5 INC GET CURRENT COLUMN SA4 INL GET LINE LENGTH SX6 B0 SA6 JNL RCO1 SA1 IN+X5-1 GO TO FIRST CHARACTER SX0 X1-1R NZ X0,RCO2 IF NOT A BLANK SX5 X5+B1 IX0 X4-X5 PL X0,RCO1 IF MORE TO GO SX6 B1 IF WE GOT THIS FAR THEN SA6 JNL IT IS A BLANK LINE SB7 B0 EQ RCOX RCO2 SX0 X1-1R* ZR X0,RCO5 IF COMMENT SX0 X1-1R- ZR X0,RCO5 IF CONTINUATION SX0 X1-1R/ ZR X0,RCO6 IF SUPPRESS TAB CHARACTER FOUND RCO3 IX6 X4-X5 SX6 X6+B1 SX6 X6+7 ADD COLUMNS 1-7 SA6 JNL SX0 X6-N.LINE PL X0,RCO4 IF LINE TOO LONG MOVE X6-7,IN+X5-1,JN+8-1 SB7 B0 EQ RCOX RCO4 PRINT (LINE IS MUCH TOO LONG, IGNORED) SB7 B1 ERROR RETURN CODE EQ RCOX RCO5 BSS 0B PROCESS COMMENTS/CONTINUATIONS SX6 X1 SA6 JN+7-1 PUT CHAR. (- OR *) IN COLUMN 7 SX5 X5+B1 EQ RCO3 GO BACK AND PUT IN THE REST RCO6 BSS 0 PROCESS SUPPRESSION OF TAB TO COLUMN 8 SX5 X5+B1 GO TO NEXT CHARACTER IX6 X4-X5 GET LINE LENGTH SX6 X6+B1 SX6 X6+7 ADD COLUMNS 1-7 SA6 JNL SX0 X6-N.LINE PL X0,RCO4 IF LINE IS TOO LONG MOVE X6-7,IN+X5-1,JN+1-1 SB7 B0 EQ RCOX SPACE 4,10 ** RFL - REFORMAT FORTRAN LINE. * * ENTRY LINE IN (IN) * * EXIT REFORMATTED LINE IN (JN) * * USES ALL. * * CALLS MVE=, BDL RFL SUBR SB7 JN RJ BDL BLANK DISPLAY LINE SA5 INC SKIP LEADING BLANKS SA4 INL SX6 0 SA6 JNL RFL1 SA1 IN+X5-1 SX0 X1-1R NZ X0,RFL3 IF NOT BLANKS SX5 X5+B1 IX0 X4-X5 PL X0,RFL1 IF MORE TO CHECK SX6 B1 BLANK LINE SA6 JNL RFL2 SB7 B0 EQ RFLX EXIT RFL3 SX0 X1-1R* CHECK THE FIRST CHAR ZR X0,RFL7 IF *, COMMENT SX0 X1-1R$ ZR X0,RFL7 IF $, COMMENT SX0 X1-1RC ZR X0,RFL6 IF POSSIBLY A COMMENT (C) SX0 X1-1R+ ZR X0,RFL8 IF CONTINUATION SX0 X1-1R0 PL X0,RFL9 IF POSSIBLE LINE NUMBER * (X5) TO EOL START IN COLUMN 7, MOVE IT. RFL4 IX6 X4-X5 LENGTH OF LINE SX6 X6+B1 SX6 X6+6 PLUS COLUMNS 1-6 SA6 JNL SX0 X6-N.LINE PL X0,RFL5 IF LINE TOO LONG MOVE X6-6,IN+X5-1,JN+7-1 SB7 B0 EQ RFLX EXIT RFL5 PRINT (LINE IS MUCH TOO LONG, IGNORED) SB7 B1 EQ RFLX * "C" - POSSIBLE COMMENT. CHECK NEXT CHARACTER RFL6 IX0 X4-X5 ZR X0,RFL7 IF *C*, COMMENT SA1 IN+X5+1-1 SX0 X1-1R0-9-1 NG X0,RFL4 ALPHANUMERIC, NO COMMENT SX0 X1-1R= ZR X0,RFL4 C=, NO COMMENT SX0 X1-1R( ZR X0,RFL4 C(, NO COMMENT * PROCESS COMMENTS RFL7 IX6 X4-X5 SX6 X6+B1 SA6 JNL SX0 X6-N.LINE PL X0,RFL5 IF LINE TOO LONG MOVE X6,IN+X5-1,JN SB7 B0 EQ RFLX * PROCESS CONTINUATION RFL8 SX6 1R+ PLACE A PLUS SIGN SA6 JN+6-1 SX5 X5+B1 EQ RFL4 * PROCESS A POSSIBLE LINE NUMBER RFL9 SX0 X0-9-1 PL X0,RFL4 IF NOT A NUMBER SX3 X5 RFL10 SX3 X3+B1 SCAN OF END OF NUMBER IX0 X4-X3 NG X0,RFL11 IF END OF LINE SA1 IN+X3-1 SX0 X1-1R0 NG X0,RFL11 IF ALPHA SX0 X0-9-1 NG X0,RFL10 IF NUMERIC * MOVE THE LINE NUMBER RFL11 BX6 X3 SAVE NEW INC SA6 INC IX6 X3-X5 SX0 5 IX0 X0-X6 NG X0,RFL13 IF MORE THAN 5 DIGITS IFEQ IP.LEFT,0 MOVE X6,IN+X5-1,JN+X0 ELSE 1 MOVE X6,IN+X5-1,JN SX6 6 SA6 JNL * SKIP BLANKS TO RIGHT OF THE STATEMENT LABEL. SA5 INC SA4 INL RFL12 IX0 X4-X5 NG X0,RFL2 IF END OF LINE SA1 IN+X5-1 SX5 X5+B1 SX0 X1-1R ZR X0,RFL12 BLANK, SKIP SOME MORE SX5 X5-1 EQ RFL4 MOVE REST OF THE LINE RFL13 PRINT (ILLEGAL STATEMENT LABEL, LINE IGNORED) SB7 B1 EQ RFLX EXIT RIL SPACE 4,10 ** RIL - READ INPUT LINES. * * READS A LINE FROM THE TERMINAL OR FROM THE *READ* * FILE, IF ANY. IF DEBUG=2, THE LINE IS ECHOED TO THE * DEBUG FILE. * * ENTRY RILA IS THE *READ* FLAG * * EXIT X1 HAS THE COMDECK-S READ RETURN STATUS * (KRONOS - EOR IS IGNORED) * * USES ALL * * CALLS RDS, WTS, SYS RIL SUBR SA1 RILA NZ X2,RIL1 IF *READ* MODE RECALL O WAIT FOR TERMINAL OUTPUT TO FINISH RIL1 SA1 RILB ZR X1,RIL2 IF NO READ NEEDED READ I RIL2 READS I,IN,-N.LINE N.LINE CHARS, NO TRAILING SPACE-FILL BX6 X1 SA6 RILB SAVE RETURN CODE SX7 B6-IN SA7 INL KR IFNOS DELETE SINGLE TRAILING BLANK ZR X7,RIL3 IF NO INPUT STUFF MX0 -1 BX1 -X0*X7 CHECK BOTTOM BIT NZ X1,RIL3 IF LENGTH IS ODD SA1 X7+IN-1 SX0 X1-1R NZ X0,RIL3 IF LAST CHAR NOT A BLANK SX7 X7-1 DON-T LET BYTE-FILLING GET YOU DOWN SA7 A7 RIL3 BSS 0 KR ENDIF SX7 B1 SA7 INC SA2 RILA NZ X2,RIL5 IF *READ* MODE SA1 RILB (X1) = *RDS* RETURN CODE SX0 X1+2 ZR X0,RIL4 IF EOI KR IFNOSBE EQ RILX EXIT KR ELSE BX1 -X1 TOGGLE STATUS PL X1,RILX EXIT IF (EOF _ EOR) BX1 X1-X1 EOR, IGNORE IT EQ RILX EXIT KR ENDIF RIL4 MESSAGE (=C= EOI HIT, "LOADFILE" ENDED=) WRITER O,R FLUSH OUTPUT BUFFER ENDRUN FLUSH OUTPUT BUFFER RIL5 SA1 RILB NZ X1,RIL6 IF EOX SA2 USU *USE* SUSPEND WORD SX3 B1 INCREMENT LINE ORDINAL IX6 X2+X3 COUNT LINE JUST *USE*D SA6 A2 SA2 BRIEF NZ X2,RILX IF BRIEF SA1 =10H READING-- BX6 X1 WRITEO O SA5 INL PRINTS INCC,X5+1 IFNOS 1 FLUSH THE OUTPUT WRITER O,R BX1 X1-X1 RETURN NON EOX EQ RILX EXIT RIL6 RECALL I BACK TO TERMINAL MODE SA1 =0L"IFILE" SX0 B1 BX6 X1+X0 SA6 I SX6 B0 SA6 RILA RESET READ FLAG SA6 USU CLEAR *USE* SUSPEND WORD OPEN I,READNR,R SA1 BRIEF NZ X1,RIL7 IF BRIEF PRINT (*USE* COMPLETE.) PRINT ( ) RIL7 EQ RIL1 RILA DATA 0 READ FLAG RILB DATA 1 *READS* RETURN CODE ROT SPACE 4,10 ** ROT - READ ONE TEXT LINE. * * THIS ROUTINE FETCHES THE TEXT LINE FROM DISK OR FROM * THE TEXT INPUT AND OUTPUT BUFFERS. * * THERE ARE TWO INPUT BUFRERS OF ONE PRU EACH, PLUS THE * OUTPUT BUFFER. CHECK THESE FOR THE LINE. IF NOT THERE, * SEE IF WE CAN READ UP TO IT FROM THE LAST PRU GOTTEN. * IF NOT, PERFORM A RANDOM READ. * * ENTRY (X1) = DISK ADDRESS OF THE LINE * X2 _ WHERE TO PUT THE LINE * * EXIT X6 = LENGTH OF LINE * * CALLS CIO,RDW * * USES ALL ROT SUBR BX6 X2 SA6 ROTE STAT$ IFNE STAT$,0 SA2 NROT SX6 X2+B1 SA6 A2 STAT$ ENDIF BX6 X1 AX6 6 PRU NUMBER ZR X6,*+400000B IF ZERO PRU NUMBER SA6 ROTA LX6 6 IX6 X1-X6 SA6 ROTC WORD NUMBER SA1 ROTA BX6 X1 SA1 PRUS IX0 X1-X6 ZR X0,ROT5 IF IN THE LAST PRU READ SA1 A1+B1 IX0 X1-X6 ZR X0,ROT5 IF PRU READ BEFORE LAST SA1 A1+B1 IX0 X1-X6 ZR X0,ROT5 IF IN OUTPUT PRU * WE MUST READ THE TEXT IN. IF THE TEXT LIES * WITHIN *MPS* PRUS OF THE LAST PRU READ (WHICH IS * IN TIN1), SIMPLY READ AHEAD TO THE PRU. IF THAT ISN-T * FEASABLE, PERFORM A RANDOM READ OF THE DESIRED PRU. STAT T,1 TEXT INPUT STATISTICS RJ SRM SET READ MODE SA1 READ SX0 X1-2 CHECK READ STATUS NG X0,ROT2 IF RANDOM READ ONLY SA1 PRUS ZR X1,ROT2 IF NO LAST PRU READ SA2 ROTA IX0 X2-X1 NG X0,ROT2 IF BEFORE TEXT READ SX6 X0-1 NUMBER OF PRUS TO SKIP SX0 X6-MPS-1 PL X0,ROT2 IF GREATER THAN SKIP LIMIT SA6 ROTB BX7 X7-X7 ZERO PRU NUMBER IN SECOND BUFFER SA7 PRUS+1 SA7 T+6 CLEAR PRU NUMBER IN FET SA1 ROTB BX6 X1 STAT$ IFNE STAT$,0 ZR X6,ROT3 IF NO MORE SA1 NSKI SX7 X1+B1 SA7 A1 SA2 SSKI IX7 X6+X2 SA7 A2 STAT$ ENDIF ROT1 ZR X6,ROT3 IF NO MORE SKIPPING STAT$ IFNE STAT$,0 RTIME RT1 STAT$ ENDIF READW T,TIN2,100B SKIP A PRU NZ X1,*+400000B IF EOX STAT$ IFNE STAT$,0 RTIME RT2 SA1 RT1 SA2 RT2 MX0 -36 BX1 -X0*X1 BX2 -X0*X2 IX6 X2-X1 SA1 WSKI IX6 X6+X1 SA6 A1 STAT$ ENDIF SA1 ROTB SX6 X1-1 SA6 ROTB EQ ROT1 * RANDOM READ THE PRU. PUT THE PRU IN THE FET. ROT2 BSS 0 STAT$ IFNE STAT$,0 RTIME RT1 SA1 NRRE SX6 X1+B1 SA6 A1 STAT$ ENDIF RECALL T STAT$ IFNE STAT$,0 RTIME RT2 SA1 RT1 SA2 RT2 MX0 -36 BX1 -X0*X1 BX2 -X0*X2 IX6 X2-X1 SA1 WRRE IX6 X6+X1 SA6 A1 STAT$ ENDIF SA1 ROTA BX6 X1 SA6 T+6 SA1 T+2 CLEAR BUFFER BX6 X1 SA6 A1+B1 SET IN=OUT READ T * BEFORE READING IN THE TEXT, MOVE THE PRU IN TIN1 TO TIN2. * THIS PRU MAY BE NEEDED LATER. ROT3 SA1 PRUS ZR X1,ROT4 IF NOTHING TO MOVE BX6 X6-X6 ZERO IN CASE OF ABORT SA6 A1+B1 MOVE 100B,TIN1,TIN2 SA1 PRUS UPDATE PRU NUMBER BX6 X1 SA6 A1+B1 * READ THE TEXT. AFTER READING, CLEAR THE PRU NUMBER. ROT4 BX6 X6-X6 SA6 PRUS ZERO IN CASE OF ABORT STAT$ IFNE STAT$,0 RTIME RT1 STAT$ ENDIF READW T,TIN1,100B NZ X1,*+400000B IF EOX STAT$ IFNE STAT$,0 RTIME RT2 SA1 RT1 SA2 RT2 MX0 -36 BX1 -X0*X1 BX2 -X0*X2 IX6 X2-X1 SA1 WREA IX6 X6+X1 SA6 A1 SA1 NREA SX6 X1+B1 SA6 A1 STAT$ ENDIF SA1 READ CHANGE READ MODE SX0 B1 IX6 X0+X1 SA6 A1 BX6 X6-X6 SA6 T+6 ZERO PRU NUMBER SA1 ROTA SET PRU NUMBER BX6 X1 SA6 PRUS SA1 A6 SET A1 FOR FOLLOWING CODE * THE LINE IS IN CORE. (A1)-PRUS IS THE ORDINAL OF THE * TEXT BUFFER CONTAINING THE TEXT LINE: 0=TIN1, * 1=TIN1, 2=TOUT. * * FETCH THE LENGTH OF THE LINE, BREAK IT UP, AND RETURN. ROT5 SA1 A1-PRUS+ROTD COMPUTE STARTING ADDRESS SA2 X1 CHECK FIRST WORD OF PRU SA3 ROTA IX0 X2-X3 NZ X0,*+400000B IF IT ISN-T THE RIGHT PRU SA5 ROTC IX1 X1+X5 SA2 ROTE SB4 X2 RJ UPS UNPACK STRING SX6 B4 SA2 ROTE IX6 X6-X2 EQ ROTX EXIT ROTA BSS 1 PRU NUMBER TO GET ROTB BSS 1 PRU SKIP COUNT ROTC BSS 1 ORDINAL OF LINE IN THE BUFFER ROTD CON TIN1 ORDINAL TO BUFFER CONVERSION TABLE CON TIN2 CON TOUT ROTE BSS 1 WHERE TO PUT THE LINE SPACE 4,10 ** RPV - PROCESS REPRIVE. * * THIS ROUTINE RECOVERS FROM AN ABORT OF ONE TYPE OR ANOTHER. * BASICALLY, THERE ARE THREE TYPES OF ABORTS WE CARE ABOUT: * RESOURCE LIMITS, SYSERRS (WHICH ARE MODE ERRORS), AND USER * BREAK/ABORTS. * * WE CLEAN UP FETS CONTAINING PENDING ACTIONS, MAKE SURE THAT * THE TEXT BLOCKS AND CHECKPOINT INFORMATION ARE ALL SAFELY * UPDATED ON DISK, AND PERFORM APPROPRIATE PROCESSING OF THE * ERROR. * * IF TWO ABORTS COME WITHIN 2 SECONDS OF EACH OTHER, WE PRESUME * THAT THE USER IS ABORTING LIKE CRAZY AND WANTS US TO GO AWAY, * SO WE DO. * * ENTRY *SJRA* IS REPREIVE BLOCK * *SJRB* IS EXCHANGE PACKAGE * * EXIT (SJRB) = NZ (AT LEAST (B0) = 1) - USED BY STATUS,D * TO INDICATE EXCHANGE PCKG IS USEFUL. * (RILB) = 1 FOR *RIL*. RPV BSS 0 RTIME RPVA GET CURRENT REAL TIME READING SA1 RPVA SA2 RPVB (X2) = SECONDS AT LAST REPRIEVE IFNOS AX1 36 (X1) = CURRENT SECONDS ELSE MX0 -24 AX1 12 DROP UNITS OF 4096TH OF A SECOND BX1 -X0*X1 (X1) = CURRENT SECONDS ENDIF IX0 X1-X2 (X0) = SECONDS BETWEEN SUCCESSIVE REPRIEVES SX2 B1+B1 (X2) = REPRIEVE TIME DELTA (2 SECONDS) IX0 X0-X2 60-BIT ARITHMETIC NEEDED HERE, BC MI X0,RPV99 IF TOO MANY REPRIEVES TOO SOON, ABORT BX6 X1 SA6 A2 UPDATE TIME RJ RAF RESET ACTIVE FILES RJ VTF VALIDATE TEXT FILE RJ CPD CHECKPOINT DUMP RJ PRA PROCESS ABORT BX6 X6-X6 CLEAR REPREIVE INFO SA6 SJRA+/COMSRPV/PINT PENDING INTERRUPTS SA6 A6+B1 SA6 A6+B1 RJ SJR SET JOB RECOVERY SX6 B1 SA6 RILB SET READ NEEDED FLAG FOR *RIL* SA1 SJRB GET FWA OF EXCHANGE PACKAGE BX6 X1+X6 SET NZ FOR STATUS,D ... (B0) = 1 SA6 A1 * RETURN TO THE APPROPRIATE OVERLAY. IF IT WAS A UTILITY OVERLA * ISSUE A MESSAGE A USE PREVIOUS OVERLAY. SA1 LSOE AX1 6 SX0 X1-1 ZR X0,/READY/READY IF IN *READY* SX0 X1-4 ZR X0,/EDIT/EDIT IF *EDIT* MODE SX0 X1-5 ZR X0,/HELP/RPV IF *HELP* MODE PRINT (COMMAND ABORTED) PRINT ( ) LOAD LAST RPV99 MESSAGE (=C= MULTIPLE ABORTS, "LOADFILE" ABORTED.=) ABORT RPVA BSS 1 *RTIME* STATUS WORD RPVB DATA 0 RTIME OF PREVIOUS ABORT RTL SPACE 4,10 ** RTL - REFORMAT TEXT LINE. * * ENTRY (IN) HAS THE LINE * (INC) IS THE COLUMN FOLLOWING THE LINE NUMBER * (INL) IS THE LAST COLUMN OF THE LINE * (INPF) NOT ZERO IF CALLED FROM THE *INPUT* MODE * (INL) \ (INC) (I.E. AT LEAST ONE CHAR LEFT IN THE L * (X1) IS INPUT-MODE FLAG * * EXIT (IN) CONTAINS THE REFORMATTED LINE * B7 = 0 IF TRANSLATION SUCCESSFUL, ELSE 1 * * USES: ALL REGS. * (JN) AND HIS POINTERS * * CALLS WTC=, RCL, RFL, PTL, MVE=, CDD=, STUFF RTL SUBR SX6 X1 SA6 RTLA SA5 SYS NZ X5,RTL1 IF SYSTEM GIVEN PRINT (NO SYSTEM, LINE IGNORED) SB7 B1 EQ RTLX RTL1 SA1 CFN ZR X1,RTL7 NO CURRENT FILE SA5 CSYT CHECK SYSTEM TYPE SX0 X5-SYTF NZ X0,RTL2 IF NOT FORTRAN RJ RFL REFORMAT FORTRAN LINE NZ B7,RTLX IF BAD CONVERSION EQ RTL6 RTL2 SX0 X5-SYTA ZR X0,RTL2.1 IF CDC ASSEMBLER SX0 X5-SYTP NZ X0,RTL3 IF NOT PDP-11 ASSEMBLER RTL2.1 BSS 0 RJ RCL REFORMAT COMPASS LINE NZ B7,RTLX IF BAD CONVERSION EQ RTL6 * IF NOT SYSTEM BASIC, SKIP THE BLANK (IF ANY) FOLLOWING * THE LINE NUMBER. RTL3 SX0 X5-SYTB ZR X0,RTL4 IF BASIC SX0 X5-SYTC NZ X0,RTL3.1 IF NOT COBOL RJ RCO NZ B7,RTLX IF BAD CONVERSION EQ RTL6 RTL3.1 SA1 RTLA NZ X1,RTL5 IF INPUT MODE SA1 INC SA2 IN+X1-1 SX0 X2-1R NZ X0,RTL5 IF NOT BLANK SX6 X1+B1 SKIP IT SA6 A1 EQ RTL5 * IF BASIC AND INPUT MODE, ADD A BLANK TO THE BEGINNING * OF THE LINE. RTL4 SA1 RTLA ZR X1,RTL5 IF NOT INPUT SX6 1R SA6 INCC SX6 B0 SET START TO COLUMN 0 SA6 INC * MOVE WHATEVER IS LEFT IN THE LINE TO (JN). RTL5 SA2 INC COMPUTE LENGTH OF LINE SA3 INL IX1 X3-X2 SX6 X1+B1 SA6 JNL MOVE X6,X2+IN-1,JN * REFORMATTED TEXT IS IN JN. IF NOT BASIC, PROCESS THE * TABS, WHICH WILL LEAVE THE LINE BAACK IN (IN). RTL6 RJ PTL PROCESS TABS IN LINE NZ B7,RTLX IF ERROR, EXIT SB7 INL (B7) = ADDRESS OF LINE LENGTH RJ CLL CHECK LINE LENGTH SB7 B0 EQ RTLX EXIT RTL7 PRINT (CURRENT FILE NEEDS A NAME, LINE IGNORED) SB7 B1 EQ RTLX EXIT RTLA BSS 1 INPUT-MODE FLAG SCF SPACE 4,10 ** SCF - SAVE CURRENT FILE. * * SAVES ALL OR PART OF THE CURRENT FILE, ADDING LINE * NUMBERS IF APPROPRIATE. * * ENTRY (S) HAS THE FILE NAME W. COMPLETE BIT * (LNR) SET UP WITH LINE RANGES * (SCFE) HAS SYSTEM ORDINAL FOR THIS SAVE * (NFTY) DESIRED RESIDENCY * X6 = 0 IF DON-T WRITE *SAVE* OPTION INFO * ' 0 IF OK * * USES ALL * * CALLS ROT, LNR, WTS, CIO SCF SUBR SA6 SCFD SAVE *OPTION* FLAG IFNOS * IF THIS IS A SAVE OR REPLACE CALL, AND THE FILE MAY * END UP BEING DIRECT, DEFINE IT NOW. ZR X6,SCF0.1 IF NOT SAVE/REPLACE SA1 NFTY LX1 59-1 PL X1,SCF0.1 IF DIRECT ACCESS FILE NOT NEEDED RJ PFD PERM FILE DEFINE SCF0.1 BSS 0 ENDIF REWIND S,R SX6 B1 SET BUFFER-FLUSHED FLAG SA6 SCFA MX6 0 INITIALIZE RECORD/FILE COUNT SA6 SCFC SCF1 RJ NLR NEXT LINE IN RANGE NG B7,SCF12 IF DONE SA1 X6+TTPT SAVE LINE NUMBER MX0 -21 BX6 -X0*X1 SA6 LN AX1 24 MX0 -24 BX1 -X0*X1 SX2 IN RJ ROT READ ONE TEXT LINE SA6 INL SX0 X6-4 CHECK FOR POSSIBLE EOR/EOF ZR X0,SCF9 IF LINE IS FOUR CHARS LONG, TRY EOR.EOF SCF3 BSS 0 PUTI JN SET PUT FWA SA1 SCFE LOOK UP SYSTEM TYPE NG X1,*+400000B IF ILLEGAL SYSTEM SX0 X1-SYSN PL X0,*+400000B IF ILLEGAL SYSTEM SB2 X1 LX1 2 SX1 X1+B2 *5,ENTRY IN *SYST* SA1 SYST+X1 SX0 X1-SYTD ZR X0,SCF6.2 IF DATA .1 IF DEF,SBAS SA1 SCFE SX0 X1-SBAS NZ X0,SCF4 IF NOT BASIC PUTD LN,,,B6 PUT LINE NUMBER SA5 INL PUTS IN,X5,B6 PUT LINE EQ SCF8 .1 ENDIF * BLANK FILL AND ADD THE LINE NUMBER SCF4 SA1 SCFE SB3 X1 LX1 2 SX1 X1+B3 *5,ENTRY IN *SYST* SA1 SYST+X1+4 MX0 -4 BX1 -X0*X1 SA2 X1+SYSL SYSTEM LENGTH SA1 INL SCF5 BSS 0 IX5 X1-X2 # CHARS IN LINE - LINE LENGTH MI X5,SCF6 SX1 X2 SCF6 BSS 0 LX6 X1 PUTS IN,X6,B6 PUT LINE PL X5,SCF6.1 IF NO SPACE-FILL NEEDED BX5 -X5 PUTB X5,B6 SCF6.1 BSS 0 PUTD LN,6,Z,B6 PUT LINE NUMBER EQ SCF8 SCF6.2 BSS 0 SA5 INL PUTS IN,X5,B6 * WRITE THE LINE SCF8 STAT S,4 SOURCE OUTPUT STATISTICS PUTZ PUT EOL WRITEC S,JN WRITE TO SCRATCH FILE BX6 X6-X6 SA6 SCFA CLEAR BUFFER-FLUSHED FLAG EQ SCF1 * POSSIBLE EOR/F SCF9 SA1 IN BX2 X1 DUP 3 GET THE 2-4 CHARS LX2 6 SA1 A1+B1 BX2 X1+X2 ENDD LX2 -4*6 SA1 =4L*EOR IX0 X1-X2 ZR X0,SCF10 IF *EOR SA1 =4L*EOF IX0 X1-X2 NZ X0,SCF3 IF NOT *EOF WRITEF S,R R= X7,1 ASSUME ONLY ONE MARK SA1 SCFA CHECK BUFFER FLUSHED FLAG NZ X1,SCF11 IF PREVIOUSLY FLUSHED, ONLY 1 MARK R= X7,2 EQ SCF11 SCF10 WRITER S,R R= X7,1 ONE MARK SCF11 SX6 B1 SET BUFFER FLUSHED FLAG SA6 SCFA SA1 SCFC COUNT THE MARK IX6 X1+X7 SA6 A1 EQ SCF1 * END OF THE FILE, FLUSH UP IF NOT ALREADY FLUSHED. SCF12 SA1 SCFA NZ X1,SCF13 IF ALREADY FLUSHED WRITEF S,R SA1 SCFC COUNT THE MARK SX6 X1+2 (LEVEL 0 MARK AND LEVEL 17 MARK) SA6 A1 SCF13 SA1 SCFD ZR X1,SCF14 IF DON-T WRITE SENINFO SA1 SVFI ZR X1,SCF14 IF BOTH UAT AND SAVE OFF SA1 =C=SENINFO= SA2 SCFC BX6 X1+X2 HEADER WORD WRITEO S WRITEW S,FIT,FITL WRITER S,R SCF14 REWIND S,R EQ SCFX EXIT SCFA BSS 1 BUFFER-FLUSHED FLAG SCFC BSS 1 COUNT OF RECORD/FILE MARKS WRITTEN SCFD BSS 1 NZ IF OK TO SAVE *SAVE* INFO SCFE BSS 1 SYSTEM ORDINAL FOR THIS *SAVE* SCL SPACE 4,10 ** SCL - SHIFT CODED LINE. * * INSERT CARRIAGE CONTROL INTO A CODED LINE BY RIGHT * SHIFTING THE LINE ONE CHARACTER. * * ENTRY X6 = CARRIAGE CONTROL. * B6 = ADDRESS OF CODED LINE. * B7 = ADDRESS OF SHIFTED LINE. B6 AND B7 MAY BE * EQUAL, WHICH SHIFTS THE LINE IN PLACE, BUT * BEWARE THAT A ZERO BYTE IS QUARANTEED, AND * THE SHIFTED LINE MAY BE ONE WORD LONGER * THAN THE ORIGINAL LINE. * * EXIT A6 = ADDRESS OF LAST MOVED WORD. * A1 = ADDRESS OF LAST WORD IN CODED LINE. * * CALLS NONE. * * USES B - NONE. * A - 1, 6 * X - 1, 2, 3, 4, 6, 7 * SCL1 BSS 0 TOP OF MOVE LOOP ZR X7,SCL2 IF EOL DETECTED AT PREVIOUS WORD BX6 -X3*X1 GET BOTTOM CHARACTER SA1 A1+B1 READ THE NEXT WORD BX7 -X2*X1 CHECK FOR ZERO BYTE BX4 X3*X1 ISOLATE TOP NINE CHARACTERS BX6 X4+X6 INSERT BOTTOM CHAR OF PREVIOUS WORD LX6 -6 ROTATE BOTTOM CHAR TO TOP OF WORD SA6 A6+B1 STORE SHIFTED WORD EQ SCL1 LOOP FOR ALL WORDS SCL2 BSS 0 ENSURE A ZERO BYTE IN SHIFTED LINE BX7 -X2*X6 ZR X7,SCLX EXIT IF ZERO BYTE ALREADY MX6 0 SA6 A6+1 STORE ZERO WORD FOR EOL SCL SUBR ENTRY / EXIT SA1 B6 READ FIRST WORD MX2 -12 ZERO BYTE MASK BX7 -X2*X1 CHECK FOR ZERO BYTE MX3 9*6 PRIMARY MASK, BOZO BX4 X3*X1 GET TOP NINE CHARACTERS BX6 X4+X6 INSERT CARRIAGE CONTROL LX6 -6 POSITION CARRIAGE CONTROL SA6 B7 STORE FIRST WORD EQ SCL1 PROCESS REST OF CODED LINE SPACE 4,10 IFGE DEBUG,1 SET COMMAND ** SET - SET OCTAL VALUES INTO MEMORY. * * SET,ADDR,OCTAL * * WHERE ADDR IS A SENATOR ADDRESS (SEE *GSA*) * OCTAL IS AN OCTAL VALUE, EMBEDDED DELIMS OK * * PUTS THE VALUE INTO CM. IF THE ADDRESS IS * 1, WAIT FOR RA+1 TO CLEAR. SET SUBR RJ GSA GET SENATOR ADDRESS NG B7,SETX IF NO GOOD BX7 X7-X7 ACCUMULATOR SB2 60 BITS LEFT IN X7 SA5 INC SA4 INL SET1 IX0 X4-X5 NG X0,SET2 IF END OF LINE SA1 IN+X5-1 SX5 X5+B1 SX0 X1-1R0 NG X0,SET3 IF ALPHA SX2 X0-7-1 PL X2,SET1 IF DELIMITER SB2 B2-3 LX7 3 BX7 X7+X0 EQ SET1 SET2 SA7 B7 STORE THE VALUE NE B7,B1,SETX IF NOT RA+1 + SA1 1 NZ X1,* WAIT FOR RA+1 TO CLEAR EQ SETX SET3 PRINT (SET FORMAT ERROR) EQ SETX ENDIF SFF SPACE 4,10 ** SFF - SET FREE FIELD. * * THIS ROUTINE SETS THE *FREE* FIELD OF ALL NON- * ZERO TTPT ENTRIES. * * ENTRY (X1): TOP BYTE HAS THE VALUE TO BE USED * CURRENT FILE NOT EMPTY * * EXIT ALL VALUES SET * * USES A 1,5,6 * B 7 * X 0,1,3,4,5,6 * * CALLS DOL, FFL SFF SUBR MX3 12 BX4 X3*X1 RJ FFL FIND FIRST LINE SFF1 SA5 X6+TTPT GET THE ENTRY BX6 -X3*X5 BX6 X6+X4 ADD THE ENTRY SA6 A5 SX1 A5-TTPT RJ DOL DOWN ONE LINE ZR B7,SFF1 IF EOF EQ SFFX EXIT SJR SPACE 4,10 ** SJR - SET JOB RECOVERY * * THIS ROUTINE CALLS THE SYSTEM ERROR TRAP(S) REQUIRED * TO KEEP SENATOR ALIVE AND KICKING IN TIMES OF STRESS. * * CALLS SYS= * * USES ALL SJR SUBR QUAL COMSRPV REPRIEVE SJRA,SETUP,TIMS+PPMS+OTMS+SRMS+EEMS QUAL * EQ SJRX EXIT SJRA RPVBLK RPV,SJRB SLS SPACE 4,10 ** SLS - SEARCH LIST. SEARCHES FOR A MATCH IN A LIST. * * ENTRY B7 = FWA OF LIST * X1 HAS SOUGHT-AFTER, MASKED, ITEM * X0 HAS MASK TO USE ON LIST ENTRIES. * * EXIT X6 = THE ENTRY * = 0 IF NOT FOUND * B7 _ THE ENTRY * * USES A 5 * B 7 * X 5,6 SLS SUBR BX6 X6-X6 SLS1 SA5 B7 ZR X5,SLSX IF NOT FOUND IN LIST BX6 X5 BX5 X0*X6 IX5 X5-X1 ZR X5,SLSX IF DONE SB7 B7+B1 BX6 X6-X6 EQ SLS1 CHECK NEXT ENTRY SNS SPACE 4,10 ** SNS - SET NEW SYSTEM. * * THIS ROUTINE SETS UP A NEW SYSTEM IN THE FILE INFORMATION * TABLE. * * ENTRY B7 _ FILE INFORMATION * X1 = SYSTEM ORDINAL * * EXIT TABLE UPDATED SNS SUBR SA5 B7+VFST UPDATE SYSTEM MX0 42 BX6 X0*X5 BX6 X6+X1 SA6 A5 SB2 X1 LX1 2 *4, ENTRY IN *SYST* SX1 X1+B2 *5, ENTRY IN *SYST* SA2 SYST+X1+3 MOVE TABS BX6 X2 SA2 A2+B1 SA6 B7+VTTT BX6 X2 SA6 A6+B1 SA2 SYST+X1+1 MOVE FIELD LENGTH BX6 X2 SA6 B7+VFLT SA2 A2+B1 BX6 X2 SA6 A6+B1 SX0 B2-SCOM ZR X0,SNS1 IF COMPASS SX0 B2-SFOR ZR X0,SNS1 IF FORTRAN IF DEF,SFTN SX0 B2-SFTN ZR X0,SNS1 IF FTN ENDIF BX6 X6-X6 NO S= OR G= SA6 B7+VSTT SA6 B7+VGTT EQ SNSX EXIT SNS1 SA5 =0L"IP.SYT" BX6 X5 SA6 B7+VSTT SX6 1R0 LX6 54 SA6 B7+VGTT EQ SNSX EXIT SRM SPACE 4,10 ** SRM - SET READ MODE. * * SWITCHES THE TEXT FET/BUFFER TO READ MODE. * * EXIT B7=0 IF ALREADY READ MODE ELSE 1 * * USES ALL * * CALLS CIO SRM SUBR SB7 B0 SA1 READ NZ X1,SRMX IF ALREADY READ MODE, EXIT WRITE T,R FLUSH THE BUFFER SX6 B1 SA6 READ SB7 B1 MX6 0 SA6 VTFB *BUFT* STATE = 0 EQ SRMX EXIT SUF SPACE 4,10 ** SUF - SET AND UNLOAD FILE. * * SETS FET *S* TO A GIVEN FILE NAME AND UNLOADS THE FILE. * * ENTRY X1 = FILE NAME, 0L FORMAT * * EXIT *S* SET, FILE UNLOADED SUF SUBR SX0 B1 ADD COMPLETE BIT BX6 X0+X1 SA6 S SA1 S+1 CLEAR BUFFER SX6 X1 SA6 A1+B1 SA6 A6+B1 CLOSE S,UNLOAD,R EQ SUFX EXIT, DONE SWM SPACE 4,10 ** SWM - SET WRITE MODE. * * SET THE TEXT FILE TO WRITE MODE * * USES ALL * * CALLS WNB, CIO SWM SUBR SA1 READ ZR X1,SWMX IF ALREADY WRITE MODE RECALL T SA1 T+2 EMPTY THE BUFFER BX6 X1 SA6 A1+B1 SX6 B0 SA6 READ SX6 WOTA SET PRU RETURN ADDRESS SA6 T+6 EQ SWMX EXIT SPACE 4,10 IFGE STAT$,1 UBS SPACE 2,5 ** UBS - UPDATE BUFFER STATISTICS. * * THIS ROUTINE EXAMINES THE GIVEN FET AND DETERMINES * HOW MANY WORDS ARE IN THE BUFFER AND WHETHER THE FET IS * BUSY. IT THEN UPDATES THE STATISTICS USING THE GIVEN * STATISTICS ORDINAL. * * ENTRY X1 _ FET * B7 = STATISTICS ORDINAL (1-4) * * CALLS NONE * * USES ALL UBS1 SA5 SWB+B7-1 IX6 X6+X5 SUM WORDS IN BUFFER SA6 A5 SA5 NBC+B7-1 SX6 X5+B1 INCREMENT NUMBER OF BUFFER CHECKS SA6 A5 UBS SUBR SA1 X1 MX0 -1 BX6 -X0*X1 SA5 NQF+B7-1 IX6 X5+X6 UPDATE BUSY-FET COUNT SA6 A5 SA2 A1+B1 FIRST SA3 A2+B1 IN SA4 A3+B1 OUT SA5 A4+B1 LIMIT MX0 -18 BX2 -X0*X2 JUST FIRST BX5 -X0*X5 JUST LIMIT IX7 X5-X2 LENGTH OF BUFFER IX6 X2-X3 WORDS IN BUFFER PL X6,UBS1 IF *IN* GE *OUT IX6 X6+X7 EQ UBS1 SPACE 2,5 ENDIF UOL SPACE 4,10 ** UOL - UP ONE LINE. * * MOVES UP THE FILE ONE LINE * * ENTRY X1 = ORDINAL IN TTPT OF THE LINE * * EXIT B7 = 0, X6 = ORDINAL OF LINE * X5 = TTPT ENTRY * B7 = 1, TOP OF FILE HIT * * USES A 5 * X 5,6 UOL1 ZR X6,UOLX IF TOP OF FILE SX6 X6-1 SA5 X6+TTPT ZR X5,UOL1 IF ZERO SB7 0 UOL SUBR NG X1,*+400000B IF BAD START SB7 B1 BX6 X1 EQ UOL1 UPS SPACE 4,10 ** UPS - UNPACK STRING. * * THIS ROUTINE UNPACKS A STRING IN SENATOR-S PACKED-STRING * FORM INTO R1 FORMAT. * * ENTRY B4 _ UNPACKED LINE * X1 _ PACKED LINE * * EXIT B4 _ LWA+1 OF R1 STRING * A1 _ LWA OF PACKED LINE * * USES * * CALLS NONE UPS SUBR SA1 X1 FETCH FIRST WORD OF THE LINE LX1 2*6 POSTION LENGTH OF LINE SB7 10-2 CHARS LEFT IN THE WORD MX0 -12 BX6 -X0*X1 EXTRACT LINE LENGTH IN CHARS SB6 X6 B6 = CHARS LEFT IN THE LINE NG B6,*+400000B IF NEGATIVE LINE LENGTH SX0 B6-N.LINE-1 PL X0,*+400000B IF LINE TOO LONG MX0 -6 CHAR MASK ZR B6,UPSX IF ZERO LENGTH LINE UPS1 LX1 6 BX6 -X0*X1 EXTRACT A CHAR SA6 B4 SB4 B4+B1 SB6 B6-B1 CHARS LEFT IN LINE ZR B6,UPSX IF END OF LINE, EXIT SB7 B7-B1 GT B7,B0,UPS1 IF MORE CHARS IN THIS WORD SA1 A1+B1 NEXT WORD SB7 10 EQ UPS1 UTS SPACE 4,10 ** UTS - UNPACK TEXT STRING. * * THIS ROUTINE TAKES A CHARACTER STRING IN X1 AND UNPACKS * IT TO A STRING BUFFER. * * ENTRY (X1) = PACKED CHARACTERS, L FORMAT * (B7) _ STRING BUFFER * * EXIT (A6) _ LAST CHARACTER STORED * * CALLS NONE * * USES B 7 * A 6 * X 0,1,6 UTS SUBR MX0 -6 LX1 6 BX6 X1 SAVE X1 SA1 B7-1 BX6 X1-X6 SWAP X6 AND X BX1 X6-X1 BX6 X1-X6 SA6 A1 UTS1 ZR X1,UTSX IF WORD IS NOW EMPTY BX6 -X0*X1 EXTRACT NEXT CHAR BX1 X0*X1 DELETE THE CHAR SA6 A6+B1 LX1 6 EQ UTS1 NEXT CHAR VCF SPACE 4,10 ** VCF - VERIFY CURRENT FILE. * * THIS ROUTINE CHECKS THE CURRENT FILE TO MAKE SURE IT * IS NOT EMPTY/UNDEFINED. * * EXIT B7 = 0 IF CURRENT FILE OK ELSE 1 * * USES ALL * * CALLS WTC VCF1 PRINT (NO FILE) SB7 B1 VCF SUBR SB7 B0 SA1 CFN ZR X1,VCF1 IF NO FILE NAME SA1 SYS ZR X1,VCF1 IF NO SYSTEM SA1 LEN ZR X1,VCF1 IF NO LINES EQ VCFX EXIT VTF SPACE 4,12 ** VTF - VALIDATE TEXT FILE. * * THIS ROUTINE INSPECTS THE TEXT FILE STATE FLAGS AFTER A * REPRIEVE AND PERFORMS ANY NECESSARY CLEANUP. SOME PROBLEMS * THAT MAY ARISE ARE: * * A *TTPT* ENTRY IS STORED WITH A PARTICULAR DISK ADDRESS. * THAT LINE OF TEXT, HOWEVER, MAY STILL BE SITTING IN EITHER * OF THE (BUFT) OR (TOUT) BUFFERS, WAITING TO BE WRITTEN TO * DISK. IF THE BUFFER(S) NEVER GET FLUSHED DUE TO A USER * ABORT OR TIME LIMIT AND THE DATA NEVER GETS WRITTEN TO DISK * WE HAVE A SYSERR SITUATION WHEN *ROT* TRIES TO READ THE * NON-EXISTANT PRU. * * ANOTHER POSSIBILITY IS THAT A PRU MAY BE WRITTEN TO DISK BUT * (PRUS+2) AND/OR (TWRD) NEVER GET UPDATED. * * THEREFORE, TWO STATE FLAGS ARE MAINTAINED, ONE FOR (BUFT) AND * ONE FOR (TOUT). THE POSSIBLE STATES ARE: * * (VTFA) = *TOUT* STATE * 0 = NOTHING IN (TOUT). SET BY *WPD*. * 1 = TEXT LINES RESIDE IN (TOUT) AND (TWRD) UPDATED. * SET BY *WOT*. * 2 = TEXT MOVED FROM (TOUT) TO (BUFT) BUT (PRUS+2) AND * (TWRD) HAVE NOT BEEN UPDATED. SET BY *WPD*. WHEN * THESE POINTERS ARE UPDATED, *WPD* CLEARS (VTFA). * * (VTFB) = *BUFT* STATE * 0 = NOTHING IN (BUFT). SET BY *SRM*. * 1 = POSSIBLE BUFFERED DATA IN (BUFT). SET BY *WPD*. * * * ENTRY (VTFA) = *TOUT* STATE. * (VTFB) = *BUFT* STATE. * * EXIT TEXT FILE + POINTERS RECOVERED, HOPEFULLY. * * CALLS *SRM*, *WPD*. * * USES B - NONE. * A - 1, 5, 6. * X - 0, 1, 5, 6. VTF SUBR * CHECK MODE OF TEXT FILE FET/BUFFER AND COMPARE WITH STATE * FLAGS. IN READ MODE THERE CANNOT BE ANY DATA IN (BUFT). SA1 READ SA5 VTFB (X5) = *BUFT* STATE ZR X1,VTF1 IF IN WRITE MODE NZ X5,*+400000B READ MODE WITH WRITE DATA, BAD VTF1 BSS 0 PROCESS *BUFT* STATES ZR X5,VTF2 IF NOTHING IN *CIO* BUFFER RJ SRM SET READ MODE, FLUSH (BUFT) TO DISK VTF2 BSS 0 PROCESS *TOUT* STATES SA5 VTFA (X5) = *TOUT* STATE ZR X5,VTFX IF NOTHING IN (TOUT), DONE SX0 X5-1 NZ X0,VTF3 IF NOT STATE = 1 RJ WPD WRITE PRU TO DISK EQ VTFX VTF3 BSS 0 STATE = 2 SA1 PRUS+2 SX6 X1+B1 SA6 A1 UPDATE NEXT PRU NUMBER SA6 TOUT INITIALIZE (TOUT) SX6 B1 SA6 TWRD INDICATE 1 WORD IN BUFFER MX6 0 SA6 VTFA CLEAR STATE FLAG EQ VTFX VTFA CON 0 *TOUT* STATE VTFB CON 0 *BUFT* STATE WOT SPACE 4,10 ** WOT - WRITE ONE TEXT LINE. * * THIS ROUTINE ENTERS A LINE INTO THE OUTPUT PRU, * WRITING IT TO THE FILE IF NECESSARY. * * ENTRY (WOTB) HAS THE LINE * (WOTC) IS THE LENGTH OF THE LINE * * EXIT X6 HAS THE DISK ADDRESS OF THE FILE * * USES ALL * * CALLS WTW WOT SUBR STAT$ IFNE STAT$,0 SA1 NWOT SX6 X1+B1 SA6 A1 SA1 WOTC SA2 SLEN IX6 X1+X2 SA6 A2 STAT$ ENDIF SA1 PRUS+2 NZ X1,WOT1 IF WE HAVE A PRU NUMBER SA1 NPRU BX6 X1 SA6 PRUS+2 WOT1 SA1 TWRD NZ X1,WOT2 IF NOT FIRST SA1 PRUS+2 BX6 X1 SA6 TOUT SET PRU NUMBER IN PRU SX6 B1 SA6 TWRD WOT2 SA1 WOTC STRLEN X1 SA2 TWRD IX7 X2+X6 SX0 X7-100B-1 NG X0,WOT3 IF ROOM IN THIS PRU RJ WPD WRITE PRU TO DISK WOT3 SA1 WOTC MOVE THE TEXT TO THE BUFFER BX6 X1 SA1 TWRD SB2 X1+TOUT B2 _ NEXT ADDRESS IN *TOUT* SA1 WOTB SA1 X1-1 RJ PKS PACK STRING SA1 TWRD COMPUTE NEW TWRD SX6 A6-TOUT+1 SA6 A1 SX6 B1 SA6 VTFA *TOUT* STATE = 1 SA2 PRUS+2 LX2 6 BX6 X1+X2 EQ WOTX EXIT WOTA BSS 1 PRU RETURN WORD WOTB BSS 1 START OF UNPACKED LINE WOTC BSS 1 LENGTH OF UNPACKED LINE WPD SPACE 4,10 ** WPD - WRITE PRU TO DISK. * * THIS ROUTINE WRITES THE PRU IN *TOUT* TO THE END * OF THE SCRATCH TEXT FILE. ALL APPROPRIATE POINTERS * AND COUNTERS ARE UPDATED. * * USES ALL * * CALLS WTW, SYS=, FBL, SWM WPD SUBR RJ SWM SET WRITE MODE STAT T,2 TEXT OUTPUT STATISTICS STAT$ IFNE STAT$,0 RTIME RT1 STAT$ ENDIF WRITEW T,TOUT,100B SX6 B1 SA6 VTFB *BUFT* STATE = 1 SX6 X6+B1 SA6 VTFA *TOUT* STATE = 2 STAT$ IFNE STAT$,0 RTIME RT2 SA1 RT1 SA2 RT2 MX0 -36 BX1 -X0*X1 BX2 -X0*X2 IX6 X2-X1 SA1 WWRI IX6 X6+X1 SA6 A1 SA1 NWRI SX6 X1+B1 SA6 A1 STAT$ ENDIF SA1 PRUS+2 SX6 X1+B1 SA6 A1 SA6 TOUT SX6 B1 SA6 TWRD MX6 0 SA6 VTFA *TOUT* STATE = 0 EQ WPDX WTA SPACE 4,10 IFNOSBE ** WTA - WRITE ASCII TO TERMINAL. * * SETS THE FET TO 256-ASCII MODE AND WRITES THE GIVEN * DATA. THEN IT RESETS TO FET TO 64-CHAR MODE AND EXITS. * * ENTRY X2 _ FET * B6 _ WSA * B7 = LENGTH(WSA) * * EXIT X2 _ FET * * CALLS WTW, CIO WTA SUBR SA1 X2+B1 SET MUJ BIT MX6 1 LX6 42-59 BX6 X6+X1 SA6 A1 SA1 X2+5 SET ASCII-256 MODE MX6 1 LX6 23-59 BX6 X6+X1 SA6 A1 RJ WTW= WRITE ASCII WORDS WRITER X2,,RCL FLUSH THE BUFFER SA1 X2+B1 UNSET MUJ BIT MX6 1 LX6 42-59 BX6 -X6*X1 SA6 A1 SA1 X2+5 MX6 1 LX6 23-59 BX6 -X6*X1 SA6 A1 EQ WTAX EXIT ENDIF TITLE 0,0 OVERLAY - COMDECKS. ** COMMON DECKS. XTEXT COMCCDD XTEXT COMCCIO XTEXT COMCDXB XTEXT COMCMVE XTEXT COMCRDO XTEXT COMCRDS XTEXT COMCRDW XTEXT COMCWTW *CALL COMCSZC XTEXT COMCSYS XTEXT COMCWTC XTEXT COMCWTO XTEXT COMCWTS XTEXT COMCCOD *CALL COMCPTI *CALL COMCPTB *CALL COMCPTN *CALL COMCPTS *CALL COMCPTZ *CALL COMCVFN SPACE 4,10 IFNOS XTEXT COMCCPM XTEXT COMCLFM XTEXT COMCPFM ELSE XTEXT COMCOVL ENDIF SPACE 4,10 USE LITERALS READY EQU *+1 INI TITLE 0,0 OVERLAY - INITIALIZATION. IDENT INITIALIZATION ORG READY INI SPACE 2 QUAL SCP ** INTERNAL CONTROL STATEMENT ARGUMENTS. * * RST RESTART SENATOR * RSTB RESTART AND SET BRIEF MODE * RSTN RESTART AND UNSET BRIEF MODE * EDITB RESTART EDIT BRIEF * EDITN RESTART EDIT, NO BRIEF * ERRORS SCAN A LISTING FOR ERRORS. * P2=SYSTEM, P3=FILE QUAL SENATOR BSS 0 SEN EQU SENATOR QUAL * INI SB1 1 SENATOR ENTRY POINT * CHECK OUR LOAD FILE AND MAKE SURE IT IS OK SA1 LWPR LX1 59-18 MI X1,INI1 IF LOADED FROM LIBRARY SA1 PGNR MX0 42 BX6 X0*X1 CHECK LOAD FILE SA1 =0L"LOADFILE" IX0 X1-X6 ZR X0,INI1 IF OK MESSAGE (=C=SENATOR MUST BE LOADED FROM FILE "LOADFILE"=) ABORT INI1 BSS 0 * PROCESS THE PARAMETER SA1 ARGR MX0 42 BX1 X0*X1 BX6 X1 SA6 INIM SAVE TYPE OF SENATOR CALL KR IFNOS SA2 =0L"OFILE" SETUP FET POINTER FOR 1RO SX6 O BX6 X6+X2 SA6 ARGR KR ENDIF ZR X1,INI4 IF NO PARAM, ASSUME RESTART SB7 INIA RJ SLS SEARCH LIST OF PARAMETERS ZR X6,INI4 IF NOT FOUND ASSUME *RST* SB7 X6 JP B7 PROCESS THE PARAMETER INIA BSS 0 RST TABLE INI4 RSTB TABLE INI2 RSTN TABLE INI3 NEW TABLE INI7 SCOPE TABLE INI11 SCO TABLE INI12 SCP TABLE INI13 S TABLE INI14 ERRORS TABLE ERR1 EDIT TABLE INI4 EDITN TABLE INI3 EDITB TABLE INI2 DATA 0 * RESTART SENATOR. LOAD THE CHECKPOINT PACKAGE AND * LOAD AND ENTRY THE 1,0 OVERLAY. INI2 SX6 B1 SET BRIEF PROCESSING FLAG SA6 INIB EQ INI4 INI3 SX6 B1+B1 BRIEF FLAG SA6 INIB INI4 BSS 0 SX6 B1 SET READ-NEEDED FLAG SA6 RILB * ATTEMPT A RESTART RJ RCP READ CHECKPOINT PACKAGE NZ B7,INI7 IF BAD, *SCR* SA1 INIB ZR X1,INI5 IF NO CHANGE TO BRIEF SA1 X1+INIC-1 BX6 X1 SA6 BRIEF INI5 RJ SJR SET JOB RECOVERY IFNOS SA1 JOT SX0 X1-TXOT NZ X0,INI5.1 IF NOT INTERACTIVE PROMPT OFF TURN OFF IAF QUESTION MARK CSET NORMAL INI5.1 BSS 0 ENDIF RJ ERC EAT REMAINING CONTROL CARDS RJ CTF CONNECT TERMINAL FILES RJ PUF POSITION USE FILE IFNOS 1 PACKNAM PN,N GET PACKNAME IN EFFECT SA1 PRCA SEE IF *PRC* IN EFFECT NZ X1,INI6 YES, BACK TO *EDIT* OVERLAY SA1 INIM RESTART OR EDIT LX1 6 MX0 -6 BX6 -X0*X1 SX0 X6-1RE ZR X0,INI6 IF START UP *EDIT* LOAD 1 ELSE ENTER *READY* MODE INI6 BSS 0 LOAD 4,/EDIT/INI ENTER *EDIT* MODE * SCRATCH START, INITIALIZE THINGS AND GET THE STARTING FILE. INI7 MEMORY CM,INID,R,ENDSEN * UNLOAD TEXT FILE FOR SCRATCH START. SA1 T+1 MX0 1 LX0 47-59 BX6 -X0*X1 SA6 A1 UNSET RANDOM BIT CLOSE T,UNLOAD,RCL SA1 T+1 MX0 1 LX0 47-59 BX6 X0+X1 SA6 A1 SET RANDOM BIT IFNOSBE BX6 X6-X6 SA6 INIL SYSTEM RWE,R,A6 SA1 INIL TERMINAL TYPE INFORMATION MX0 12 LX1 12 BX6 X0*X1 (X6) = 0 IFF BATCH SA6 JOT SET JOB ORIGIN TYPE ELSE SA1 JOPR MX0 -12 LX1 0-24 BX6 -X0*X1 SA6 JOT SAVE JOB ORIGIN TYPE SX0 X6-TXOT NZ X0,INI7.1 IF NOT INTERACTIVE PROMPT OFF TURN OFF IAF QUESTION MARK CSET NORMAL INI7.1 BSS 0 ENDIF RJ ERC EAT REMAINING CONTROL STATEMENTS RJ CTF CONNECT TERMINAL FILES PRINT (SENATOR VER "VER") * INITIALIZE THE CHECKPOINT PACKAGE SA1 =10H"DATE" BX6 X1 SA6 DATI SA1 =10H"TIME" BX6 X1 SA6 A6+B1 SX6 ENDSEN SA6 FL MX6 0 SX7 SYTD SYSTEM TYPE = DATA SA7 CSYT CURRENT SYSTEM TYPE SA6 PRC CLEAR *PROCESS READY COMMAND* OPTION SA6 SYS SA6 USU CLEAR *USE* SUSPEND WORD SA6 FALA SA6 DEST SA6 BRIEF SA6 LTIME SA6 TTPTE SA6 TTPT SA6 LEN SA6 LAST SA6 SVFI IFNOS SX6 6B ASSUME PERM FILE ELSE SX6 2 DEFAULT *TYPE* = P ENDIF SA6 CTY SA1 =1LP BX6 X1 SA6 TYPE INITIALIZE DEFAULT TYPE (L-FORMAT) BX6 X6-X6 EDIT INITIALIZATION SA6 PRCA CLEAR FLAG SET BY EDIT WHEN CALLING READY SA6 DALL SA6 DTOP SA6 DUNIT SA6 DVETO SA6 MDFP SA6 MDAL SA6 EPNT SA6 ERANGE SA6 DNDIS SA6 TLCI SA1 =999999D BX6 X1 SA6 ERANGE+1 SX6 B1 SA6 DNZONE SX6 N.LINE LX6 30 SA6 DZONE SA6 DDIS SA1 FL SX6 X1-TTPT+1-10B SA6 FREE SX6 B1 SA6 NPRU SA6 PRUS+2 * ZERO THE FILE INFORMATION TABLE SB7 FITL BX6 X6-X6 INI8 SB7 B7-B1 SA6 FIT+B7 NZ B7,INI8 IF MORE TO ZERO SX6 1R; SET DEFAULT TAB CHAR LX6 54-0 SA6 FIT+VTTT SA1 =0LNONAME BX6 X1 SA6 CFN SA6 FIT+VFST DEFAULT FILENAME = NONAME.DATA IFNOSBE BX6 X6-X6 SA6 TK SA6 XR SA6 RD NO RD PASSWORD SA6 SN NO SETNAME MX6 29 SA6 MFL MEMORY CM,MFL,R SA1 MFL AX1 30 SX6 101B IX6 X1-X6 FOR *RCP* SA6 A1 ELSE MX6 29 SA6 MFL MEMORY CM,MFL,R RETURN MAX FL SA1 MFL AX1 30 SX6 101B IX6 X1-X6 FOR *RCP* SA6 A1 SET MAX FL SX6 B0 NO INITIAL PASSWORD SA6 PW ENDIF STAT$ IFNE STAT$,0 BX6 X6-X6 CLEAR STATISTICS SA6 NROT SA6 NSKI SA6 SSKI SA6 NREA SA6 NRRE SA6 WRRE SA6 WREA SA6 WSKI SA6 NWOT SA6 SLEN SA6 NWRI SA6 WWRI SA6 NBC DUP 3,1 SA6 A6+B1 SA6 SWB DUP 3,1 SA6 A6+B1 SA6 NQF DUP 3,1 SA6 A6+B1 STAT$ ENDIF IFNOSBE * INITIALIZE THE PERM FILE PARAMETERS. THE ID * COMES FROM THE USER ID FOR THIS FELLOW, WHICH * IS DERIVED FROM THE FIRST TWO CHARACTERS OF THE * JOB NAME. SYSTEM LDL,R,INIG SA1 INIH MX0 12 LX1 12 BX6 X0*X1 SA6 ID LX6 12 RIGHT JUSTIFY SA6 UID SA1 =3L999 DEFAULT RP = INFINITE BX6 X1 SA6 RP * FIND THE SYSTEM PF SETNAME FOR *PFM*. SYSTEM FSN,R,ININ,1*100B CODE = 1, DEFAULT PUBLIC PF SET SA1 ININ+1 MX0 42 BX6 X0*X1 SA6 PS SAVE PF SETNAME ZR X6,*+400000B MUST HAVE A DEFAULT SETNAME SA6 SN INTIALIZE THE SETNAME * DEST=C FOR OUTPUT COMMAND. SX6 1RC LX6 -6 SA6 DEST CENTRAL SITE IS DEFAULT DESTINATION ELSE USERNUM IUN GET INITIAL USER NUMBER SA1 IUN BX6 X1 SA6 UN SET CURRENT USER NUMBER PACKNAM PN,N GET PACKNAM IN EFFECT SETFS C,NAD ENDIF * CHECK FOR LOADFILE,NEW,LFN * * IF LFN, SET READ MODE SA1 ACTR SX0 X1-2B NZ X0,INI9 IF NO 2ND PARAMETER SA1 ARGR+1 MX0 42 BX1 X0*X1 RJ VFN VERIFY FILE NAME NZ X6,INI9 IF ILLEGAL ZR X1,INI9 IF NULL FILE NAME SX0 B1 ADD COMPLETE BIT BX6 X1+X0 SA6 I BX7 X0-X6 REMOVE COMPLETE BIT SA7 USU 42/*USE* LFN, 18/LINE ORDINAL=0 SX6 B1 SA6 RILA SA6 RILB SET READ NEEDED FLAG FOR *RIL* REWIND I SX6 B1 SA6 BRIEF EQ INI10 * GET FIRST FILE NAME AND SYSTEM INI9 SX6 B0 SA6 INL SX6 B1 SA6 INC RJ SJR SET JOB RECOVERY SX6 SDAT SA6 SYS LOAD 1 INI10 RJ SJR SET JOB RECOVERY SX6 SDAT SET SYSTEM DATA SA6 SYS SET DEFAULT SYSTEM LOAD 1 * * INITIALIZE THE BRIEF FLAG FOR SCP/SCOPE, AND SET SCP/SCOPE MODE. * INI11 BSS 0 MX6 0 BX7 -X7-X7 EQ INI15 INI12 BSS 0 SX6 B1 BX7 -X7-X7 EQ INI15 INI13 BSS 0 MX6 0 BX7 -X7*X7 EQ INI15 INI14 BSS 0 SX6 B1 BX7 -X7*X7 * EQ INI15 INI15 BSS 0 SA6 SCPH SET OR CLEAR BRIEF SA7 SCPD SET SCP/SCOPE MODE RJ CTF CONNECT TERMINAL FILES IFNOS SA1 JOPR MX0 -12 LX1 0-24 BX0 -X0*X1 SX0 X0-TXOT NZ X0,INI16 IF NOT INTERACTIVE PROMPT OFF TURN OFF QUESTION MARK PROMPT CSET NORMAL INI16 BSS 0 ENDIF EQ SCP= ENTER SCP/SCOPE INIB BSSZ 1 BRIEF PROCESSING FLAG INIC DATA 1 SET BRIEF MODE DATA 0 UNSET BRIEF INID BSS 1 MEM CALL WORD INIF DATA 0L"OFILE" INIG VFD 6/0,18/INIH,12/1,12/25B,12/2 INIH BSS 1 LDL CALL WORD INIL BSSZ 1 *RWE* STATUS WORD INIM BSS 1 TYPE OF RESTART (COPY OF RA.ARG) IFNOSBE ININ VFD 42/7LFAKEFDB,18/0 FAKE FDB FOR *FSN* VFD 42/0,18/40B SN GOES HERE ENDIF SPACE 4,10 ** CTF - CONNECT TERMINAL FILES. * * CONNECTS/ASSIGNS THE I/O FILES IF THEY ARE NOT * ALREADY ASSIGNED TO THE TERMINAL. IN SCOPE, *CON* * IS CALLED. THE FILES ARE NOT CONNECTED IF THIS IS * NOT AN INTERACTIVE JOB. * EXIT *I* AND *O* ARE OPENED AND CONNECTED CTF SUBR IFNOSBE SYSTEM CON,R,CTFA SYSTEM CON,R,CTFB OPEN I,READNR,R OPEN O,WRITENR,R EQ CTFX EXIT CTFA DATA 0L"IFILE" CTFB DATA 0L"OFILE" ELSE NOS OPEN I,READNR,R OPEN O,WRITENR,R SA1 JOPR MX0 -12 LX1 0-24 BX1 -X0*X1 EXTRACT JOB ORIGIN TYPE SX0 X1-TXOT NZ X0,CTFX IF NOT *TELEX*, DON'T CONNECT SA1 I+1 IF THE FILE IS NOT *TT*, ASSIGN IT MX0 12 BX2 X0*X1 LX2 0-48 SX3 X2-2RTT ZR X3,CTF1 IF CONNECTED RETURN I,R MX0 12 SA1 I+1 BX6 -X0*X1 SX2 2RTT LX2 48-0 BX6 X6+X2 SA6 A1 REQUEST I,U,N ASSIGN THE FILE OPEN I,READNR,R CTF1 SA1 O+1 CONNECT OUTPUT MX0 12 BX2 X0*X1 LX2 0-48 SX3 X2-2RTT ZR X3,CTFX IF CONNECTED, EXIT RETURN O,R MX0 12 SA1 O+1 BX6 -X0*X1 SX2 2RTT LX2 48-0 BX6 X6+X2 SA6 A1 REQUEST O,U,N ASSIGN THE FILE OPEN O,WRITENR,R EQ CTFX EXIT, DONE ENDIF PUF SPACE 4,8 ** PUF - POSITION USE FILE. * * IF WE WERE PREVIOUSLY IN *USE* MODE, THEN POSITION THE FILE * AFTER THE LAST COMMAND PROCESSED. * * ENTER (USU) = *USE* SUSPEND WORD. * * EXIT *USE* MODE ENABLED IF NEEDED. PUF SUBR SA1 USU ZR X1,PUFX IF NOT IN *USE* MODE MX0 42 BX6 X0*X1 MX0 -1 BX6 -X0+X6 SA6 I SETUP INPUT FET WITH *USE* LFN SA6 RILA SET *USE* MODE FLAG FOR *RIL* REWIND I,R READ I,RCL SA1 USU SX5 X1 (X5) = LINE ORDINAL OF LAST COMMAND PUF1 BSS 0 SX5 X5-1 MI X5,PUFX EXIT, *USE* FILE POSITIONED READC I,IN BYPASS ALREADY PROCESSED COMMAND EQ PUF1 RCP SPACE 4,10 ** RCP - READ CHECKPOINT PACKAGE. * * RCP READS IN THE CHECKPOINT PACKAGE IN PREPARATION * FOR A RESTART. * * EXIT B7 = 0 IF SUCCESSFUL ELSE 1 * * USES ALL * * CALLS RDW, SYS RCP SUBR BX6 X6-X6 SA6 RCPA MEMORY CM,RCPA,R,ENDSEN MINIMUM FL OPEN C,ALTER,R SA1 C+1 FIRST SX6 X1 SA6 A1+B1 (IN) = FIRST SA6 A6+B1 (OUT) = FIRST SX6 ENDSEN SA6 A6+B1 (LIMIT) = ENDSEN READ C,R SA1 C+2 SX0 X1-1 (X0) = IN - 1 = LWA READ IN SB7 B1 ASSUME NO GOOD SX6 X0-DATI-1 MI X6,RCPX IF DATI NOT READ IN SX6 X0-FL+1 MI X6,RCPX IF FL NOT READ IN SA1 =10H"TIME" SA2 =10H"DATE" SA3 DATI BX6 X2-X3 SA3 A3+B1 BX3 X3-X1 BX6 X6+X3 NZ X6,RCP3 IF NON-MATCHING CKP SA1 FL CHECK FOR MORE FL NEEDED SX0 X1-ENDSEN ZR X0,RCP1 IF FL OK SX7 X1 SA7 C+4 MEMORY CM,RCPA,R,X7+1 RCP1 SA1 C+2 IN SA2 A1+B1 OUT SX6 X1 SX2 X2 IX0 X6-X2 SB7 B1 MI X0,RCPX IF (IN) < (OUT), WRAPPED AROUND SA3 A2+B1 SX3 X3-1 IX0 X6-X3 SB7 B0 OK TO RETURN SA6 A2 (OUT) = (IN) SA1 C LX1 59-4 MI X1,RCPX IF EOR/EOF DETECTED READ C,R READ SOME MORE EQ RCP1 RCP2 SA1 C MAKE SURE READ ENDED IN EOR STATUS LX1 59-4 PL X1,RCPX IF NOT EOR SB7 B0 EQ RCPX EXIT RCP3 MESSAGE (=C*VERSION MISMATCH, SENATOR ABORTED*) ABORT RCPA BSS 1 MEM SCRATCH WORD ERC SPACE 4,10 ** ERC - EAT REMAINING CONTROL STATEMENTS. * * EATS UP ANY REMAINING CONTROL STATEMENTS. ERC SUBR IP.OS IFNOSBE SA1 JOT ZR X1,ERCX EXIT IF BATCH ENCSF =0,=0 ENTER EMPTY CONTROL STATEMENT FILE EQ ERCX DONE IP.OS ELSE SA1 JOT SX0 X1-TXOT NZ X0,ERCX IF NOT *TELEX* SA1 =0L"SFILE" RJ SUF SET AND UNLOAD FILE ENCSF S ENTER EMPTY CONTROL STATEMENT FILE EQ ERCX IP.OS ENDIF SCP TITLE 0,0 OVERLAY - SCP/SCOPE. SSE SPACE 4,10 ** SSE - DEFINE SPECIAL ENTRIES FOR SCP/SCOPE. * * SE SSE PA * * SE = SPECIAL ENTRY * PA = PROCESSING ADDRESS * * PLEASE KEEP THE ENTRIES IN ORDER ACCORDING TO LENGTH. * MACRO SSE,SE,PA .A MICRO 1,, SE .B MICCNT .A IFGT .B,5,1 P ERR SE TOO LONG, MAX CHARACTERS IS FIVE. .C DECMIC .B + VFD 6/0,30/".C"_R_SE,6/.B,*P/PA IF -DEF,SSEM,1 SSEM SET 0 SET INITIAL MAX LENGTH OF ENTRIES SSEM MAX SSEM,.B DEFINE MAX LENGTH OF ANY ENTRY SSE ENDM TSSE SPACE 4,10 **** TSSE - TABLE OF SCP/SCOPE SPECIAL ENTRIES. TSSE BSS 0 . SSE SCP13 TOGGLE BRIEF MODE + SSE SCP14 TURN ON ECHO /Z SSE SCP72 UNLOAD ALL SCRATCH FILES /L SSE SCP18 INITIATE LOAD MODE /X SSE SCP19 TERMINATE LOAD OR AUTO-LOAD MODE /D SSE SCP8 DELETE LAST LOADED CONTROL STATEMENT /S SSE SCP75 SHOW ACCUMULATED CONTROL STATEMENTS /A SSE SCP80 ABORT LOAD OR AUTO-LOAD MODE IFNOS 1 BYE SSE SCP82 BYE - LOGOUT EDI SSE SCP74 ENTER *EDIT* MODE END SSE SCP71 EXIT *SENATOR* REA SSE SCP70 BACK TO *READY* MODE STA SSE SCP54 PRINT CURRENT STATUS SCO SSE SCP15 ENTER *SCOPE* MODE SCP SSE SCP16 ENTER *SCP* MODE EDIT SSE SCP74 ENTER *EDIT* MODE HELP SSE SCP99 PRINT HELP INFORMATION READY SSE SCP70 BACK TO *READY* MODE SCOPE SSE SCP15 ENTER *SCOPE* MODE DATA 0 END OF -TSSE- **** SCP= EJECT SCP= BSS 0 ** SCP/SCOPE INITIALIZATION. * * (SCPB) = LOAD AND PSEUDO-LOAD BITS. * B59 = LOAD MODE BIT. * B58 = PSUEDO-LOAD MODE BIT. * (SCPC) = NEXT AVAILABLE ADDRESS IN THE CONTROL STATEMENT * BUFFER. * (SCPD) = -0 IF SCOPE MODE, +0 IF SCP MODE. * (SCPE) = COMMAND VERB. * (SCPF) = 0, ELSE TERMINATOR ENCOUNTERED. * (SCPG) = +0 IF NO ECHO, -0 IF ECHO ENABLED. * (SCPH) = 1 IF BRIEF, 0 IF NO BRIEF * (SCPI) = 0, ELSE ADDRESS OF SPECIAL PROCESSING CODE. * SX7 B0+ SA7 SCPB CLEAR LOAD AND PSEUDO-LOAD BITS SA7 SCPG ECHO NOT ENABLED SX7 CSBUF SA7 SCPC NEXT ADDR IN CS BUFFER IFNOSBE OPEN I,READ,R OPEN O,WRITE,R ENDIF SCP1 BSS 0 * THIS IS THE TOP OF THE SCP/SCOPE MAIN LOOP. READ A LINE OF * INPUT FROM THE TERMINAL TO THE STRING BUFFER -IN-. SA1 SCPH NZ X1,SCP3 IF BRIEF MODE * SEE IF IN LOAD OR AUTO-LOAD MODE. IF SO, TELL THE USER. SA1 SCPB MI X1,SCP2 IF LOAD MODE LX1 1 MI X1,SCP2 IF AUTO-LOAD MODE PRINT (-),ES EQ SCP3 SCP2 BSS 0 PRINT (L-),ES SCP3 BSS 0 SX6 B0+ SA6 SCPI CLEAR SPECIAL PROCESSING CODE ADDR SA6 SCPF CLEAR TERMINATOR FOUND FLAG TREAD GET SOME INPUT NZ X1,SCP54 PRINT CURRENT STATUS * DETERMINE WHICH, IF ANY, OF THE SPECIAL SCP/SCOPE COMMANDS * WAS GIVEN. IF SO, PROCESS IT AND GO FOR MORE INPUT. SA5 INL NUMBER OF CHARS RECEIVED ON INPUT BX1 -X1*X1 SX4 B1 -INC- SX0 X5-SSEM-1 PL X0,SCP21 IF TOO MANY CHARS FOR A SPECIAL ENTRY MX7 -6 MASK FOR -TSSE- ENTRY BX3 X5 X3 = LENGTH OF INPUT (IN CHARS) * OKAY, PACK X5 CHARACTERS FROM -IN-, AND THEN SEE IF THE INPUT * WAS A SPECIAL ENTRY. SCP4 BSS 0 SX5 X5-1 MI X5,SCP5 IF ENOUGH CHARACTERS COLLECTED SA2 IN+X4-1 LX1 6 BX1 X1+X2 SX4 X4+B1 EQ SCP4 LOOP FOR ALL CHARACTERS SCP5 BSS 0 (X5) = -1 INITIALLY SA2 TSSE+X5+1 READ A TABLE ENTRY ZR X2,SCP21 IF END OF TABLE SB7 X2 B7 = PROCESSING ADDRESS AX2 18 BX0 -X7*X2 EXTRACT LENGTH (IN CHARS) OF ENTRY IX0 X0-X3 ZR X0,SCP6 IF TABLE ENTRY AND INPUT SAME LENGTH SX5 X5+1 ADVANCE INDEX EQ SCP5 TRY AGAIN... SCP6 BSS 0 * WE ARE AT THE START OF THE TABLE ENTRIES OF THE SAME LENGTH AS * THE INPUT TYPED BY THE USER. SEARCH UNTIL EOT OR UNTIL WE * HIT AN ENTRY LONGER THAN THE INPUT. AX2 6 POSITION IN 0R FORMAT BX0 X1-X2 COMPARE TABLE ENTRY WITH INPUT ZR X0,SCP7 IF A GOOD COMPARE SX5 X5+1 ADVANCE INDEX SA2 TSSE+X5+1 ZR X2,SCP21 IF EOT SB7 X2 B7 = PROCESSING ADDRESS AX2 18 BX0 -X7*X2 EXTRACT ENTRY LENGTH (IN CHARS) IX0 X0-X3 ZR X0,SCP6 IF SAME LENGTH EQ SCP21 NO COMPARE, PROCESS THE CONTROL CARD SCP7 BSS 0 JP B7 PROCESS FUNCTION SCP8 BSS 0 * DELETE THE PREVIOUS CONTROL STATEMENT IN THE BUFFER. WE MUST * BE IN LOAD OR PSUEDO-LOAD MODE, AND THERE MUST BE AT * LEAST ONE CONTROL STATEMENT TO WIPE OUT. SA1 SCPB MI X1,SCP10 IF LOAD MODE LX1 1 MI X1,SCP10 IF PSEUDO-LOAD MODE SCP9 BSS 0 PRINT (ERR-),ES EQ SCP3 SCP10 BSS 0 SA1 SCPC CURRENT ADDR IN CS BUFFER SX0 X1-CSBUF MI X0,*+400000B IF PAST START OF BUFFER NZ X0,SCP11 IF SOMETHING IN THE BUFFER PRINT (NO CONTROL STATEMENTS LEFT TO DELETE.) EQ SCP1 SCP11 BSS 0 * MOVE BACKWARDS THRU THE PREVIOUS CONTROL STATEMENT UNTIL WE * REACH THE END OF THE CONTROL STATEMENT THAT PRECEEDED IT * (I.E., LOOK FOR A ZERO BYTE) OR UNTIL WE HIT THE FWA * OF THE BUFFER (IF ONLY ONE CONTROL STATEMENT HAS BEEN * ENTERED). THEN RESET THE ADDRESS POINTER, -SCPC-. SX1 X1-1 SX0 X1-CSBUF ZR X0,SCP12 IF START OF BUFFER REACHED SA2 X1-1 FETCH A WORD MX0 -12 BX2 -X0*X2 NZ X2,SCP11 IF NOT ZERO BYTE SCP12 BSS 0 BX7 X1 SA7 A1 NEW ADDR IN -CSBUF- EQ SCP1 DONE, CONTROL STATEMENT DEAD SCP13 BSS 0 * TOGGLE THE BRIEF MODE FLAG. SA1 SCPH SX0 B1 IX6 X0-X1 SA6 A1 EQ SCP1 DONE. SCP14 BSS 0 * TURN ON ECHO MODE. BX6 -X6-X6 SA6 SCPG EQ SCP1 DONE. SCP15 BSS 0 * SET *SCOPE* PROCESSING MODE. BX7 -X7-X7 (X7) = -0 EQ SCP17 SCP16 BSS 0 * SET *SCP* PROCESSING MODE. BX7 X7-X7 (X7) = +0 SCP17 BSS 0 SA7 SCPD SET PROCESSING MODE EQ SCP1 SCP18 BSS 0 * INITIATE LOAD MODE. SET THE LOAD MODE BIT, AND INIT THE * CONTROL STATEMENT BUFFER ADDR TO THE START OF THE BUFFER. SA1 SCPB MX0 1 BX6 X0+X1 SA6 A1+ LOAD MODE ENABLED SX7 CSBUF SA7 SCPC CURRENT ADDRESS IN CS BUFFER EQ SCP1 SCP19 BSS 0 * TERMINATE LOAD MODE, AND EXECUTE THE ACCUMULATED CONTROL * STATEMENTS. ERROR IF NOT IN LOAD OR PSEUDO-LOAD MODE. SA1 SCPB MI X1,SCP20 IF LOAD MODE LX1 1 PL X1,SCP9 IF NOT PSEUDO-LOAD MODE SCP20 BSS 0 * OKAY, EXECUTE THE CONTROL STATEMENT(S), AFTER SUPPLYING THE * RESTART CONTROL STATEMENTS. SA1 SCPD GET SCP/SCOPE MODE (MAY BE TOGGLED) SB7 TSCP ASSUME IN SCP MODE + PL X1,*+1 BAD PROGRAMMING PRACTICE SB7 TSCO IF REALLY IN SCOPE MODE SA1 SCPH MX0 -1 BX1 -X0*X1 0 = NO BRIEF, 1 = BRIEF SA2 X1+B7 FETCH THE CORRECT WORD LX2 -6 SA1 SCPC CURRENT ADDR IN CS BUFFER SX4 X2 SC SA3 =9L "LOADFILE"_, SENATOR, BX6 X3+X4 SENATOR,SC SA6 X1 MX0 42 BX7 X0*X2 P. SA7 A6+B1 SENATOR,SCP. IFNOSBE SA5 =7LEXIT,S. ENDIF IFNOS SA5 =5LEXIT. ENDIF BX7 X5 SA7 A7+B1 EXIT,S. SA6 A7+B1 SENATOR,SC BX7 X0*X2 SA7 A6+B1 SENATOR,SCP. BX7 -X7*X7 SA7 A7+B1 STORE ZERO WORD TERMINATOR FOR *IAP* ECS CSBUF,A7+1 EXECUTE CONTROL STATEMENTS SCP21 BSS 0 * THE INPUT WAS NOT ONE OF THE SCP/SCOPE SPECIAL COMMANDS. * ASSUME WE HAVE A VALID CONTROL STATEMENT AND PROCESS IT. * IF LOAD OR PSEUDO-LOAD, WE JUST ACCUMULATE THE CONTROL * STATEMENT IN THE BUFFER, ELSE EXECUTE IT IMMEDIATELY. PUTI JN SET PUT FWA GNA FN SB2 B7-3 ZR B2,SCP51 IF LEADING DELIMETER LT B7,B1,SCP9 IF NOT GOOD COMMAND VERB SB6 B6-3 PL B6,SCP23 IF MORE THAN 2 CHARS LONG SCP22 BSS 0 SB7 TCVA-2 RJ SST SEARCH COMMAND TABLE NZ B3,SCP24 IF A MATCH IN TABLE FOUND SCP23 BSS 0 * EITHER THE FIRST ARTIFACT (HUNK OF CHARACTERS) WAS MORE THAN * TWO CHARACTERS LONG, OR IT WAS ONE OR TWO CHARS LONG * AND WASN*T FOUND IN THE TABLE OF ABBREVIATIONS. THUS, * USE THE ARTIFACT AS GIVEN. * * NOTE, WE GET HERE IF IN SCOPE (AND NOT SCP) MODE ALSO. SA6 SCPE SAVE COMMAND VERB PUTF X6,,Z PUT COMMAND VERB EQ SCP26 SCP24 BSS 0 * WE FOUND A MATCH IN THE TABLE OF ABBREVIATIONS (BUT DIDN*T * STRIKE IT). FETCH THE LONG FORM, AND MOVE IT TO THE STRING * BUFFER. IF SPECIAL HANDLING IS INVOLVED, SET -SCPI- TO * THE ADDRESS OF THE PROCESSING CODE, BUT CONTINUE TO EXAMINE * THE CONTROL STATEMENT. AT EOL (LABEL -SCP30-) THE SPECIAL * CODE WILL BE ENTERED TO PROCESS THE (EXPANDED) CONTROL * STATEMENT. NO SPECIAL PROCESSING IS PERFORMED IN LOAD OR * AUTO-LOAD MODE, SINCE ALL ACTIONS WOULD BE PERFORMED * IMMEDIATELY AND NOT IN THE PROPER SEQUENCE. SA1 SCPB MI X1,SCP25 IF LOAD MODE LX1 1 MI X1,SCP25 IF AUTO-LOAD MODE SX7 X2 SA7 SCPI ZR OR PROCESSING ADDRESS SCP25 BSS 0 SA1 A2+B1 READ LONG FORM OF ABBREVIATION BX6 X1 SA6 SCPE SAVE COMMAND VERB PUTF X1,,Z PUT COMMAND VERB SCP26 BSS 0 * IF WE ARE NOT ALREADY IN LOAD OR PSEUDO-LOAD MODE, CHECK THE * COMMAND VERB IN -SCPE-, AND, IF IT IS A LOADER CONTROL * STATEMENT, SET PSEUDO-LOAD MODE. SA1 SCPB MI X1,SCP28 IF LOAD MODE LX1 1 MX0 42 FOR *SLS* MI X1,SCP27 IF ALREADY PSEUDO-LOAD MODE SA1 SCPE FETCH COMMAND VERB SB7 TLCS RJ SLS SEARCH LIST OF LOADER CS ZR X6,SCP28 IF NOT LOADER CONTROL STATEMENT * OBVIOUSLY THIS IS A LOADER CONTROL STATEMENT, SO SET THE * PSEUDO-LOAD MODE BIT. SA1 SCPB MX0 -1 LX0 58 BX6 -X0+X1 INDICATE PSEUDO-LOAD IN PROGRESS SA6 A1 EQ SCP28 PROCESS REST OF CONTROL STATEMENT SCP27 BSS 0 * WE*RE ALREADY IN PSEUDO-LOAD MODE, SO CHECK TO SEE IF IT*S * TIME TO EXECUTE THE ACCUMULATED CONTROL STATEMENTS. IF * THIS COMMAND VERB IS A LOADER CONTROL STATEMENT, THEN STAY * IN PSEUDO-LOAD MODE. ELSE, CLEAR THE BIT SO THE CONTROL * STATEMENTS MAY BE EXECUTED WHEN THE PROCESSING OF THIS * ONE IS COMPLETE. SA1 SCPE COMMAND VERB SB7 TLCS RJ SLS NZ X6,SCP28 IF A LOADER CONTROL STATEMENT * CLEAR THE PSEUDO-LOAD MODE BIT. SA1 SCPB MX0 -1 LX0 58 BX6 X0*X1 SA6 A1 DONE. SCP28 BSS 0 * OKAY, HERE'S THE SITUATION. THE COMMAND VERB IS SITTING * IN THE CODED BUFFER (JN). THE OTHER STRING * BUFFER -IN- HAS THE ORIGINAL INPUT LINE AND HIS POINTER * -INC- POINTS TO THE CHARACTER FOLLOWING THE COMMAND VERB. * CALL *GNA* IN A LOOP UNTIL EOL IS REACHED. COMPARE EACH * ARTIFACT (EXCEPT THOSE GREATER THAN 2 CHARACTERS LONG * OR DELIMETERS) WITH THE ENTRIES IN THE FILE ABBREVIATION * TABLE. IF NO MATCH, THEN MOVE THE ARTIFACT TO -JN-. * ELSE, READ UP THE LONG FORM OF THE ABBREVIATION AND STUFF * IT INTO -JN- INSTEAD OF THE ORIGINAL ARTIFACT. GNA FN JP B7+TSJT PROCESS THE ARTIFACT SCP29 BSS 0 * WE HAVE THE FIRST SEVEN CHARACTERS OF AN ARTIFACT GREATER * THAN SEVEN CHARS LONG. MOVE THESE TO THE STRING BUFFER, * THEN COLLECT THOSE THAT REMAIN AND MOVE THEM AS WELL. PUTF X6,,Z PUT ARTIFACT GNA FN ZR B7,SCP30 IF EOL SENSED SB7 B7-3 ZR B7,SCP48 IF DELIMETER EQ SCP29 STUFF IN MORE CHARS SCP30 BSS 0 * THE (EXPANDED) CONTROL STATEMENT IS IN -JN-. IF SPECIAL * HANDLING IS REQUIRED, MOVE THE CONTROL STATEMENT TO -IN-, * HAVE *GNA* SKIP OVER THE COMMAND VERB, AND ENTER THE CODE. SA1 SCPI ZR X1,SCP32 IF NO SPECIAL PROCESSING SA2 SCPF NZ X2,SCP31 IF TERMINATOR ALREADY SUPPLIED PUTT (.) ADD TERMINATOR SCP31 BSS 0 RJ UPL UNPACK PUT LINE GNA FN SA1 SCPI SB7 X1 JP B7 PROCESS SPECIAL COMMAND SCP32 BSS 0 * END OF LINE WAS DETECTED ON INPUT, THUS WE ARE THRU PROCESSING * THIS CONTROL STATEMENT. IF ROOM DOES NOT REMAIN IN * THE BUFFER FOR THE CURRENT CONTROL STATEMENT, THE USER * WILL BE QUERIED WHETHER OR NOT TO EXECUTE THE CONTROL * STATEMENTS ACCUMULATED TO THIS POINT (BUT NOT THE * CURRENT CONTROL STATEMENT, AS IT MAY BE INCOMPLETE). IF * THE ANSWER IS -N- (NO), THEN EVERYTHING WILL BE ABORTED AND * SCP/SCOPE WILL START ANEW. OTHERWISE, THE ACCUMULATED * CONTROL STATEMENTS WILL BE EXECUTED. NOTE THAT THIS CAN * ONLY OCCUR (I HOPE) IN LOAD OR PSUEDO-LOAD MODE. * * IF THE CONTROL STATEMENT FITS IN THE CONTROL STATEMENT BUFFER * AND WE ARE NOT IN LOAD OR PSEUDO-LOAD MODE, THEN IT WILL BE * IMMEDIATELY EXECUTED. OTHERWISE, THE ADDRESS POINTER IN * THE CONTROL STATEMENT BUFFER WILL BE INCREMENTED, AND THE * NEXT CONTROL STATEMENT WILL BE READ FROM THE TERMINAL. SX5 CSBUF+100B-6 X5 = LIMIT * THE BIAS OF 6 WORDS IN LIMIT IS TO ACCOUNT FOR THE RESTART * CONTROL STATEMENTS WE SUPPLY AFTER THOSE OF THE USER. * * SENATOR,SCP. 2 WORDS * EXIT,S. 1 WORD * SENATOR,SCP. 2 WORDS * DATA 0 1 WORD SA2 SCPF NZ X2,SCP33 IF TERMINATOR ALREADY SUPPLIED PUTT (.) ADD TERMINATOR SCP33 BSS 0 PUTZ PUT EOL SA4 SCPC (X4) = IN POINTER IN CSB SB3 X4 MX0 -12 SA1 JN MOVE TO CONTROL STATEMENT BUFFER SCP34 BSS 0 IX6 X4-X5 PL X6,SCP36 IF NO MORE ROOM BX6 X1 SA6 X4 SX4 X4+B1 ADVANCE IN BX6 -X0*X1 CHECK FOR ZERO BYTE ZR X6,SCP41 IF EOL SA1 A1+B1 READ NEXT WORD EQ SCP34 SCP36 BSS 0 SX7 B3 SA7 SST ** SAVE B3 * WHOOPS, THE BUFFER IS FULL. SEE IF THE USER WANTS TO EXECUTE * ALL PREVIOUS CONTROL STATEMENTS. PRINT (CS BUFFER FULL. EXECUTE-Y/N"QM") TREAD NZ X1,SCP37 START FRESH SA1 IN SX0 X1-1RN ZR X0,SCP37 IF -N- (NO) * HE WANTS WHAT HE HAS EXECUTED. B3 POINTS TO LWA+1 OF THE LAST * COMPLETELY ASSEMBLED CONTROL STATEMENT. SA1 SST ** RETRIEVE LWA+1 OF LAST CS BX7 -X7*X7 SA7 X1 SX7 A7+1 SA7 SCPC EQ SCP20 SCP37 BSS 0 SX7 CSBUF SA7 SCPC SX7 B0+ SA7 SCPB CLEAR LOAD/PSEUDO-LOAD BITS EQ SCP1 NEXT CONTROL STATEMENT SCP41 BSS 0 BX7 X4 SA7 SCPC NEW IN FOR CONTROL STMT BUF * IF ECHO IS ENABLED, THEN PRINT THE (EXPANDED) CONTROL STATEMENT. SA1 SCPG PL X1,SCP42 IF NO ECHO SX6 1R CARRIAGE CONTROL SB6 JN SB7 JN RJ SCL SHIFT (JN) TO (JN) PRINTC JN WRITER O,R SCP42 BSS 0 * IF LOAD OR AUTO-LOAD MODE, DON-T EXECUTE * THE CONTROL STATEMENT(S), BUT JUST LOOP BACK FOR ANOTHER. * ELSE, EXECUTE IT. SA1 SCPB MI X1,SCP1 IF LOAD MODE LX1 1 PL X1,SCP20 IF NOT PSEUDO-LOAD, EXECUTE EQ SCP1 NEXT CONTROL STATEMENT, PLEASE SCP43 BSS 0 * IF THE ARTIFACT IS MORE THAN 2 CHARS LONG, MOVE IT TO THE * STRING BUFFER. ELSE SEARCH THE TABLE OF ABBREVIATIONS. SB6 B6-3 PL B6,SCP44 IF MORE THAN 2 CHARS LONG SB7 TFNA-2 RJ SST NZ B3,SCP45 IF A MATCH IN TABLE FOUND SCP44 BSS 0 * HERE IF THE ARTIFACT WAS MORE THAN 2 CHARS LONG, OR 1 OR 2 * CHARACTERS IN LENGTH BUT NOT FOUND IN THE TABLE OF * ABBREVIATIONS. ALSO, IF SCOPE (AND NOT SCP) MODE. PUTF X6,,Z PUT ARTIFACT EQ SCP47 SCP45 BSS 0 * WE HAVE A MATCH. MOVE THE LONG FORM TO THE STRING BUFFER * UNLESS SPECIAL HANDLING IS INVOLVED. SB7 X2+ ZR B7,SCP46 IF NO SPECIAL HANDLING JP B7 SCP46 BSS 0 SA1 A2+B1 READ LONG FORM PUTF X1,,Z PUT IT SCP47 BSS 0 EQ SCP28 SCP48 BSS 0 * WE HAVE A DELIMETER. STORE IT IN THE STRING BUFFER. * IF SCP MODE, A (-) WILL BE REPLACED BY AN (=). SX0 X6-1R- NZ X0,SCP49 IF NOT (-) SA1 SCPD MI X1,SCP49 IF SCOPE MODE SX6 1R= REPLACE (-) BY (=) SCP49 BSS 0 LX5 X6 SAVE DELIMETER PUTF X6,10,1 PUT DELIMETER LX6 X5 RESTORE DELIMETER SX0 X6-1R. ZR X0,SCP50 IF TERMINATOR SX0 X6-1R) NZ X0,SCP28 IF NOT TERMINATOR SCP50 BSS 0 SX6 B1+ SA6 SCPF SET TERMINATOR FOUND FLAG EQ SCP28 SCP51 BSS 0 SX0 X6-1R- NZ X0,SCP52 IF NOT A PROCEDURE CALL LX6 -6 EQ SCP22 PROCESS *CALL* SCP52 BSS 0 SX0 X6-1R+ NZ X0,SCP53 IF NOT (+) SA1 SCPG BX7 -X1 SA7 A1 TOGGLE ECHO MODE EQ SCP21 SCP53 BSS 0 * CHECK FOR LEADING BANG CHARACTER (EXCLAMATION POINT). THROW * IT AWAY IF SO. JUST IN CASE THE GUY THINKS HE'S IN READY * OR EDIT MODE. SX0 X6-1R"EP" CHECK FOR BANG CHARACTER NZ X0,SCP53.1 IF NOT EXCLAMATION POINT SA1 INC SX1 X1-2 ZR X1,SCP21 (INC) = 2, THROW BANG AWAY SCP53.1 BSS 0 * ASSUME THE LEADING DELIMETER SHOULD BE PART * OF THE CONTROL STATEMENT (ALA *NOS*). LX6 -6 EQ SCP23 SCP54 BSS 0 * OKAY, GIVE THE USER HIS CURRENT STATUS. SA1 SCPB MI X1,SCP55 IF LOAD MODE LX1 1 PL X1,SCP56 IF NOT PSEUDO-LOAD MODE SCP55 BSS 0 * CALCULATE THE NUMBER OF WORDS LEFT IN THE CONTROL STATEMENT * BUFFER, AND SAVE IT FOR LATER. SA1 SCPC LWA+1 OF PREVIOUS CONTOL STATEMENT SX1 X1-CSBUF BX1 -X1 SX1 X1+100B-6 COUNT OF FREE WORDS RJ CDD BINARY TO DECIMAL DISPLAY CODE MX1 1 SB2 B2-B1 AX1 X1,B2 CREATE MASK BX7 X1*X4 DROP TRAILING SPACES SA7 SST SCP56 BSS 0 PUTI JN SET PUT FWA SA1 SCPD PL X1,SCP57 IF SCP MODE PUTT (IN SCOPE),2 EQ SCP58 SCP57 BSS 0 PUTT (IN SCP),2 SCP58 BSS 0 SA1 SCPB MI X1,SCP59 IF LOAD MODE LX1 1 PL X1,SCP61 IF NOT PSEUDO-LOAD MODE PUTT (, AUTO-),B6 EQ SCP60 SCP59 BSS 0 PUTT (, ),B6 SCP60 BSS 0 PUTT (LOAD, WL=),B6 PUTF SST,,Z,B6 PUT WORDS LEFT IN CS BUFFER SCP61 BSS 0 SA1 SCPH FETCH BRIEF FLAG ZR X1,SCP62 IF NOT BRIEF PUTT (, *BRIEF*),B6 SCP62 BSS 0 SA1 SCPG FETCH ECHO FLAG PL X1,SCP63 IF NOT ECHO PUTT (, *ECHO*),B6 SCP63 BSS 0 PUTT (.) PUTZ PRINTC JN DISPLAY STATUS LINE EQ SCP1 DONE. SCP64 BSS 0 * PROCESS AN INTERNAL *REWIND* REQUEST. RJ POF PICK ONE FILE MX0 -1 BX6 -X0+X1 ADD COMPLETE BIT SA6 S REWIND S,R REWIND IT EQ SCP64 LOOP FOR ALL FILES SCP65 BSS 0 * PROCESS AN INTERNAL *UNLOAD* REQUEST. RJ POF PICK ONE FILE RJ SUF SET AND UNLOAD FILE EQ SCP65 LOOP FOR ALL FILES SCP66 BSS 0 * PROCESS AN INTERNAL *RETURN* REQUEST. RJ POF MX0 -1 BX6 -X0+X1 SA6 S IFNOS RETURN S,R ELSE 1 CLOSE S,RETURN,R EQ SCP66 SCP67 BSS 0 * PROCESS AN INTERNAL *SKIPEI* REQUEST. RJ POF MX0 -1 BX6 -X0+X1 SA6 S SKIPEI S,R EQ SCP67 IFNOSBE SCP68 BSS 0 * PROCESS AN INTERNAL *CONNECT* REQUEST. RJ POF PICK ONE FILE SX0 B0+ CONNECT FLAG RJ CDF CONNECT THE TERMINAL I/O FILE EQ SCP68 LOOP FOR ALL FILES SCP69 BSS 0 * PROCESS AN INTERNAL *DISCONT* REQUEST. RJ POF PICK ONE FILE SX0 B1+ DISCONNECT FLAG RJ CDF DISCONNECT THE TERMINAL I/O FILE EQ SCP69 LOOP FOR ALL FILES ENDIF SCP70 BSS 0 * *READY*, INITIALIZE FOR *READY* MODE. IFNOSBE SA1 CTFA CLEAR COMPLETION BITS IN CTF MX0 42 BX6 X0*X1 SA6 A1 SA1 CTFB BX6 X0*X1 SA6 A1 ENDIF SA1 SCPH FETCH BRIEF FLAG NZ X1,INI2 IF BRIEF SET EQ INI3 IF NO BRIEF SCP71 BSS 0 * SO LONG... ENDRUN SCP72 BSS 0 * RUN THRU THE TABLE OF SCRATCH FILE NAMES, UNLOADING EACH FILE * IN TURN. SX7 B0+ SA7 SST INIT TABLE INDEX SCP73 BSS 0 SA2 SST SA1 TSCR+X2 NG X1,SCP1 IF ALL FILES ZAPPED SX7 X2+B1 BUMP INDEX SA7 A2 RJ SUF SET AND UNLOAD FILE EQ SCP73 LOOP FOR ALL FILES SCP74 BSS 0 SA1 =4LEDIT BX6 X1 SA6 ARGR IFNOSBE SA1 CTFA CLEAR COMPLETION BITS IN *CTF* MX0 42 BX6 X0*X1 SA6 A1 SA1 CTFB BX6 X0*X1 SA6 A1 ENDIF EQ INI1 ZAP SPACE 4,8 ** ZAP - DEFINE FILE NAMES TO UNLOAD FOR */Z* COMMAND. * ZAP MACRO F VFD 42/0L_F,*P/0 ZAP ENDM TSCR SPACE 4,8 **** TSCR - TABLE OF SCRATCH FILE NAMES. TSCR BSS 0 ZAP COMPS ZAP UPDTPMD ZAP CMPSCR ZAP FTNRMAP ZAP FTNRLST ZAP UPDTSCR ZAP UPDTCDK ZAP UPDTCHK ZAP UPDTEXT ZAP FTNOPT ZAP UPDTAUD ZAP "SFILE" ZAP "XFILE" ZAP "LFILE" CON -0 END OF TABLE **** SCP75 BSS 0 * OKAY, SHOW THE ACCUMULATED CONTROL STATEMENTS. SA1 SCPB MI X1,SCP76 IF LOAD MODE LX1 1 PL X1,SCP9 IF NOT AUTO-LOAD MODE SCP76 BSS 0 SA1 SCPC NEXT ADDRESS IN CS BUFFER SX1 X1-CSBUF MI X1,*+400000B NZ X1,SCP77 IF SOMETHING IN THE BUFFER PRINT (NOTHING TO SHOW.) EQ SCP1 SCP77 BSS 0 SB6 CSBUF FWA OF CODED LINE SB7 TIN2 WHERE TO PUT SHIFTED LINE IFNOSBE SX6 1R0 ELSE SX6 1R ENDIF RJ SCL SHIFT FIRST CONTROL STATEMENT SCP78 BSS 0 * A1 = LWA OF CURRENT CONTROL STATEMENT. * A6 = ADDRESS OF LAST OUTPUT WORD. * * CONTINUE TO SHIFT CONTROL STATEMENTS UNTIL THE END * OF THE CONTROL STATEMENT BUFFER IS REACHED. SA5 SCPC X5 = BUFFER LIMIT SX4 A1+B1 FWA OF NEXT CS, OR OUTSIDE BUFFER IX4 X4-X5 PL X4,SCP79 IF END OF BUFFER REACHED SB6 A1+B1 ADDRESS OF CODED LINE SB7 A6+B1 WHERE THE SHIFTED LINE GOES SX6 1R CARRIAGE CONTROL RJ SCL SHIFT CODED LINE EQ SCP78 LOOP FOR ALL CONTROL STATEMENTS SCP79 BSS 0 WRITEW O,TIN2,A6-TIN2+1 WRITER O,R EQ SCP1 SCP80 BSS 0 * ABORT LOAD OR AUTO-LOAD MODE. SA1 SCPB MI X1,SCP81 IF LOAD MODE LX1 1 PL X1,SCP9 IF NOT AUTO-LOAD MODE SCP81 BSS 0 EQ SCP37 DO IT IFNOS SCP82 BSS 0 WRITEC O,(=C*"LO"*) WRITER O,R JP *+400000B ENDIF SCPB BSS 1 LOAD AND PSEUDO-LOAD BITS SCPC BSS 1 NEXT ADDR IN CONTROL STATEMENT BUFFER SCPD BSS 1 -0 IF SCOPE MODE, +0 IF SCP MODE SCPE BSS 1 COMMAND VERB SCPF BSS 1 NZ IF TERMINATOR ALREADY ENCOUNTERED SCPG BSS 1 ECHO FLAG (-0 IF ECHO ENABLED) SCPH BSS 1 BRIEF FLAG SCPI BSS 1 ADDRESS OF SPECIAL PROCESSING CODE CSBUF BSS 100B CONTROL STATEMENT BUFFER TLCS SPACE 4,10 **** TLCS - A TABLE OF LEGAL LOADER CONTROL STATEMENTS. TLCS BSS 0 LOAD TABLE LDSET TABLE SATISFY TABLE RFL TABLE LIBLOAD TABLE SLOAD TABLE TRAP TABLE LDSET TABLE SEGLOAD TABLE CAPSULE TABLE GROUP TABLE DATA 0 END OF TABLE **** TSJT SPACE 4,10 **** TSJT - A TABLE OF WHERE TO GO AFTER -SCP26-. + EQ SCP29 IF MORE THAN 7 CHARS TSJT EQ SCP30 IF EOL + EQ SCP43 IF ALPHA, LESS THAN 7 CHARS + EQ SCP43 IF NUMERIC, LESS THAN 7 CHARS + EQ SCP48 IF DELIMETER **** TSCO SPACE 4,10 **** TSCO - SCOPE MODE RESTART CONTROL STATEMENTS. TSCO BSS 0 VFD 24/4LOPE.,*P/2RSC NO BRIEF VFD 12/2LO.,*P/2RSC BRIEF **** TSCP SPACE 4,10 **** TSCP - SCP MODE RESTART CONTROL STATEMENTS. TSCP BSS 0 VFD 12/2LP.,*P/2RSC NO BRIEF VFD 6/1L ,*P/2RS. BRIEF **** CDF SPACE 4,8 IFNOSBE ** CDF - CONNECT/DISCONNECT A TERMINAL I/O FILE. * * ENTER X1 = FILE NAME * X0 = 0 TO CONNECT THE FILE * X0 = 1 TO DISCONNECT THE FILE * * EXIT FILE PROCESSED. * * CALLS *SYS=* * * USES ALL. * CDF SUBR LX0 12+18 POSITION FUNCTION BIT BX6 X1 SA6 CDFA STORE FILE NAME FOR *CON* SA1 A6+B1 FETCH PP CALL WORD BX6 X0+X1 RJ SYS= EQ CDFX EXIT. CDFA BSS 1 FILE NAME HERE VFD 24/4LCONP,*P/CDFA ENDIF POF SPACE 4,10 ** POF - PICK ONE FILE. * * THE NEXT VALID FILE NAME ON THE INPUT LINE WILL BE * RETURNED TO THE CALLING ROUTINE. EXIT TO THE SCP/SCOPE * MAIN LOOP UPON DETECTING END OF LINE. * THE CONTROL STATEMENT IS ECHOED IF ECHO IS ENABLED. * * ENTER (IN) = CONTROL STATEMENT, STRING FORMAT * (INC) = CURRENT COLUMN * (INL) = LAST COLUMN * * EXIT X1 = FILE NAME, ELSE TO *SCP* * * CALLS *GNA*, *VFN*, (*WTC* IF ILLEGAL FILE NAME) * * USES ALL * POF SUBR GNA FN ZR B7,POF2 EOL, NO MORE FILES SB6 B7-3 ZR B6,POF+1 IGNORE LEADING DELIMETERS NE B7,B1,POF1 IF ILLEGAL FILE NAME BX1 X6 RJ VFN ZR X6,POFX IF GOOD FILE NAME BX6 X1 POF1 BSS 0 SA6 POFA+2 WRITEC O,POFA ISSUE DIAGNOSTIC EQ POF+1 TRY AGAIN... POF2 BSS 0 SA1 SCPG PL X1,SCP1 IF ECHO NOT ENABLED SA1 INL PRINTS INCC,X1+2 EQ SCP1 DONE. POFA DATA 20H ILLEGAL FILE NAME-- BSS 1 DATA 0 ENSURE END OF LINE SST SPACE 4,10 ** SST - SEARCH SCP*S TABLE OF ABBREVIATIONS. * * THIS ROUTINE WILL SEARCH ONE OF SCP*S 2 TABLES OF ABBREVIATIONS. * IF IN SCOPE MODE, AN IMMEDIATE RETURN IS MADE. * * ENTER X6 = STRING TO LOOK FOR, L FORMAT * B7 _ FWA-2 OF ABBREVIATION TABLE * * EXIT X6 = UNTOUCHED * B3 = 0 IF NO MATCH, ELSE B3 = 1 AND, * X2 = FIRST WORD OF TABLE ENTRY * A2 _ FIRST WORD OF TABLE ENTRY * * CALLS NONE. * * USES B - 2, 3 * A - 2 * X - 0, 1, 2 * SST1 BSS 0 SB7 B7+B2 SA2 B7 PL X2,SST2 IF NOT END OF TABLE ZR X2,SSTX IF END OF TABLE, EXIT * ABBREVIATION WITH THE SIGN BIT SET SST2 BSS 0 BX1 X0*X2 EXTRACT TOP 1 OR 2 CHARS IX1 X1-X6 NZ X1,SST1 IF NO MATCH, CONTINUE SB3 B1+ MATCH SST SUBR IF NO MATCH, CONTINUE SB3 B0+ ASSUME NO MATCH SA2 SCPD FETCH SCP/SCOPE FLAG MI X2,SSTX IF SCOPE MODE MX0 12 SB2 B1+B1 EQ SST1 ENTER SEARCH LOOP UPL SPACE 4,10 ** UPL - UNPACK PUT LINE. * * UNPACK (JN) TO A STRING BUFFER. * * ENTER (PTIA) = PUT INFO WORD, (JN) = PACKED TEXT. * * EXIT (IN) = STRING TEXT. * (INC) = CURRENT COLUMN. * (INL) = LAST COLUMN. UPL SUBR SX6 B1 SA6 INC MX0 -6 SA1 PTIA SX6 X1 LAST COLUMN SB4 B0 SA6 INL SB3 X1-1 SB2 10 SA1 JN UPL1 BSS 0 SB3 B3-B1 MI B3,UPLX IF DONE SB2 B2-B1 MI B2,UPL2 IF END OF WORD LX1 6 BX6 -X0*X1 SA6 IN+B4 SB4 B4+B1 EQ UPL1 UPL2 BSS 0 SB3 B3+B1 SA1 A1+B1 SB2 10 EQ UPL1 PURGMAC SSE,ZAP,IS,REM IS EJECT ENTER SEARCH LOOP ** IS - DEFINE SCP ABBREVIATIONS. * * THE *IS* MACRO GENERATES A TWO WORD TABLE ENTRY FOR EACH * ABBREVIATION THAT SCP RECOGNIZES. EVERY ENTRY HAS THE * FOLLOWING FORMAT/ * **T + 12/SH,42/ADDR **T 60/LONG * * SH = SHORT FORM (ABBREVIATION), 2 CHARS OR LESS * ADDR = ADDRESS OF SPECIAL PROCESSING CODE * LONG = LONG FORM OF -SH-, 1 TO 10 CHARACTERS * MACRO IS,SH,LONG,ADDR .A MICRO 1,,/SH/ .B MICCNT .A IFGT .B,2,1 P ERR SHORT FORM MUST BE 2 CHARS OR LESS * .B DECMIC .B + VFD 12/".B"_L_SH .1 IFC EQ,/ADDR// VFD *P/0 .1 ELSE VFD *P/ADDR .1 ENDIF * .C MICRO 1,,/LONG/ .D MICCNT .C IFGT .D,10,1 P ERR LONG FORM MUST BE 10 CHARS OR LESS .D DECMIC .D + DATA ".D"_L_LONG * * NOW GENERATE THE HELP TABLE ENTRY. * .A MICRO 1,2,/".A" / .C MICRO 1,10,/".C" / HELP MICRO 1,,/"HELP"_ _".A"_=_".C"/ * IS ENDM HELP MICRO 1,,// INIT MICRO -HELP- REM SPACE 4,10 ** REM - INSERT REMARKS INTO SCP*S TABLE OF HELP INFORMATION. * * REM (1REMARK WITH CARRIAGE CONTROL.) * REM MACRO TEXT * * FLUSH THE MICRO -HELP- IF IT*S NOT NULL. * DUP -1 .A MICRO 1,14*4,/"HELP"/ HELP MICRO 14*4+1,,/"HELP"/ .1 IFC EQ,/_".A"_// STOPDUP .1 ELSE USE /TSHI/ DIS ,$_".A"_$ USE * .1 ENDIF ENDD USE /TSHI/ DIS ,$_TEXT_$ USE * REM ENDM TCVA EJECT **** TCVA - COMMAND VERB ABBREVIATIONS. * USE /TSHI/ TABLE OF SCP HELP INFORMATION TSHI BSS 0 USE * REM ( ) REM ( COMMAND VERB ABBREVIATONS:) REM ( ) TCVA BSS 0 IFNOSBE A IS ATTACH AS IS ASSETS B IS BATCH BE IS BEGIN BP IS BKSPRU C IS CATALOG CF IS COPYBF CM IS COMPASS CN IS CONNECT,SCP68 CP IS COPY CR IS COPYBR CS IS COPYSBF D IS DISPOSE DC IS DISCONT,SCP69 DI IS DISCARD DY IS DISPLAY E IS EDITLIB F IS FILES FE IS FETCH IT IS ITEMIZE L IS LIBRARY LO IS LOGOUT LX IS (LOGOUT,,,,) P IS PURGE R IS REWIND,SCP64 RN IS RENAME RT IS RETURN,SCP66 SB IS SKIPB SE IS SKIPEI,SCP67 SF IS SKIPF SI IS SITUATE ST IS STORE U IS UPDATE UL IS UNLOAD,SCP65 - IS (BEGIN,) ENDIF IFNOS A IS ATTACH AS IS ASSIGN BF IS SKIPFB BR IS BKSP C IS COPY CA IS CATALOG CE IS COPYEI CF IS COPYCF CH IS CHANGE CL IS CATLIST CM IS COMPASS CR IS COPYCR CS IS COPYSBF D IS DAYFILE DE IS DEFINE E IS ENQUIRE G IS GET L IS LIBRARY LE IS LIBEDIT LG IS LIBGEN LM IS LIMITS LO IS LOGOUT,SCP82 M IS MODIFY P IS PURGE PE IS PERMIT R IS REWIND RN IS RENAME RO IS ROUTE RP IS REPLACE RT IS RETURN SB IS SKIPFB SE IS SKIPEI,SCP67 SF IS SKIPF SR IS SKIPR U IS UPDATE UL IS UNLOAD,SCP65 V IS VERIFY WF IS WRITEF WR IS WRITER - IS (BEGIN,) ENDIF CON -0 END OF -TCVA- **** TFNA SPACE 4,10 **** TFNA - FILE NAME ABBREVIATIONS. * REM ( ) REM ( FILE NAME ABBREVIATONS:) REM ( ) TFNA BSS 0 IFNOSBE CC IS COMPILE CT IS CPUTEXT II IS INPUT NE IS NEWPL OL IS OLDPL OO IS OUTPUT PB IS PUNCHB PF IS PROCFIL PR IS PRINT PT IS PPTEXT PU IS PUNCH RN IS RENAME SS IS SOURCE T1 IS TAPE1 T2 IS TAPE2 T3 IS TAPE3 T4 IS TAPE4 T5 IS TAPE5 T6 IS TAPE6 T7 IS TAPE7 T8 IS TAPE8 T9 IS TAPE9 ENDIF IFNOS CC IS COMPILE IFGE DEBUG,2,1 DD IS DUMPS II IS INPUT NE IS NEWPL OL IS OLDPL OO IS OUTPUT SS IS SOURCE T1 IS TAPE1 T2 IS TAPE2 T3 IS TAPE3 T4 IS TAPE4 T5 IS TAPE5 T6 IS TAPE6 T7 IS TAPE7 T8 IS TAPE8 T9 IS TAPE9 ENDIF CON -0 END OF -TFNA- REM ( ) REM ( *SCP* UTILITY COMMANDS:) REM ( ) REM ( + TURN ON ECHO.) REM ( /Z UNLOAD THESE FILES -- ) REM ( CMPSCR COMPS FTNOPT FTNRLST) REM ( FTNRMAP UPDTAUD UPDTCDK UPDTCHK) REM ( UPDTEXT UPDTPMD UPDTSCR) REM ( /L TURN *LOAD* FLAG ON.) REM ( /X EXECUTE THE LOADED CONTROL STATEMENTS.) REM ( /D DELETES THE LAST LOADED CONTROL STATEMENT.) REM ( /S SHOW LOADED CONTROL STATEMENTS.) REM ( /A TURN *LOAD* OR *AUTO-LOAD* FLAG OFF.) REM ( ) REM ( EDI ENTER *EDIT* MODE.) REM ( END EXIT TO TIMESHARING EXECUTIVE.) REM ( HELP PRINT THIS INFORMATION.) REM ( REA ENTER *READY* MODE.) REM ( SCO ENTER *SCOPE* MODE.) REM ( SCP ENTER *SCP* MODE.) REM ( STA PRINT CURRENT STATUS.) REM ( ) USE /TSHI/ TSHIL = *-TSHI LENGTH OF HELP INFORMATION TABLE USE * **** SCP99 BSS 0 PRINT HELP INFORMATION WRITEW O,TSHI,TSHIL WRITER O,R EQ SCP1 PURGMAC SSE,ZAP,IS,REM TITLE 0,0 OVERLAY - ERRORS PROCESSING. ** SENATOR,ERRORS,SYSTEM,LISTING. ERR1 SA1 ARGR+2 SET UP THE FET MX0 42 BX6 X0*X1 SX0 B1 BX6 X6+X0 SA6 S OPEN S,READ,R READ S IFNOSBE 1 SYSTEM CON,R,INIF OPEN O,ALTERNR,R SA1 ARGR+1 CHECK SYSTEM MX0 42 BX1 X0*X1 SB7 ERRA RJ SLS SEARCH LIST ZR X6,*+400000B IF UNKNOWN OPTION SB7 X6 JP B7 ERRA BSS 0 MAP TABLE ERR5 DATA 0 MAP SPACE 4,10 ** SHORT MAP. * * READ A LOAD MAP (CYBER LOADER, FELLAS) AND PRINT A * CONDENSATION CONSISTING OF THE BLOCK NAME AND ADDRESS. ERR5 READC S,IN,15 SEARCH FOR *BLOCK* IN COL 11 NZ X1,ERR7 IF NOT FOUND SA1 IN+1 CHECK COLS 11-15 SA2 =5HBLOCK IX0 X1-X2 NZ X0,ERR5 IF NOT FOUND READC S,IN,1 NZ X1,ERR7 IF ENDED EARLY PRINT ( ) PRINT ( SHORT MAP) PRINT (BLOCK ADDRESS) PRINT ( ) ERR6 READC S,IN,15 NZ X1,ERR8 IF DONE SB7 B6-IN LE B7,B1,ERR6 IF LINE TOO SHORT SA1 IN MX0 6 BX1 X0*X1 EXTRACT CARRIAGE CONTROL LX1 0-54 SX1 X1-1R NZ X1,ERR6 IF NOT NORMAL LINE SA1 IN+1 SHIFT BLOCK OVER FOR CARRIAGE CONTROL LX1 -6 BX6 X1 SA6 A1 BX6 X6-X6 SA6 A1+2 WRITEC O,IN+1 EQ ERR6 AGAIN ERR7 PRINT (MAP NOT FOUND) ERR8 WRITEF O,R ENDRUN SPACE 2,5 SPACE 2,5 XTEXT COMCRDC SPACE 2,4 QUAL * SPACE 4,10 USE LITERALS RFL= BSS 0 TITLE 1,0 OVERLAY. IDENT SEN10,READY,READY,01,00 ORG READY SPACE 2,5 COMMENT SENATOR VERSION "VER" - READY MODE OVERLAY SPACE 2,5 QUAL READY ** 1,0 OVERLAY - *READY* MODE. * * THIS IS THE PRINCIPLE SENATOR OVERLAY. IT PROCESSES * MOST *READY* MODE COMMANDS. TITLE 1,0 OVERLAY - PROCESS INPUT. READY BSS 0 SA1 PRCA SEE IF LAST READY COMMAND COMES FROM *EDIT* NZ X1,EDIT YES, BACK TO *EDIT* SA2 BRIEF NZ X2,READY1 IF BRIEF MODE PRINT (READY.) PRINT ( ) READY1 BSS 0 SA1 PRCA SEE IF CALLED FROM *EDIT* NZ X1,EDIT YES RJ CCT CHECK CURRENT TIME FOR *ALARM* TREAD GET SOME USER INPUT NZ X1,STATUS IF EOX READY1.5 GNA NUM,AO JP B7+READY2+1 READY2 BSS 0 JP WHAT JP READY JP COM JP LIN JP SPE WHAT PRINT (WHAT?) PRINT ( ) EQ READY1 SPACE 4,10 COM SB5 7 GT B6,B5,WHAT IF TOO LONG SB5 3 LT B6,B5,WHAT IF TOO SMALL * SEARCH FOR THE COMMAND. FORM THE MASK APPROPRIATE TO THE * NUMBER OF CHARACTERS HE ENTERED. SB7 B6+B6 *2 SB7 B7+B6 *3 SB7 B7+B7 *6 SB7 B7-B1 *6-1 MX0 1 AX0 B7 MAKE THE MASK BX1 X0*X6 SB7 COMTAB RJ SLS SEARCH COMMAND LIST ZR X6,WHAT IF NOT FOUND SB7 X6 JP B7 EXECUTE THE COMMAND SPACE 4,10 * SPECIAL ENTRIES SPE SX0 X6-1R ZR X0,READY1.5 IF BLANK, IGNORE IT SX0 X6-1R"EP" ZR X0,SPE1 BANG CHARACTER, PROCESS CONTROL STATEMENT SX0 X6-1R. NZ X0,WHAT IF NOT . SA1 BRIEF SX0 B1 IX6 X0-X1 SA6 A1 TOGGLE BRIEF EQ READY SPE1 BSS 0 SX6 /CCC/VBAT SA6 COMMON LOAD 3 PROCESS USER CONTROL STATEMENT SPACE 3 ** COMMAND MACRO. SET UP *READY* COMMANDS AND HELP * TABLE. * * COM COMMAND WHAT,DEBUG * * WHERE COM IS THE COMMAND NAME * WHAT - COMMAND DESCRIPTION * DEBUG IF SPECIFIED, COMMAND ASSEMBLED WHEN * DEBUG GE 1. IF THE FIELD IS NON-NULL, * THE COMMAND IS NOT DISPLAYED BY *HELP* * * THIS MACRO ALSO PLACES THE COMMAND NAMES IN THE * MICRO *HELP* FOR FURTHER PROCESSING IN THE *HELP* * COMMAND MACRO COMMAND,COM,WHAT,DEB .1 IFC EQ,*DEB*DEBUG*,1 .2 IFGE DEBUG,1,1 + VFD 42/0L_COM,18/COM ENDM SPACE 4,10 COMTAB BSS 0 ALARM COMMAND (SET THE ALARM) APPEND COMMAND (ADD A FILE TO THE END OF THE CURRENT FILE) BEGIN COMMAND (EXECUTE A PROCEDURE) IFNOS 1 BYE COMMAND (SAME AS LOGOUT) CATLIST COMMAND (LIST PERMANANT FILES) CCF COMMAND (CHECK CURRENT FILE),DEBUG COMPILE COMMAND (COMPILE/ASSEMBLE A PROGRAM) DELETE COMMAND (DELETE RANGES OF LINES) DMP COMMAND (DUMP SENATOR CORE),DEBUG DUP COMMAND (DUPLICATE A LINE RANGE WITHIN THE CURRENT FILE) EDIT COMMAND (ENTER *EDIT* MODE) END COMMAND (EXIT FROM SENATOR) EXECUTE COMMAND (LOAD AND EXECUTE AN OBJECT FILE) EXTRACT COMMAND (EXTRACT RANGES OF LINES) FORMAT COMMAND (FORMAT THE CURRENT FILE) SC IFNOSBE 1 GOODBYE COMMAND (END THE TERMINAL SESSION WITH NO LOGOUT INFORMATION) HELP COMMAND (PRINT THIS LIST) INPUT COMMAND (HIGH-SPEED TEXT ENTRY) IFGE DEBUG,1,1 JMP COMMAND (SET A JP *+400000B IN A WORD),DEBUG LENGTH COMMAND (PRINT LENGTH OF THE CURRENT FILE) LIST COMMAND (LIST THE CURRENT FILE) LOGOUT COMMAND (END THE TERMINAL SESSION, PRINT LOGOUT INFORMATION) MERGE COMMAND (MERGE A FILE WITH THE CURRENT FILE) MOVE COMMAND (MOVE LINES AROUND) NEW COMMAND (START A NEW CURRENT FILE) NOUT COMMAND (SEND COPY OF FILE TO PRINTER WITH NO SHIFTING) OLD COMMAND (READ A FILE) OPTION COMMAND (SET PROCESSING OPTIONS) OUT COMMAND (SEND A COPY OF A FILE TO THE PRINTER) PUNCH COMMAND (PUNCH A COPY OF A FILE) PURGE COMMAND (PURGE THE LOW CYCLE OF A PERMANENT FILE) READY COMMAND (ENTER *READY* MODE) RENAME COMMAND (RENAME THE CURRENT FILE) REPLACE COMMAND (REPLACE THE PERMANENT COPY OF A FILE) RESEQ COMMAND (RESEQUENCE THE CURRENT FILE) RMT COMMAND (FETCH AND DISPLAY A REMOTE OUTPUT FILE) IFGE DEBUG,1,1 RPV COMMAND (CLEAR THE REPRIEVE MASK),DEBUG RUN COMMAND (COMPILE AND EXECUTE A PROGRAM) SAVE COMMAND (SAVE THE CURRENT FILE TO A LOCAL FILE) SCOPE COMMAND (ENTER *SCOPE* MODE) SCP COMMAND (ENTER *SCP* MODE) SCRATCH COMMAND (ERASE THE CURRENT FILE) IFGE DEBUG,1,1 SET COMMAND (SET SENATOR CORE),DEBUG STATUS COMMAND (PRINT CURRENT FILE STATUS) SUBMIT COMMAND (SUBMIT A FILE TO THE INPUT QUEUE) SYSTEM COMMAND (CHANGE CURRENT SYSTEM) TAB COMMAND (SET TAB CHARACTER AND COLUMNS) TIME COMMAND (PRINT ELAPSED CP TIME) STAT$ IFNE STAT$,0,1 TSTATS COMMAND TSTATS COMMAND (PRINT TEXT I/O STATISTICS),STAT$ USE COMMAND (USE ALTERNATE FILE FOR SENATOR INPUT) DATA 0 END OF TABLE PURGMAC COMMAND NUMBERS SPACE 4,10 ** LIN - PROCESS LINE-NUMBERED INPUT. * LIN BX5 X6 SB7 B1 DECIMAL BASE RJ DXB DECIMAL TO DISPLAY CODE SA2 =999999D IX0 X2-X6 NG X0,WHAT IF NUMBER IS TOO LARGE SA6 LN SAVE THE LINE NUMBER * CHECK FOR A NULL LINE AND HENCE A LINE TO DELETE SA1 INC CHECK FOR END OF LINE SA2 INL IX0 X2-X1 NG X0,LIN1 IF EMPTY LINE, DELETE BX1 X1-X1 NOT INPUT MODE RJ RTL REFORMAT TEXT LINE NZ B7,READY IF ERROR BX6 X6-X6 SA6 ATLA NO SQUEEZE BX1 X1-X1 ZERO *FREE* FIELD SB7 IN SA2 INL RJ ATL ADD TEXT LINE ZR B7,READY1 IF OK EQ READY LIN1 SA1 LN DELETE A LINE RJ LTP LOCATE TEXT POINTER NZ B7,READY1 IF NOT THERE BX1 X6 RJ DEL DELETE THE LINE EQ READY1 ALARM TITLE 1,0 OVERLAY - PROCESS COMMANDS. *** ALARM - SET OR CLEAR THE ALARM TIME. * ALARM GNA NUM,AO SX7 B7-3 ZR X7,ALARM IF DELIMITER BX7 X7-X7 SA7 FALA ZR B7,READY IF DISABLE ALARM SX0 B6-2 ZR X0,ALA1 IF 2 CHARS PL X0,ALA4 IF GT 2 CHARS, ERROR SX0 1R0 BX6 X0+X6 SUPPLY OPTIONAL LEADING ZERO LX6 -6 ALA1 LX6 6*2 2RHH SX0 X6-2R00 MI X0,ALA4 ALPHA, ERROR SX0 X6-2R24 PL X0,ALA5 INVALID MILITARY HOUR SX0 1R LX0 12 BX6 X0+X6 INSERT LEADING SPACE SA6 ALAA SAVE GNA NUM,AO ZR B7,ALA3 IF EOL, USE DEFAULT SB7 B7-3 NZ B7,ALA4 IF NO DELIMITER GNA NUM,AO ZR X6,ALA3 IF USE DEFAULT MINUTES SX0 B6-2 NZ X0,ALA4 MUST HAVE TWO DIGITS LX6 6*2 2RMM SX0 X6-2R00 MI X0,ALA4 IF ALPHA, ERROR SX0 X6-2R60 PL X0,ALA5 IF INVALID MINUTES ALA2 SX0 1R. LX0 2*6 SA1 ALAA ....... HH BX6 X0+X6 .......HH LX1 3*6 BX6 X1+X6 .....HH MM LX6 24 SA6 FALA EQ READY ALA3 SX6 2R00 DEFAULT MINUTES EQ ALA2 ALA4 PRINT (FORMAT ERROR) EQ READY ALA5 PRINT (TIME MUST BE MILITARY) EQ READY ALAA BSS 1 APPEND SPACE 4,10 *** APPEND - APPEND A FILE TO THE CURRENT FILE. * APPEND BSS 0 RJ VCF VERIFY CURRENT FILE SB7 B1 SB6 B1 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR SX6 B1 SA6 ROFA SET PROCESSING CODE RJ GCP SA6 ROFB *N* PARAMETER LX6 6 SX0 X6-1RN ZR X6,APP1 IF NONE NZ X0,WHAT IF NOT *N* APP1 RJ ROF READ OLD FILE EQ READY1 SPACE 4,10 *** BEGIN - EXECUTE A PROCEDURE FILE. * BEGIN SX6 /CCC/VBET SA6 COMMON LOAD 3 CATALOG SPACE 4,10 *** CATLIST - LIST USER PERMANENT FILES. * CATLIST BSS 0 SX6 /CCC/VCAT SA6 COMMON LOAD 3 SPACE 4,10 IFGE DEBUG,1 ** CCF - CHECK CURRENT FILE (DEBUG). * * CHECKS THE CURRENT FILE. SEE *CCF* IN THE 0,0 * OVERLAY. CCF RJ //CCF CHECK CURRENT FILE EQ READY ENDIF COMPILE SPACE 4,10 *** COMPILE - COMPILE A PROGRAM. * COMPILE SX6 /CCC/VCOT SA6 COMMON LOAD 3 DELETE SPACE 4,10 *** DELETE - DELETE PORTIONS OF THE CURRENT FILE. * DELETE RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NO FILE BX6 X6-X6 SA6 TLNRL DEL1 RJ GLR GET LINE RANGE NZ B7,DEL2 IF END OF RANGES SA1 TLNRL SX7 X1+B1 SX0 X7-N.LNR-1 ZR X0,DEL7 IF TOO MANY SA7 A1 SA6 X1+TLNR EQ DEL1 DEL2 SA1 TLNRL ZR X1,DEL6 IF NONE TO DELETE BX1 X1-X1 RJ SFF SET FREE FIELD BX6 X6-X6 SA6 DELA DEL3 RJ NLR NEXT LINE IN RANGE NG B7,DEL4 IF END OF RANGES SA1 X6+TTPT SET DELETE BIT NG X1,DEL3 IF ALREADY DELETED MX0 1 BX6 X0+X1 SA6 A1 SA1 DELA SX6 X1+B1 SA6 A1 EQ DEL3 DEL4 SA1 DELA NZ X1,DEL5 IF LINE DELETED PRINT (NO LINES DELETED) EQ READY DEL5 RJ DME DELETE MARKED ENTRIES RJ CPT CONTRACT POINTER TABLE SA1 DELA DISPLAY LINES DELETED PVL ( 12345 LINES DELETED) PRINT ( ) EQ READY1 DEL6 PRINT (NO NUMBERS GIVEN) EQ READY DEL7 PRINT (TOO MANY LINE RANGES) EQ READY DELA BSS 1 DELETE COUNT SPACE 5 SPACE 4,10 IFGE DEBUG,1 DMP COMMAND ** DMP - DUMP CORE. * * SEE THE ROUTINE *DMP* IN THE 0,0 OVERLAY FOR * A DESCRIPTION OF THIS COMMAND DMP RJ //DMP EQ READY1 ENDIF DUMP SPACE 4,10 DUP SPACE 4,18 *** DUP - REPLICATE LINES WITHIN THE CURRENT FILE. * DUP BSS 0 RJ VCF NZ B7,READY IF NO CURRENT FILE SX6 /UTL/VDUT SA6 COMMON SET *DUP* FUNCTION ORDINAL LOAD 2 EDIT SPACE 4,10 *** EDIT - INVOKE THE STRING EDITOR. * EDIT LOAD 4,/EDIT/INI END SPACE 4,10 *** END - EXIT FROM SENATOR. * END RJ CPD CHECKPOINT DUMP IFNOS 1 CLEAR THE *B* DISPLAY FOR 1RO MESSAGE (=C* *),1 ENDRUN SPACE 4,10 EXECUTE SPACE 4,10 *** EXECUTE - LOAD AND EXECUTE AN OBJECT FILE. * EXECUTE SX6 /CCC/VEXT SA6 COMMON LOAD 3 EXTRACT SPACE 4,10 *** EXTRACT - EXTRACT LINES FROM THE CURRENT FILE. * EXTRACT RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NO FILE BX6 X6-X6 SA6 TLNRL EXT1 RJ GLR GET LINE RANGE NZ B7,EXT2 IF END OF RANGES SA1 TLNRL SX7 X1+B1 SX0 X7-N.LNR-1 ZR X0,DEL7 IF TOO MANY LINE RANGES SA7 A1 SA6 X1+TLNR EQ EXT1 EXT2 SA1 TLNRL ZR X1,DEL6 IF NONE TO EXTRACT MX1 1 RJ SFF SET FREE FIELDS EXT3 RJ NLR NEXT LINE IN RANGE NG B7,EXT4 IF END OF RANGES SA1 X6+TTPT MX0 1 BX6 -X0*X1 UNSET DELETE BIT SA6 A1 EQ EXT3 EXT4 RJ DME DELETE MARKED ENTRIES RJ CPT CONTRACT POINTER TABLE EQ READY FORMAT SPACE 4,10 *** FORMAT - FORMAT THE CURRENT FILE. * FORMAT RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NONE BX6 X6-X6 SA6 TLNRL FOR1 RJ GCP GET COMMAND PARAMETER SB7 FORA SEARCH FOR IT MX0 42 BX1 X0*X6 RJ SLS SEARCH LIST NZ X6,FOR3 IF OK SB7 B1 DEFAULT DECIMAL CONVERSION BX5 X1 SEE IF PARAMETER IS A NUMBER RJ DXB CONVERT TO BINARY NZ X4,FOR2 IF NOT A VALID NUMBER SX0 X6-1 MI X0,FOR2 IF NOT GREATER THAN ZERO SA6 FORF SAVE FOR PROCESSOR SX0 X6-N.LINE-1 SX6 FOR16 MI X0,FOR3 IF VALID NUMBER FOR2 PRINT (ILLEGAL FORMAT) EQ READY FOR3 SA6 FORB SAVE PROCESSING ADDRESS SX0 X6-FOR17 NZ X0,FOR4 IF NOT *T* OPTION SA1 SYS CHECK FOR SYSTEM *BASIC* SX0 X1-SBAS NZ X0,FOR4 IF NOT *BASIC* PRINT (OPTION ILLEGAL IN SYSTEM *BASIC*) EQ READY FOR4 RJ GLR GET LINE RANGE NZ B7,FOR5 IF INVALID RANGE SA1 TLNRL SX7 X1+B1 SX0 X7-N.LNR-1 PL X0,FOR6 IF TOO MANY RANGES SA7 A1 SA6 X1+TLNR STORE LINE RANGE EQ FOR4 TRY FOR MORE RANGES FOR5 RJ GCP GET COMMAND PARAMETER ZR X6,FOR7 IF EOL ENCOUNTERED PRINT (ILLEGAL LINE RANGE) EQ READY FOR6 PRINT (TOO MANY RANGES) EQ READY * LOOP THROUGH THE FILE FOR7 RJ NLR GET NEXT LINE IN RANGE MI B7,READY IF NO MORE LINES SA1 X6+TTPT GET THE LINE MX0 -21 BX6 -X0*X1 SA6 LN AX1 24 MX0 -24 BX1 -X0*X1 (X1) = DISK ADDRESS SX2 IN RJ ROT READ ONE TEXT LINE SA6 FORD LENGTH OF LINE SA1 FORB SB7 X1 JP B7 JUMP TO PROCESSOR * UPDATE PROCESSOR. IGNORE TRAILING BLANKS AND * SEE IF LINE IS AT LEAST 73 CHARS LONG. X6 = * LINE LENGTH FOR8 SA1 X6+IN-1 SKIP OVER TRAILING BLANKS SX0 X1-1R ZR X6,FOR99 IF LINE TOO SHORT NZ X0,FOR9 IF NON-BLANK SX6 X6-1 EQ FOR8 FOR9 BSS 0 SX0 X6-73D NG X0,FOR99 IF LINE TOO SHORT SB2 B0 LENGTH OF NUMERIC FIELD * BACK OVER NUMERIC FIELD... IT MUST BE 6 OR LESS * DIGITS FOR10 SX0 X1-1R0 NG X0,FOR11 IF NON-NUMERIC SX0 X0-9-1 PL X0,FOR11 IF NON-NUMERIC SX6 X6-1 BACK UP A COLUMN SA1 X6+IN-1 SB2 B2+B1 COUNT THE DIGIT SX0 B2-6-1 PL X0,FOR99 IF TOO LONG ZR X6,FOR99 IF LINE TOO SHORT EQ FOR10 LOOP FOR ALL DIGITS * SKIP OUR DELIMITER FOR11 SB3 X6+1 START OF NUMERIC SB4 0 LENGTH OF ID FOR12 SX0 X1-1R NZ X0,FOR13 IF END OF BLANKS SX6 X6-1 ZR X6,FOR99 IF NO GOOD SA1 IN+X6-1 EQ FOR12 * FINALLY, LOOK FOR IDENT. X1 = CHAR FOR13 SX0 X1-1R ZR X0,FOR14 IF START FOUND SB4 B4+B1 SX6 X6-1 ZR X6,FOR99 IF NO GOOD SX0 B4-9-1 PL X0,FOR99 IF NO GOOD SA1 IN+X6-1 EQ FOR13 * READY... CREATE THE *DELETE LINE. * * X6 = STARTING COLUNN OF ID - 1 * B4 = LENGTH OF ID * B3 = STARTING COLUMN OF NUMBER * B2 = LENGTH OF NUMERIC FIELD FOR14 SA6 FORD NEW LINE LENGTH SX7 1R. SB7 9+JN-1 SA7 B7+B4 SB5 A7+B1 MOVE B4,IN+X6+1-1,JN+9-1 MOVE ID SX6 B2+B5 SX6 X6-JN (X6) = NUMBER OF CHARACTERS SA6 FORE LENGTH OF *DELETE LINE MOVE B2,IN+B3-1,B5 BX6 X6-X6 RE-ENTER OUR TEXT LINE SA6 ATLA NO SQUEEZE SB7 IN SA2 FORD BX1 X1-X1 RJ ATL ADD TEXT LINE NZ B7,*+400000B IF NO ROOM TO OVERWRITE UPC JN-1,( *DELETE,) SX6 B1 SA6 ATLA SQUEEZE THIS ONE SB7 JN SA2 FORE BX1 X1-X1 RJ ATL ADD TEXT LINE NZ B7,FOR15 IF NO ROOM FOR *DELETE EQ FOR99 LOOP FOR ALL LINES FOR15 BSS 0 PRINT (CURRENT FILE FULL, COMMAND INCOMPLETE.) EQ READY * FORMAT NN. FOR16 SA2 FORF IX0 X2-X6 PL X0,FOR99 IF ALREADY SHORT ENOUGH BX1 X1-X1 SB7 IN BX6 X6-X6 SA6 ATLA RJ ATL ADD TEXT LINE EQ FOR99 * FORMAT T FOR17 SA6 INL SX6 B1 SA6 INC SX1 B1 RJ RTL REFORMAT TEXT LINE SA2 INL BX1 X1-X1 SB7 IN BX6 X6-X6 SA6 ATLA RJ ATL ADD TEXT LINE EQ FOR99 LOOP FOR ALL LINES * ON TO NEXT LINE FOR99 EQ FOR7 LOOP FOR MORE FORA SPACE 4,8 FORA BSS 0 OPTIONS TABLE T TABLE FOR17 U TABLE FOR8 DATA 0 FORB BSS 1 FUNCTION PROCESSING ADDR FORD BSS 1 LENGTH OF LINE FORE BSS 1 LENGTH OF OTHER LINE FORF BSS 1 LENGTH TO TRIM TO (NN) GET SPACE 4,10 IFNOSBE *** GOODBYE - LOGOUT THE TERMINAL WITH NO MESSAGES. * GOODBYE SX6 /CCC/VGOT SA6 COMMON LOAD 3 ENDIF HELP SPACE 4,10 *** HELP - DOCUMENT *READY* MODE. * HELP BSS 0 LOAD 5,/HELP/INI INPUT SPACE 4,10 *** INPUT - HIGH-SPEED TEXT ENTRY INTO THE CURRENT FILE. * INPUT SA1 CFN ZR X1,INP22 IF NO CURRENT FILE SA1 SYS ZR X1,INP22 IF NO SYSTEM BX6 X6-X6 CLEAR FLAGS SA6 INPS SA6 INPN SA6 INPA INP1 RJ GLN GET LINE NUMBER EQ B7,B1,INP1 IF DELIMITER, IGNORE NZ B7,INP2 IF NOT A LINE NUMBER SA1 INPA SX7 X1+B1 SX0 X7-3 ZR X0,WHAT IF 3 LINE NUMBERS, TOO MANY SA6 INPB+X1 STORE THE NUMBER SA7 A1 ZR X1,INP1 IF FIRST LINE NUMBER NZ X6,INP1 IF NON-ZERO INCREMENT PRINT (ERROR - ZERO INCREMENT) EQ READY INP2 RJ GCP GET COMMAND PARAMETER ZR X6,INP4 IF NO PARAMETER AT ALL LX6 6 SX0 X6-1RN SX1 X6-1RS ZR X0,INP3 IF *N* NZ X1,WHAT IF UNKNOWN SX6 B1 SET *S* SA6 INPS EQ INP1 INP3 SX6 B1 SA6 INPN SET *N* EQ INP1 * PARAMETERS ENTERED, HANDLE DEFAULTS INP4 SA1 SYS SX0 X1-SBAS NZ X0,INP5 IF NOT BASIC SX6 B1 SA6 INPN AUTO *N* MODE SA1 INPS ZR X1,INP5 IF NOT SQUEEZE PRINT (SQUEEZE ILLEGAL IN *BASIC*) EQ READY * PROCESS NOT-PARAMETER CASE INP5 SA5 INPA NZ X5,INP7 IF AT LEAST ONE PARAMETER * NO LINE NUMBER. USE END OF FILE + 10, INCR IS 10 SA1 LEN NZ X1,INP6 IF FILE NOT EMPTY SX6 IP.BASE SA6 INPB SX6 IP.INCR SA6 INPC EQ INP8 INP6 RJ FLL FIND LAST LINE SA5 X6+TTPT MX0 -21 EXTRACT LAST LINE NUMBER BX6 -X0*X5 SX0 IP.INCR IX6 X6+X0 SA6 INPB SX6 10D SA6 INPC EQ INP8 * ONE NUMBER, SET INCREMENT TO ZERO FOR LATER PROCESSING INP7 SX0 X5-1 NZ X0,INP8 IF 2 NUMBERS BX6 X6-X6 SA6 INPC * MAKE SURE HE DIDN-T SQUEEZE WITH AN INCREMENT. THEN, CHECK * FIRST NUMBER AND SEE IF IT EXISTS. INP8 SA1 INPS SQUEEZE FLAG SA2 INPC INCREMENT IX0 X1*X2 ERROR IF BOTH ARE GIVEN NZ X0,INP25 IF SQUEEZE AND AN INCREMENT SA1 INPB RJ LTP LOCATE TEXT POINTER NZ B7,INP9 IF NOT FOUND SA1 INPS ZR X1,INP24 IF NOT SQUEEZE, ERROR SA1 INPB INCREMENT THE VALUE BY ONE SX0 B1 IX7 X0+X1 SA7 A1 * SAVE STARTING LINE NUMBER AND DETERMINE INCREMENT INP9 SA1 INPB SAVE ORIGINAL STARTING LINE BX6 X1 SA6 INPE BX6 X6-X6 SA6 INPF COUNT OF LINES ENTERED SA1 INPC NZ X1,INP11 IF NOT ZERO, USE HIS SX6 IP.INCR ASSUME HE IS AT END OF FILE GT B7,B1,INP10 IF AT END SX6 1 INP10 SA6 INPC * PREPARE FOR NEXT INPUT LINE. (INPB) HAS THE NEXT * LINE NUMBER INP11 SA1 BRIEF NZ X1,INP12 IF BRIEF PRINT (INPUT LINES) PRINT ( ) INP12 SA1 INPB CHECK FOR SQUEEZE RJ LTP LOCATE TEXT POINTER SA6 INPD NZ B7,INP13 IF NOT SQUEEZED SA1 INPS NZ X1,INP13 IF SQUEEZE OK PRINT (NO MORE INPUT ROOM) EQ READY INP13 LE B7,B1,INP14 IF NOT AT EOF SA1 INPD INCREMENT TO POINT AFTER LAST LINE SX6 X1+B1 SA6 A1 INP14 SA1 INPN ZR X1,INP15 IF NO PROMPTING SA1 INPB RJ CDD KR IFNOSBE LX4 -6 SB2 B2+6+6-1 MX0 1 MASK OFF BOTTOM OF NUMBER AX0 B2 BX6 X0*X4 MX0 6 BX6 -X0*X6 CLEAR CARRIAGE CONTROL SX0 1R"S2" LX0 -6 BX6 X0+X6 ADD CC WRITEO O WRITE O KR ELSE MX0 6*6 BX6 X0*X4 JUST LINE NUMBER SX0 2R"ES" LX0 2*6 BX6 X0+X6 ADD CONTROL BYTE WRITEO O KR ENDIF INP15 RJ CCT CHECK CURRENT TIME TREAD NZ X1,INP19 * SORT OUT SPECIAL ENTRIES SA3 INL SX0 X3-3 PL X0,INP18 IF TOO LONG FOR SPECIAL STUFF SA1 FIT+VTTT LX1 59-53 NG X1,INP18 IF NOT TAB CHAR MX0 -6 BX2 -X0*X1 EXTRACT TAB CHARACTER SA1 IN IX0 X1-X2 NZ X0,INP18 IF FIRST INS-T TABE CHAR SX0 X3-1 ZR X0,INP29 IF JUST A TAB CHAR SA1 A1+B1 SX0 X1-1RL ZR X0,INP26 IF LIST LAST LINE SX0 X1-1RR ZR X0,INP27 IF *REPLACE* SX0 X1-1RC ZR X0,INP30 IF CHANGE DESIRED SX0 X1-1RD NZ X0,INP18 IF NOT TAB-D * DELETE THE PREVIOUS LINE SA1 INPF COUNT OF ENTERED LINES SX6 X1-1 NG X6,INP16 IF DELETING BEFORE FIRST ENTERED LINE SA6 A1 NZ X6,INP16 IF NOT FIRST LINE ENTERED SA1 INPE SET STARTING LINE NUMBER BX6 X1 SA6 INPB INP16 SA1 INPD DELETE PREVIOUS LINE RJ UOL UP ONE LINE NZ B7,INP23 IF TOP OF FILE BX1 X6 RJ DEL DELETE LINE SA1 INPD RJ UOL UP ONE LINE NZ B7,INP12 IF TOP OF FILE SA1 INPF ZR X1,INP12 IF BEFORE TOP OF INPUT SA5 X6+TTPT MX0 -21 BX6 -X0*X5 GET PREVIOUS LINE NUMBER SA6 INPB INP17 SA1 INPB ON TO NEXT LINE SA2 INPC IX6 X1+X2 SA6 A1 SA1 =1000000D IX0 X6-X1 NG X0,INP12 IF LINE NUMBER IS IN RANGE PRINT (LINE NUMBER IS TOO LARGE) EQ READY * REFORMAT THE LINE INP18 SA1 INPB BX6 X1 SA6 LN SX1 B1 SET INPUT MODE RJ RTL REFORMAT TEXT LINE NZ B7,INP28 IF LINE IN ERROR SA1 INPS BX6 X1 SA6 ATLA SET SQUEEZE FLAG BX1 X1-X1 NO FREE FIELD SB7 IN SA2 INL RJ ATL ADD TEXT LINE NZ B7,READY IF NOT ENTERED SA1 INPF INCREMENT OUR COUNT SX6 X1+B1 SA6 A1 EQ INP17 NEXT LINE * TELL THEM WHAT IS GOING ON... * * FILE.BAS TAB= NEXT=1745 INP19 BSS 0 PUTI JN SET PUT FWA PUTT (INPUTTING),2 PUTF CFN,,Z,B6+B1 PUTT (.),B6 SA1 SYS SX0 X1 LX1 2 *4 IX1 X1+X0 *5 SA1 X1+SYST PUTF X1,,3,B6 PUT SYSTEM SA5 FIT+VTTT READ TAB INFO WORD LX5 59-53 MI X5,INP20 IF NO TAB CHARACTER PUTT (TAB=),B6+B1 PUTF X5,10,1,B6 PUT TAB CHARACTER INP20 BSS 0 PUTT (NEXT=),B6+B1 PUTD INPB PUT NEXT LINE NUMBER SA1 INPS ZR X1,INP21 IF NOT SQUEEZE PUTT (SQUEEZE),B6+B1 INP21 BSS 0 PUTZ PRINTC JN PRINT ( ) EQ INP14 INP22 PRINT (NO CURRENT FILE OR SYSTEM) EQ READY INP23 PRINT (NO PREVIOUS LINES) PRINT ( ) EQ INP12 INP24 PRINT (STARTING LINE EXISTS) PRINT ( ) EQ READY INP25 PRINT (INCREMENT IS ILLEGAL WITH SQUEEZE) PRINT ( ) EQ READY * LIST LAST LINE (THE ONE THAT WOULD BE DELETED BY A TAB-D INP26 SA1 INPD RJ UOL UP ONE LINE NZ B7,INP23 IF TOP OF FILE SA5 TTPT+X6 GET ENTRY MX0 -21 BX7 -X0*X5 SA7 LN LINE NUMBER LX6 X5 MX0 -1 MASK FOR MARK BIT LX6 0-21 BX6 -X0*X6 EXTRACT MARK BIT SA6 LOLC SAVE FOR *LOL* MX0 -24 AX5 24 BX1 -X0*X5 DISK ADDRESS OF LINE SX2 IN RJ ROT READ ONE TEXT LINE SA6 INL BX6 X6-X6 SA6 LOLB DISPLAY THE LINE NUMBER IFNOSBE SX6 1R ELSE MX6 0 ENDIF RJ LOL LIST ONE LINE PRINT ( ) EQ INP12 INP27 BSS 0 IFNOS RJ VCF VERIFY CURRENT FILE NZ B7,INP12 IF NOTHING TO REPLACE SA1 CFN BX6 X1 SA6 NLFN SET FILE NAME FOR *PFM* MX0 -1 BX6 -X0+X6 INSERT COMPLETE BIT SA6 S SA2 UN BX6 X2 SA6 NUSN SET USER NUMBER SA2 PN BX6 X2 SA6 NPKN SET PACKNAME FOR *PFM* RJ DFR DETERMINE FILE RESIDENCY RETURN S,R UNLOAD SCRATCH FILE FOR *LFM* IFNE IP.APF,0,1 RJ APF ASSIGN PERM FILE SA1 SYS BX6 X1 SA6 SCFE SA1 CTY BX6 X1 SA6 NFTY BX6 X6-X6 SA6 TLNRL SET SAVE A-Z SX6 B1 WRITE *SAVE* INFO IF APPROPRIATE RJ SCF SAVE CURRENT FILE SA1 CTY CHECK CURRENT TYPE AX1 1 ZR X1,INP12 IF TYPE = LOCAL FILE SB7 OREP *REPLACE* ORDINAL RJ PFM EQ INP12 ELSE RJ VCF VERIFY CURRENT FILE NZ B7,INP12 IF NOTHING TO REPLACE SA1 CFN BX6 X1 SA6 NLFN SET FILE NAME FOR *PFM* MX0 -1 BX6 -X0+X6 INSERT COMPLETE BIT SA6 S SA2 ID BX6 X2 SA6 NUSN SET ID SA2 SN BX6 X2 SA6 NPKN SET SETNAME RJ DFR DETERMINE FILE RESIDENCY CLOSE S,UNLOAD,R IFNE IP.APF,0,1 RJ APF ASSIGN PERM FILE BX6 X6-X6 SA6 TLNRL SAVE A-Z SA1 SYS SX6 X1 SA6 SCFE SET SYSTEM SX6 B1 WRITE *SAVE* INFO RJ SCF SAVE CURRENT FILE SA1 CTY CHECK DEFAULT *TYPE* AX1 1 ZR X1,INP12 IF TYPE IS LOCAL SB7 OPUT RJ PFM PERM FILE MANAGER NZ B7,READY IF ERROR RJ PCN PRINT CYCLE NUMBER PRINT ( ) SA1 PFMA+1 AX1 6 SX0 X1-1 ZR X0,INP12 IF FIRST CYCLE, NO PURGE SB7 OPUR RJ PFM EQ INP12 ENDIF INP28 BSS 0 PRINT (BAD LINE, IGNORED.) PRINT ( ) EQ INP12 TRY ONCE AGAIN INP29 PRINT ( ) EQ READY DONE INP30 BSS 0 C/OLD/NEW/ SA1 INPD RJ UOL UP ONE LINE NZ B7,INP23 IF NO PREVIOUS LINE TO WORK UPON INP31 BSS 0 SA1 BRIEF NZ X1,INP32 IF *BRIEF* MODE IN EFFECT PRINT (CHANGE>) INP32 BSS 0 TREAD GET USER INPUT FOR CHANGE REQUEST ZR X1,INP33 IF NOT EOX, CONTINUE WITH CHANGE PRINT ( ) PRINT (CHANGE SYNTAX IS: /OLD/NEW/ DELIMITER NEED NOT BE ,A /) PRINT ( ) EQ INP31 TRY AGAIN INP33 BSS 0 SA1 INL GET LENGTH OF LINE SX0 X1-1 NZ X0,INP34 IF LINE IS MORE THAN A SINGLE CHARACTER SA1 FIT+VTTT GET TAB CHARACTER (IF ANY) LX1 59-53 MI X1,INP34 IF NO TAB CHARACTER IN EFFECT MX0 -6 BX2 -X0*X1 (X2) = TAB CHARACTER SA1 IN (X1) = SINGLE INPUT CHARACTER BX0 X1-X2 COMPARE NZ X0,INP34 IF INPUT IS NOT TAB CHARACTER PRINT (NO CHANGE) PRINT ( ) EQ INP12 INP34 BSS 0 * (IN) HAS CHANGE COMMAND. *GSS* IS CALLED TO GET THE SEARCH * STRING AND IT IS SAVED IN (JN). *GSS* IS CALLED AGAIN TO * GET THE REPLACEMENT STRING AND IT IS SAVED IN (HN). THEN * (JN) IS MOVED TO (KN) FOR *FSL*. SA1 INC SX6 X1+B1 ADVANCE OVER DELIMETER SA6 A1 RJ GSS GET SEARCH STRING NZ B7,INP12 IF NULL STRING SA5 KNL (X5) = LENGTH OF SEARCH STRING BX6 X5 SA6 JNL SAVE IT MOVE X5,KN,JN SAVE SEARCH STRING FOR NOW RJ GSS GET REPLACEMENT STRING NZ B7,INP12 IF NULL STRING SA5 KNL (X5) = LENGTH OF REPLACEMENT STRING BX6 X5 SA6 HNL SAVE IT MOVE X5,KN,HN SAVE REPLACEMENT STRING IN (HN) SA5 JNL BX6 X5 SA6 KNL LENGTH OF SEARCH STRING MOVE X5,JN,KN RESTORE SEARCH STRING FOR *FSL* * READ THE LINE TO PERFORM THE CHANGE UPON. SA1 INPD CURRENT *TTPT* ORDINAL RJ UOL UP ONE LINE NZ B7,INP23 IF TOP OF FILE SA5 TTPT+X6 GET ENTRY MX0 -21 BX7 -X0*X5 SA7 LN LINE NUMBER MX0 -24 AX5 24 BX1 -X0*X5 DISK ADDRESS OF LINE SX2 IN RJ ROT READ ONE TEXT LINE SB2 59 AX0 B2,X6 BX6 X0-X6 (X6) = ABS( (X6) ) SA6 INL RJ FSL FIND SEARCH STRING IN LINE ZR B7,INP35 IF SEARCH STRING LOCATED PRINT (STRING NOT FOUND) PRINT ( ) EQ INP12 INP35 BSS 0 * PERFORM THE SUBSTITUTION. SB5 X4 (B5) = LAST COLUMN OF SEARCH STRING + 1 AX4 30 SX5 X4-1 (X5) = NO. CHARS. PRECEEDING SEARCH STRING MOVE X5,IN,JN MOVE PART OF STRING SA1 HNL (X1) = LENGTH OF REPLACEMENT STRING IX6 X1+X5 SB4 X6 (B4) = LINE LENGTH MOVE X1,HN,JN+X5 MOVE REPLACEMENT SA2 INL (X2) = LENGTH OF ORIGINAL LINE SX1 B5 (X1) = LAST COLUMN + 1 OF STRING IX1 X2-X1 NUMBER OF CHARACTERS LEFT - 1 SB6 X1+B4 (B6) = LENGTH OF LINE - 1 MOVE (X1+B1),(IN-1+B5),(JN+B4) MOVE TAIL END SX6 B0 REPLACE EXISTING LINE (NO SQUEEZE) SA6 ATLA SET SQUEEZE FLAG FOR *ATL* BX1 X1-X1 NO *FREE* FIELD SB7 JN (B7) = FWA OF NEW LINE SX2 B6+B1 (X2) = LENGTH OF NEW LINE RJ ATL ADD TEXT LINE NZ B7,*+400000B EQ INP26 DONE INPA BSS 1 NUMBER OF LINE NUMBERS GIVEN ON CALL INPB BSS 1 FIRST LINE NUMBER GIVEN INPC BSS 1 INCREMENT (MUST IMMEDIATELY FOLLOW INPD) INPD BSS 1 TPT ORDINAL INPE BSS 1 ORIGINAL STARTING LINE NUMBER INPF BSS 1 COUNT OF LINES ENTERED INPN BSS 1 *N* FLAG INPS BSS 1 *S* FLAG SPACE 4,10 IFGE DEBUG,1 JMP COMMAND ** JMP - PLACE JP *+400000B IN AN ADDRESS. * * SEE 0,0 OVERLAY ROUTINE *JMP* FOR DESCRIPTION JMP RJ //JMP EQ READY1 ENDIF LENGTH SPACE 4,8 *** LENGTH - PRINT LENGTH OF THE CURRENT FILE. * LENGTH SA1 LEN PVL ( 12345 LINES) PRINT ( ) EQ READY1 LIST SPACE 4,10 *** LIST - LIST THE CONTENTS OF THE CURRENT FILE. * LIST RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NONE SX6 B0 DEFAULT A-Z SA6 TLNRL SA6 LOLB SET DEFAULT *N* AND *P* SETTINGS SA6 LISC SA6 LISB LIS1 RJ GLR GET LINE RANGE NZ B7,LIS2 IF NOT A RANGE SA1 TLNRL ADD IT SX7 X1+B1 SX0 X7-N.LNR ZR X0,LIS10 IF TOO MANY SA7 A1 SA6 X1+TLNR EQ LIS1 LIS2 RJ GCP GET COMMAND PARAMETER ZR X6,LIS5 NOPE, END OF LINE LX6 6 SX0 X6-1RN ZR X0,LIS4 IF *N* SX0 X6-100B*1R/ ZR X0,LIS3 IF DELIMITER FOR STRING (/) SX0 X6-1RP NZ X0,WHAT IF NOT *P* SX6 B1 SA6 LISC EQ LIS1 LIS3 SA6 LISB SET DELIMITER FLAG RJ GSS GET SEARCH STRING NZ B7,READY IF BAD STRING EQ LIS1 LIS4 SX6 B1 SA6 LOLB SET *N* FLAG EQ LIS1 LIS5 SA1 LISC ZR X1,LIS6 IF NO PUNCHING IFNOS WRITEA O,(?NUL??NUL??NUL??NUL??NUL??NUL??NUL??NUL??NUL??NUL?) ELSE SX2 O (X2) = FET ADDRESS SB6 LISE (B6) = FWA SB7 LISF-LISE (B7) = LENGTH RJ WTA OUTPUT LEADER ENDIF LIS6 RJ NLR GET NEXT LINE IN RANGE NG B7,LIS9 IF DONE SX7 1R SA7 LISA ZR B7,LIS7 IF NOT NEW BLOCK SX7 1R"S1" SA7 LISA KR IFNOS SA6 LISA SAVE ENTRY-S ORDINAL SA1 LISC NZ X1,LIS7 IF PUNCHING PRINT ( ) SA1 LISA BX6 X1 RESTORE X6 KR ENDIF LIS7 SA1 X6+TTPT MX0 -21 BX6 -X0*X1 SA6 LN LX6 X1 MX0 -1 LX6 0-21 BX6 -X0*X6 EXTRACT MARK BIT SA6 LOLC SAVE FOR *LOL* AX1 24 MX0 -24 BX1 -X0*X1 SX2 IN RJ ROT READ ONE TEXT LINE SA6 INL SA1 LISB ZR X1,LIS8 IF NO STRING SEARCH RJ FSL FIND STRING IN LINE NZ B7,LIS6 IF NOT FOUND LIS8 BSS 0 IFNOSBE SA1 LISA CARRIAGE CONTROL BX6 X1 ELSE MX6 0 NO CARRIAGE CONTROL ENDIF RJ LOL LIST ONE LINE EQ LIS6 LIS9 PRINT ( ) KR IFNOSBE 1 PRINT ( ) KR IFNOSBE 1 WRITER O,R FLUSH BUFFER, JUST IN CASE SA1 LISC ZR X1,READY1 IF NO PUNCH IFNOS WRITEA O,(?NUL??NUL??XOF??NUL??NUL??NUL??NUL??NUL??NUL??NUL?) ELSE SX2 O (X2) = FET ADDRESS SB6 LISD (B6) = FWA SB7 LISF-LISD (B7) = LENGTH RJ WTA OUTPUT TRAILER ENDIF EQ READY1 LIS10 PRINT (TOO MANY LINE RANGES) EQ READY LISA BSS 1 CARRIAGE CONTROL FOR THE LINE LISB BSS 1 STRING SEARCH FLAG LISC BSS 1 PUNCH FLAG IFNOSBE LISD ASCII (?DEL??DEL??DEL??CR??XOF?) LISE BSS 0 .A MICRO 1,, DUP 40,1 .A MICRO 1,, ".A"?NUL? ASCII (".A") LISF BSS 0 ENDIF SPACE 4,10 LOGOUT SPACE 4,10 *** LOGOUT - TERMINATE THE TERMINAL SESSION. * KR IFNOSBE LOGOUT SX6 /CCC/VLOT SA6 COMMON LOAD 3 KR ELSE BYE BSS 0 LOGOUT BSS 0 WRITEC O,(=C*"LO"*) WRITER O,R JP *+400000B IF RETURN FROM THAT KR ENDIF MERGE SPACE 4,10 *** MERGE - MERGE A FILE WITH THE CURRENT FILE. * MERGE SB7 B1 SB6 B1 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR SX6 B1+B1 SA6 ROFA SET PROCESSING FLAG RJ GCP GET COMMAND PARAMETER SA6 ROFB *O* PARAMETER LX6 6 SX0 X6-1RO ZR X6,MER1 IF NONE NZ X0,WHAT IF NOT *O* MER1 RJ ROF READ OLD FILE EQ READY1 MOVE SPACE 4,10 *** MOVE - SHUFFLE LINES WITHIN THE CURRENT FILE. * MOVE BSS 0 RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NO CURRENT FILE SX6 /UTL/VMOT SA6 COMMON SET *MOVE* ORDINAL LOAD 2 NEW SPACE 4,10 *** NEW - SET UP A NEW CURRENT FILE. * NEW SB7 B1 SB6 B0 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR RJ ICF INITIALIZE CURRENT FILE NEW1 RJ NCF NEW CURRENT FILE SA1 NRES ZR X1,READY IF NOT AROUND IFNOS LX1 59-0 NG X1,NEW2 IF LOCAL PRINT (WARNING - PERM FILE EXISTS) EQ READY NEW2 BSS 0 ENDIF PRINT (WARNING - LOCAL FILE EXISTS) EQ READY SPACE 4,10 *** NPRINT - PRINT A COPY OF A FILE WITH SHIFT SUPPRESSION * NOUT BSS 0 SX6 /CCC/VNPR SA6 COMMON LOAD 3 LOAD THE PROCESSOR OLD SPACE 4,10 *** OLD - RETRIEVE AN OLD CURRENT FILE. * OLD SB7 B1 SB6 B1 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR RJ GCP GET COMMAND PARAMETER SA6 ROFB LX6 6 SX0 X6-1RN ZR X6,OLD1 IF NO PARAM ZR X0,OLD1 IF PARAM OK EQ WHAT OLD1 RJ ICF INITIALIZE CURRENT FILE RJ NCF NEW CURRENT FILE BX6 X6-X6 SA6 ROFA SET PROCESSING FLAG RJ ROF READ OLD FILE EQ READY1 OPTION SPACE 4,10 *** OPTION - SET *SENATOR* PROCESSING OPTIONS. * OPTION GNA FN GT B7,B1,OPTION SKIP DELIMITER ZR B7,READY IF DONE * SEARCH FOR THE GIVEN OPTION MX0 42 BX1 X6 SB7 OPTA RJ SLS SEARCH LIST ZR X6,OPT99 IF NOT FOUND SB2 X6 ADDRESS/OPTION TYPE GNA FN SX0 B7-3 NZ X0,OPT99 IF NOT DELIMITER SX0 X6-1R= SX1 X6-1R- ZR X0,OPT1 IF = NZ X1,OPT99 IF NOT - OPT1 GNA FN PL B2,OPT3 IF SPECIAL PROCESSING NE B7,B1,OPT99 IF NOT ON/OFF LX6 2*6 SX0 X6-2RON SX7 B1 ASSUME *ON* ZR X0,OPT2 IF ON SX0 X6-2ROF SX7 B0 NZ X0,OPT99 IF NOT OFF OPT2 SA7 -B2 STORE ON/OFF EQ OPTION NEXT OPTION * SPECIAL PROCESSING OPT3 NG B7,OPT99 IFF ILLEGAL EQ B7,B1,OPT4 IF ALPHANUMERIC BX6 X6-X6 NULL PARAMETER OPT4 JP B2 JUMP TO PROCESSOR * PACKNAM/SETNAME IFNOS OPT4.5 SA6 PN STORE IT PACKNAM PN SET UNIVERSAL PACKNAM EQ OPTION ELSE OPT4.5 SA6 SN NZ X6,OPTION SA1 PS BX6 X1 SA6 A6 RESET DEFAULT SETNAME EQ OPTION ENDIF * UN/ID IFNOS OPT5 ZR X6,OPT5.1 IF NULL, USE USER-S SA6 UN EQ OPTION OPT5.1 SA1 IUN GET INITIAL USER NUMBER BX6 X1 SA6 UN EQ OPTION ELSE OPT5 BSS 0 ZR X6,OPT5.1 IF NULL ID, USE DEFAULT SA6 ID EQ OPTION OPT5.1 BSS 0 SA1 UID LX1 -12 BX6 X1 SA6 ID EQ OPTION ENDIF * TYPE= OPT6 BX1 X6 RJ CVT CONVERT TYPE NG X6,OPT99 IF ILLEGAL SA6 CTY BX6 X1 SA6 TYPE SET NEW L-FORMAT *TYPE* EQ OPTION * PW = NOS ... RD = NOS/BE OPT7 BSS 0 IFNOS SA6 PW ELSE SA6 RD ENDIF EQ OPTION IFNOSBE * TK OPT8 SA6 TK EQ OPTION * XR OPT9 SA6 XR EQ OPTION * RP OPT11 BSS 0 SA6 RP BX5 X6 SB7 B1 DECIMAL BASE RJ DXB ZR X4,OPTION IF GOOD RP PRINT (ILLEGAL *RP*) SA1 =3L999 ASSUME INFINITE RETENTION PERIOD BX6 X1 SA6 RP RESET DEFAULT RP EQ OPTION ENDIF * DEST= * DEST= OPT12 BSS 0 IFNOS ZR X6,OPT13 IF NO VALUE SX0 1RC SET UP MASK FOR CENTRAL SITE *C* LX0 59-5 SHIFT *C* TO UPPER 6 BITS IX0 X6-X0 MASK FOR DEST = C ZR X0,OPT13 SA6 DEST DEST HOLDS THE USER NUMBER EQ OPTION OPT13 BSS 0 BX6 X6-X6 SA6 DEST ELSE ZR X6,OPT13 IF NO DEST, RESET TO CENTRAL SITE SA6 DEST EQ OPTION OPT13 BSS 0 SX6 1RC LX6 -6 SA6 DEST EQ OPTION ENDIF EQ OPTION * ERROR OPT99 PRINT (ERROR IN OPTION COMMAND) EQ READY OPTA BSS 0 SAVE TABLE -SVFI PRC TABLE -PRC TYPE TABLE OPT6 DEST TABLE OPT12 IFNOS UN TABLE OPT5 PN TABLE OPT4.5 PW TABLE OPT7 ELSE SN TABLE OPT4.5 ID TABLE OPT5 RD TABLE OPT7 TK TABLE OPT8 XR TABLE OPT9 RP TABLE OPT11 ENDIF DATA 0 PRINT SPACE 4,10 *** PRINT - PRINT A COPY OF A FILE. * OUT BSS 0 SX6 /CCC/VPRT SA6 COMMON LOAD 3 PUNCH SPACE 4,10 *** PUNCH - PUNCH A COPY OF A FILE. * PUNCH SX6 /CCC/VPUT SA6 COMMON LOAD 3 LOAD THE PROCESSOR PURGE SPACE 4,10 IFNOSBE *** PURGE - PURGE A PERMANENT FILE. * PURGE SB7 B0 SB6 B0 RJ GFI GET FILE INFORMATION SA1 NFTY LX1 59-0 PL X1,PUR1 IF PURGE PF SA1 NLFN SX0 B1 BX6 X0+X1 SA6 S CLOSE S,UNLOAD,R EQ READY PUR1 SB7 OPUR RJ PFM PERM FILE MANAGER NZ B7,READY IF ERR RJ PCN PRINT CYCLE NUMBER EQ READY ELSE *** PURGE - PURGE A PERMANENT FILE. * PURGE SB7 B0 SB6 B0 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR SA1 NFTY CHECK LOCAL BIT LX1 59-0 CHECK LOCAL BIT NG X1,PUR1 IF LOCAL FILE SB7 OPUR RJ PFM EQ READY PUR1 SA1 NLFN GET FILE NAME RJ SUF SET AND UNLOAD FILE EQ READY ENDIF RENAME SPACE 4,10 *** RENAME - CHANGE THE NAME OF THE CURRENT FILE. * RENAME SB7 B1 SB6 B0 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR SA1 TFIT+VFST MX0 42 BX6 X0*X1 SA6 CFN CURRENT FILE NAME BX6 -X0*X1 LX7 X1 SA6 SYS SYSTEM SA7 FIT+VFST UPDATE FILE INFORMATION TABLE SB2 X6 LX6 2 *4 SX6 X6+B2 SA1 X6+SYST SX6 X1 SA6 CSYT SYSTEM TYPE SA1 NSYO SEE IF A SYSTEM GIVEN MI X1,REN1 IF NOT EXPLICITLY GIVEN SB7 FIT ADDRESS OF FILE INFORMATION TABLE RJ SNS SET NEW SYSTEM IN FIT REN1 BSS 0 SA1 NRES CHECK FILE RESIDENCY ZR X1,READY IF NOT AROUND AT ALL IFNOS LX1 59-0 MI X1,REN2 IF LOCAL PRINT (WARNING - PERM FILE EXISTS) EQ READY REN2 BSS 0 ENDIF PRINT (WARNING - LOCAL FILE EXISTS) EQ READY REPLACE SPACE 4,8 *** REPLACE - REPLACE A PERMANENT FILE. * REPLACE RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NONE SB7 B0 SB6 B0 RJ GFI GET FILE INFORMATON NZ B7,READY IF *END* OR ERROR SA1 NLFN RJ SUF SET AND UNLOAD FILE IFNE IP.APF,0,1 RJ APF ASSIGN PERM FILE BX6 X6-X6 SA6 TLNRL SA1 TFIT+VFST SX6 X1 SA6 SCFE SET SYSTEM FOR THIS REPLACE SX6 B1 SAVE *SAVE* INFORMATION RJ SCF SAVE CURRENT FILE SA1 NFTY AX1 1 CHECK FILE TYPE DESIRED ZR X1,READY IF LOCAL DESIRED IFNOS SB7 OREP RJ PFM EQ READY ELSE SB7 OPUT RJ PFM PERM FILE MANAGER NZ B7,READY IF ERROR RJ PCN DISPLAY CYCLE NUMBER SA1 PFMA+1 AX1 6 SX0 X1-1 ZR X0,READY IF FIRST CYCLE, DON-T PURGE SB7 OPUR RJ PFM SB7 OGET RJ PFM RE-ATTACH LATEST CYCLE EQ READY ENDIF RESEQ SPACE 4,10 *** RESEQ - RESEQUENCE THE CURRENT FILE. * RESEQ RJ VCF VERIFY CURRENT FILE NZ B7,READY IF NONE SX6 /UTL/VRET SA6 COMMON LOAD 2 RMT SPACE 4,10 *** RMT - FETCH REMOTE OUTPUT FILES. * RMT SX6 /CCC/VRMT SA6 COMMON LOAD 3 RPV SPACE 4,10 IFGE DEBUG,1 ** RPV - TURN OFF REPRIEVE. * * THIS COMMAND CLEARS THE REPRIEVE MASK TO ENABLE * DUMPS WITHOUT INTERFERENCE FROM THE RECOVERY * ROUTINE. RPV BX6 X6-X6 SA6 //RPV SYSTEM RPV,R,//RPV,000B EQ READY ENDIF RUN SPACE 4,10 *** RUN - COMPILE AND EXECUTE A PROGRAM. * RUN SX6 /CCC/VRUT SA6 COMMON LOAD 3 SAVE SPACE 4,10 *** SAVE - SAVE THE CURRENT FILE. * SAVE RJ VCF NZ B7,READY IF NO CURRENT FILE SB7 B0 SB6 B0 RJ GFI GET FILE INFORMATION NZ B7,READY IF *END* OR ERROR IFNOS SA1 NRES SA2 NFTY BX3 X1*X2 SEE IF LOCAL AND LOCAL FILE EXITSTS LX3 59 NG X3,SAV4 IF FILE ALREADY LOCAL LX2 59 NG X2,SAV1 IF LOCAL, ITS OK AX1 1 NZ X1,SAV4 IF PERMANANT ALREADY, ERROR ELSE SA1 NRES ZR X1,SAV1 IF NOT THERE SA1 NFTY LX1 59-1 PL X1,SAV4 IF HE WANTS TO OVERWRITE LOCAL FILE ENDIF SAV1 SA1 NLFN RJ SUF SET AND UNLOAD FILE IFNE IP.APF,0,1 RJ APF ASSIGN PERM FILE BX6 X6-X6 SA6 TLNRL SET ZERO LENGTH LNR SAV2 RJ GLR GET LINE RANGE NZ B7,SAV3 IF NO RANGE SA1 TLNRL ADD IT SX7 X1+B1 SX0 X7-N.LNR ZR X0,LIS10 IF TOO MANY SA7 A1 SA6 X1+TLNR EQ SAV2 SAV3 SA1 TFIT+VFST SET SYSTEM ORDINAL SX6 X1 SA6 SCFE SX6 B1 SET SAVE *SAVE* INFORMATION RJ SCF SAVE CURRENT FILE SA1 NFTY CHECK DESIRED FILE TYPE AX1 1 ZR X1,READY IF LOCAL IFNOS SB7 OSAV RJ PFM SAVE THE FILE EQ READY ELSE SB7 OPUT PUT THE PERM FILE RJ PFM NZ B7,READY IF ERROR RJ PCN DISPLAY CYCLE NUMBER EQ READY ENDIF SAV4 PRINT (FILE ALREADY THERE) EQ READY SCOPE SPACE 4,10 *** SCOPE - ENTER *SCOPE* MODE. * SCOPE SX6 /CCC/VSOT SA6 COMMON LOAD 3 SCP SPACE 4,10 *** SCP - ENTER *SCP* MODE. * SCP SX6 /CCC/VSCT SA6 COMMON LOAD 3 SCRATCH SPACE 4,10 *** SCRATCH - CLEAR THE CONTENTS OF THE CURRENT FILE. * SCRATCH RJ ICF INITIALIZE CURRENT FILE EQ READY SET SPACE 4,8 IFGE DEBUG,1 SET COMMAND ** SET - SET MEMORY, SEE SUBROUTINE *SET*. SET RJ //SET EQ READY1 ENDIF STATUS SPACE 4,10 *** STATUS - DISPLAY *READY* MODE STATUS. * STATUS SX6 /UTL/VSTT SA6 COMMON LOAD 2 SUBMIT SPACE 4,10 *** SUBMIT - ROUTE A FILE TO THE INPUT QUEUE. * SUBMIT SX6 /UTL/VSUT SA6 COMMON LOAD 2 SYSTEM SPACE 4,10 *** SYSTEM - DEFINE A NEW SYSTEM. * SYSTEM RJ GSY GET SYSTEM NZ B7,READY IF NONE GIVEN BX1 X6 SA6 SYS SB7 FIT RJ SNS SET NEW SYSTEM SA1 SYS SB2 X1 LX1 2 *4 SX1 X1+B2 *5 SA1 SYST+X1 SET SYSTEM TYPE SX6 X1 SA6 CSYT EQ READY DONE TAB SPACE 4,10 *** TAB - SET THE TAB CHARACTER AND COLUMNS. * TAB SA1 FIT+VTTT SET DEFAULTS SA2 A1+B1 BX6 X1 SA6 TABA BX6 X2 SA6 A6+B1 * SEE IF HE GAVE US A NEW TAB CHARACTER. TAB1 GNA NUM ZR B7,TAB10 IF EOL, CLEAR THE TAB CHAR AND COLUMNS LE B7,B1,TAB14 IF ILLEGAL TAB COMMAND SX0 B7-2 ZR X0,TAB4 IF TAB COLUMN SX0 X6-1R= ZR X0,TAB2 IF TAB CHARACTER SX0 X6-1R- NZ X0,TAB1 IF UNKNOWN DELIMITER, SKIP * TAB CHARACTER EXPECTED. GET IT. TAB2 SA1 INC SA2 INL IX0 X2-X1 NG X0,TAB11 IF EOL, CLEAR THE TAB CHARACTER SX6 X1+B1 BUMP THE POINTER SA6 A1 SA1 X1+IN-1 GET THE CHARACTER LX1 -6 POSITION IT SA2 TABA MERGE WITH OLD TAB COLUMNS MX0 7 BX6 -X0*X2 CLEAR OLD CHARACTER BX6 X6+X1 ADD THE NEW (W. TAB BIT) SA6 A2 * SEE IF HE GAVE US A TAB COLUMN TAB3 GNA NUM ZR B7,TAB8 IF EOL, RESTORE TAB STUFF LE B7,B1,TAB14 IF ILLEGAL INPUT SX0 B7-3 ZR X0,TAB3 IF DELIMITER, SKIP * WE HAVE A TAB COLUMN. SET UP FOR COLUMN-GETTING LOOP. * TAB COLUMN IS IN X6. TAB4 SA1 TABA CLEAR OLD COLUMNS MX0 7 BX7 X0*X1 SA7 A1 BX7 X7-X7 CLEAR SECOND WORD SA7 A7+B1 BX7 X7-X7 SA7 TABB NUMBER OF TABS SA7 TABC LAST TAB COLUMN SX7 40-0 SHIFT COUNTER SA7 TABD * PROCESS NEXT TAB COLUMN. X6 = CHARACTER, X7 = LAST TAB COLUMN TAB5 SA1 TABB SX7 X1+B1 COUNT THE TAB SX0 X7-14 PL X0,TAB13 IF TO MANY TABS SA7 A1 BX5 X6 CONVERT THE TAB CHAR SB7 B1 RJ DXB SX0 N.LINE GET MAX LENGTH OF LINES IX0 X0-X6 NG X0,TAB15 IF TOO LONG SA5 TABC CHECK WITH LAST TAB COLUMN IX0 X5-X6 PL X0,TAB12 IF TABS NOT IN ORDER SA6 A5 SA1 TABB SA5 TABA ASSUME WE ARE IN FIRST WORD SA4 TABD GET SHIFT COUNT SX0 X1-6-1 NG X0,TAB6 IF NOT IN SECOND WORD SA5 A5+B1 NZ X0,TAB6 IF NOT FIRST TIME IN THIS WORD SX4 60-8 TAB6 SB7 X4 LX6 B7 POSITION TAB COLUMN BX6 X5+X6 ADD TAB COLUMN SA6 A5 SX6 X4-8 DECREMENT SHIFT COUNT PL X6,TAB7 IF STILL IN THIS WORD SX6 60-8 POSITION IN NEW WORD TAB7 SA6 A4 * FIND ANOTHER TAB COLUMN. TAB8 GNA NUM ZR B7,TAB9 EOL, DONE LE B7,B1,TAB14 IF ILLEGAL SX0 B7-3 ZR X0,TAB8 IF DELIMITER, IGNORE EQ TAB5 LOOP WITH NEXT CHARACTER * DONE. *TABA* AND *TABA+1* HAVE THE NEW TAB INFORMATION. TAB9 SA1 TABA SA2 TABB PLUG THE TAB-COLUMN COUNT LX2 48-0 BX6 X1+X2 SA2 A1+B1 SA6 FIT+VTTT BX6 X2 SA6 A6+B1 EQ READY DONE * CLEAR THE TAB INFORMATION TAB10 SX6 B1 LX6 53-0 SA6 FIT+VTTT BX6 X6-X6 SA6 A6+B1 EQ READY * CLEAR THE TAB CHARACTER. TAB11 SA1 FIT+VTTT SX0 B1 LX0 53-0 POSITION *NO-TABCHAR* BIT BX6 X0+X1 SA6 A1 EQ READY * ERRORS. TAB12 PRINT (TABS NOT IN ASCENDING ORDER.) EQ READY TAB13 PRINT (MORE THAN 13 TAB COLUMNS.) EQ READY TAB14 PRINT (ILLEGAL TAB COMMAND.) EQ READY TAB15 PRINT (TAB COLUMN > MAX ALLOWED) EQ READY TABA BSS 2 TEMPORARY TAB INFORMATION TABB BSS 1 NUMBER OF TAB COLUMNS TABC BSS 1 SHIFT COUNT TABD BSS 1 LAST TAB COLUMN TIME SPACE 4,10 *** TIME - DISPLAY ELAPSED CPU TIME. * TIME TIME TIMA TOTAL CP SECS USED SA1 TIMA MX0 -12 BX6 -X0*X1 EXTRACT MILLISECONDS AX1 12 MX0 -24 BX1 -X0*X1 EXTRACT SECONDS LX1 3 *8 IX0 X1+X1 *16 SA5 LTIME LAST CP TIME READING IX0 X0+X1 *24 LX1 7 IX1 X1-X0 *1000 IX1 X1+X6 (SECONDS*1000)+MILLISECS BX6 X1 SA6 A5 SAVE NEW TIME AS LAST TIME * X1 = TOTAL CP TIME USED (BINARY) * X5 = CP TIME AT LAST *TIME* COMMAND IX5 X1-X5 BX6 X5 SA6 TIMB SAVE LAST TIME LX5 X1 SAVE (X1) PUTI JN SET PUT FWA PUTR X5,10,,2 PUT TOTAL CP TIME PUTZ PUTI A6+B1 START SECOND LINE PUTR TIMB,10,,2 PUT ELAPSED CP TIME PUTZ SX6 A6-JN WRITEW O,JN,X6+B1 DISPLAY TIME INFO EQ READY DONE TIMA BSS 1 *TIME* STATUS WORD TIMB BSS 1 OLD TIME SPACE 4,10 STAT$ IFNE STAT$,0 TSTAT SPACE 2,5 ** TSTAT - PRINT TEXT I/O STATISTICS. * * THIS COMMAND PRINTS THE CURRENT TEXT I/O STATISTICS * AND OPTIONALLY CLEARS THEM. * * TSTAT C * * WHERE C MEANS CLEAR THE STATS (OPTIONAL) TSTATS PRINT (READ STATISTICS) PRINT ( ) SA1 NROT PVL ( 12345 *ROT* CALLS) SA1 NROT SA2 NREA IX1 X1-X2 PVL ( 12345 LINES IN CORE) SA1 NREA PVL ( 12345 READS PERFORMED) SA1 NRRE PVL ( 12345 RANDOM READS) SA1 NSKI PVL ( 12345 PRUS SKIPPED) PRINT ( ) SB4 B0 FILE NAME OK, OF COURSE SA1 WRRE AX1 2 PVL ( 12345 MS WAIT IDLE) SA1 WSKI AX1 2 PVL ( 12345 MS SKIP) SA1 WREA AX1 2 PVL ( 12345 MS READ) PRINT ( ) PRINT (WRITE STATISTICS) PRINT ( ) SA1 NWOT PVL ( 12345 *WOT* CALLS) SA1 NWRI PVL ( 12345 WRITES) SA1 WWRI AX1 2 PVL ( 12345 MS WRITE) SA2 SLEN SA1 NWOT PX2 X2 PX1 X1 NX2 X2 NX1 X1 FX6 X2/X1 UX6,B7 X6 LX1 X6,B7 PVL ( 12345 AVE. LINE LENGTH) PRINT ( ) PRINT (BUFFER STATISTICS) PRINT ( ) PRINT ( BUF. UTL. FET BUSY) SX6 B0 LOOP INDEX SA6 TSTA TST1 SA1 TSTB+X6 GET LABEL BX7 X1 SA7 TSTC SA1 SWB+X6 SUM OF WORDS IN BUFFER SA2 NBC+X6 NUMBER OF BUFFER CHECKS SX3 100D SA4 TSTD+X6 LENGTH OF THE BUFFER IX1 X1*X3 *100 FOR PERCENT REASONS PX1 X1 IX4 X4*X2 BUFFER AVAILABLE PX4 X4 NX4 X4 FX7 X1/X4 COMPUTE PERCENTAGE IN USE UX7,B7 X7 LX7 B7 SA7 A7+B1 SAVE FOR THE MOMENT SA1 NQF+X6 FET BUSY COMPUTATION IX1 X2-X1 CHANGE FET QUIET TO FET BUSY IX1 X1*X3 FOR PERCENT PX1 X1 PX2 X2 NX2 X2 FX7 X1/X2 UX7,B7 X7 LX7 B7 SA7 A7+B1 SA1 A7-B1 CONVERT OUR VALUES TO DISPLAY CODE RJ CDD CONVERT DECIMAL DIGITS SA6 A1 SA1 A1+B1 RJ CDD SA6 A1 WRITEC O,TSTC PRINT THE LINE SA1 TSTA INCREMENT LOOP INDEX SX6 X1+B1 SA6 A1 SX0 X6-4 NZ X0,TST1 IF MORE TO DO RJ GCP GET COMMAND PARAMETER ZR X6,READY IF NOT CLEAR BX6 X6-X6 CLEAR STATISTICS SA6 NROT SA6 NSKI SA6 SSKI SA6 NREA SA6 NRRE SA6 WRRE SA6 WREA SA6 WSKI SA6 NWOT SA6 SLEN SA6 NWRI SA6 WWRI SA6 NBC DUP 3,1 SA6 A6+B1 SA6 SWB DUP 3,1 SA6 A6+B1 SA6 NQF DUP 3,1 SA6 A6+B1 EQ READY TSTA BSS 1 LOOP INDEX TSTB BSS 0 LABEL FOR STATS LINES DATA 10H TEXT IN DATA 10H TEXT OUT DATA 10H FILE IN DATA 10H FILE OUT TSTC BSSZ 4 WSA TSTD BSS 0 TABLE OF BUFFER LENGTHS CON LBUFT CON LBUFT CON LBUFS CON LBUFS STAT$ ENDIF USE SPACE 4,10 *** USE - USE AN ALTERNATE FILE FOR SENATOR INPUT. * USE SB7 B1 SB6 B1 RJ GFI GET FILE INFORMATION RECALL I NZ B7,READY IF ILLEGAL, NOT FOUND, OR *END* SA1 NLFN SX0 B1 SET COMPLETE BIT BX6 X0+X1 SA6 I LX7 X1 *USE* SUSPEND WORD: 42/LFN,18/LINE ORDINAL SX6 B1 SET READ FLAG SA6 RILA SA7 USU (LINE ORDINAL = 0) SA6 RILB SET READ-NEEDED FLAG REWIND I,R EQ READY1 TITLE 1,0 OVERLAY - SUBROUTINES. APF IFNE IP.APF,0 PROCEDURE APF ** APF - ASSIGN PERM FILE. * * THIS ROUTINE ENSURES THE FILE GIVEN BY *S* WILL RESIDE * ON A PERMANENENT FILE DEVICE. (NPKN) CONTAINS THE SETNAME * TO USE (SET BY *GFI*). * * ENTRY (S) = FILE NAME. * (NPKN) = SETNAME. * * CALLS *SYS=*. * * USES B - NONE. * A - 1, 6. * X - 0, 1, 6. APF SUBR SA1 S MX0 7*6 BX6 X0*X1 SA6 APFA SETUP *REQ* PARAMETER BLOCK SX6 40001B *PF AND SN BITS LX6 17-0 SA6 A6+B1 REQUEST *PF SA1 NPKN FETCH PACKNAM FROM *GFI* MX6 0 SA6 A6+B1 BX6 X1 SA6 A6+B1 PLUG SETNAME REQUEST APFA CALL *REQ* EQ APFX APFA BSS 4 PARAMETER BLOCK APF ENDIF FSL SPACE 4,17 ** FSL - FIND STRING IN LINE. * * THIS ROUTINE SEARCHES THE LINE IN *IN* FOR AN OCCURANCE * OF THE STRING IN *KN*. THE LATTER MUST NOT BE THE NULL * STRING. * * ENTRY (IN) HAS THE OPERAND STRING * (KN) = SEARCH STRING (NON-NULL). * * EXIT B7 = 0 IF FOUND * " 0 IF NOT FOUND * (X4) = VFD 30/START COL, 30/STOP COL + 1 * * USES A 1,2,3 * B 4,5,6,7 * X 0,1,2,3,5 * * CALLS NONE FSL3 BSS 0 SB4 B4-B1 (B4) = LENGTH OF STRING SX0 X4+B4 (X0) = LAST COLUMN + 1 OF STRING LX4 30 BX4 X0+X4 30/START COL, 30/STOP COL + 1 SB7 B0+ FLAG STRING FOUND FSL SUBR SA3 KNL SA5 KN FIRST CHAR SB5 X3 LENGTH OF SEARCH STRING SA1 INL LENGTH OF OPERAND STRING IX0 X1-X3 SB6 X0+B1 LAST COLUMN IN OPERAND TO SEARCH SB7 B0 CURRENT START-OF-STRING COLUMN * SEARCH FOR A MATCH TO THE FIRST CHARACTER FSL1 SB7 B7+1 NEXT COLUMN GT B7,B6,FSLX IF NOT FOUND, EXIT NO SA1 IN+B7-1 CHECK FIRST CHAR IX0 X1-X5 NZ X0,FSL1 IF NO MATCH SX4 B7 (X4) = FIRST COLUMN OF STRING * MATCHED THE FIRST CHAR, CHECK THE REST OF THE STRING SB4 B1 FSL2 SB4 B4+B1 GT B4,B5,FSL3 IF STRING FOUND SA1 A1+B1 SA2 KN+B4-1 IX0 X1-X2 NZ X0,FSL1 IF NO MATCH EQ FSL2 GSS SPACE 4,10 ** GSS - GET SEARCH STRING. * * THIS ROUTINE MOVES THE DELIMITER FOUND ON INPUT TO *JN*. * AN ERROR IS RETURNED IF THE STRING IS NULL. IF NO SECOND * DELIMITER IS FOUND, END-OF-LINE IS CONSIDERED THE SECOND * DELIMITER. * * ENTRY (INC) = COLUMN AFTER THE FIRST DELIMITER * * EXIT (KNL) = LENGTH OF THE STRING * (KN) HAS THE STRING * B7 = 0 IF SUCCESSFUL * = 1 IF ERROR * * USES ALL * * CALLS PRINT GSS3 SX6 X5+B1 SA6 INC SX6 B7 SA6 KNL ZR X6,GSS2 IF NULL STRING SB7 B0 RETURN CODE GSS SUBR SA5 INC SA3 IN+X5-1-1 GET DELIMITER SA4 INL SB7 B0 LENGTH OF STRING GSS1 IX0 X4-X5 NG X0,GSS3 IF END OF LINE SA1 IN+X5-1 GET NEXT CHARACTER IX0 X1-X3 COMPARE WITH DELIMITER ZR X0,GSS3 IF END OF STRING BX6 X1 SA6 KN+B7 MOVE THE CHARACTER SB7 B7+B1 SX5 X5+B1 EQ GSS1 GSS2 PRINT (NULL STRING IS ILLEGAL) PRINT ( ) SB7 B1 RETURN CODE EQ GSSX EXIT ICF SPACE 4,10 ** ICF - INITIALIZE CURRENT FILE. * * THIS ROUTINE LOGICALLY CLEARS THE CURRENT FILE. * * USES ALL * * CALLS SYS= ICF SUBR BX6 X6-X6 SA6 TTPTE SA6 TTPT SA6 LEN SA6 LAST SA6 PRUS SA6 A6+B1 SA6 TWRD SA6 ERANGE SA1 =999999D BX6 X1 SA6 A6+B1 INITIALIZE EDIT RANGE FOR NEW FILE ONLY SX6 B1 SA6 PRUS+2 SX6 B1 SET READ MODE SA6 //READ SA1 T+1 UNSET RANDOM BIT MX0 1 LX0 47-59 BX6 -X0*X1 SA6 A1 CLOSE T,UNLOAD,R IFNOS 1 SETFS T,NAD DON-T DROP THE FILE SA1 T+1 SET RANDOM BIT MX0 1 LX0 47-59 BX6 X1+X0 SA6 A1 SX6 ENDSEN SA6 FL SX6 X6-TTPT+1-10B SA6 FREE MEMORY CM,ICFA,R,ENDSEN EQ ICFX ICFA BSS 1 MEM STATUS WORD LOL SPACE 4,10 ** LOL - LIST ONE LINE. * * LISTS A LINE IN THE PROPER FORMAT. * * ENTRY (SYS) HAS THE SYSTEM * (IN) HAS THE TEXT * (LOLB) IS NOT ZERO IF NO LINE NUMBERS DISPLAYED * (LOLC) = 0/1 IF LINE IS UNMARKED/MARKED. * X6 IS CARRIAGE CONTROL IN R1 FORMAT * (LN) HAS THE LINE NUMBER * * EXIT LINE IS LISTED * * USES ALL * * CALLS WTC, PUT LOL SUBR * IF *NONE* SPECIFIED, JUST WRITE THE LINE WITH * CARRIAGE CONTROL. SA1 LOLB ZR X1,LOL1 IF NOT *NONE* SA6 INCC SA5 INL PRINTS INCC,X5+1 EQ LOLX EXIT LOL1 BSS 0 BX5 X6 PUTI JN SET PUT FWA SB6 B1 INITIALIZE *STCOL* ZR X5,LOL2 IF NO CARRIAGE CONTROL PUTF X5,10,1,B6 PUT CARRIAGE CONTROL * WE PUT THE LINE NUMBER OUT IN TWO DIFFERENT FORMS: * * 1) LINE NUMBER IMMEDIATELY FOLLOWED BY THE TEXT * (BASIC) * * 2) LINE NUMBER + BLANK + TEXT * (ALL OTHERS) LOL2 BSS 0 PUTD LN,6,,B6 PUT LINE NUMBER (I6 FORMAT) SX1 1R ASSUME LINE IS UNMARKED SA2 LOLC ZR X2,LOL3 IF LINE IS UNMARKED SX1 1R"COLON" LINE IS MARKED LOL3 BSS 0 PUTF X1,10,1,B6 PUT MARK INDICATOR LOL4 BSS 0 SA5 INL PUTS IN,X5,B6 PUT LINE PUTZ PRINTC JN EQ LOLX LOLB BSS 1 *NONE* FLAG LOLC BSS 1 0/1 = LINE UNMARKED/MARKED NCF SPACE 4,10 ** NCF - NEW CURRENT FILE. * * SETS UP THE CURRENT FILE INFORMATION. * * ENTRY (TFIT) HAS FILE INFORMATION * (FIT9 AND OTHER IS SET-UP NCF SUBR MOVE FITL,TFIT,FIT MOVE FILE IFORMATION SA1 FIT+VFST MX0 42 BX6 X0*X1 FILE NAME SA6 CFN BX6 -X0*X1 SYSTEM SA6 SYS SB3 X6 LX6 2 *4 SX6 X6+B3 *5 SA1 X6+SYST GET CURRENT SYSTEM TYPE SX6 X1 SA6 CSYT EQ NCFX EXIT PMM SPACE 4,10 ROF SPACE 4,10 ** ROF - READ OLD FILE. * * THIS IS THE MAIN COMMAND PROCESSOR FOR *GET*, *OLD*, * *APPEND*, AND *MERGE*. * * ENTRY (NLFN) HAS THE FILE NAME * (NSYO) SYSTEM FOR THIS CALL * (ROFA) HAS PROCESSING ORDINAL: * 0 - OLD, GET * 1 - APPEND * 2 - MERGE * (ROFB) IS NZ IF *O* OR *N* SPECIFIED * (TFIT+1) HAS SENINFO HEADER OR ZERO * * EXIT FILE READ * * USES ALL * * CALLS CIO=, SYS=, WTC=, FLL, ROS, ATL, LTP, DEL * PVL ROF SUBR IFNOSBE SA1 NFTY CHECK RESIDENCY LX1 59-0 MI X1,ROF0 IF LOCAL FILE RJ PCN PRINT CYCLE NUMBER ROF0 BSS 0 ENDIF SA1 TFIT-1 SX6 X1 SA6 ROFK ZERO EXPECTED RECORDS COUNT RECALL S SA1 NLFN SX0 B1 SET COMPLETE BIT BX6 X1+X0 SA6 S REWIND S,R READ S BX6 X6-X6 INITIALIZE COUNTERS SA6 ROFC SA6 ROFD SA6 ROFF SA6 ROFG SA6 ROFH SA6 ROFI SA6 ROFL SX6 -B1 SA6 ROFE SX6 B1 DEFAULT INCREMENT SA6 ROFJ SA1 NSYO GET SYSTEM INFO PL X1,ROF0.0 IF SYSTEM GIVEN SA1 SYS USE CURRENT SYSTEM ROF0.0 BSS 0 SB2 X1 LX1 2 SX1 X1+B2 *5 SA2 X1+SYST SX6 X2 SYSTEM TYPE SA6 ROSC SA3 X1+SYST+4 MX0 -4 BX6 -X0*X3 LENGTH CODE SA6 ROSD SA1 X6+SYSL GET LENGTH BX7 X1 SA7 ROSB SA1 ROFA SX0 X1-2 NZ X0,ROF0.1 IF NOT MERGE SA2 ROSC SX0 X2-SYTD NZ X0,ROF0.1 IF NOT UNSEQUENCED FILE PRINT (CAN-T MERGE AN UNSEQUENCED FILE) EQ READY1 ROF0.1 SX0 X1-1 NZ X0,ROF1 IF NOT APPEND RJ FLL FIND LAST LINE SA5 X6+TTPT MX0 -21 BX6 -X0*X5 SA6 ROFE LAST LINE OF FILE SX6 IP.INCR SA6 ROFJ INCREMENT BY 10 ROF1 RJ ROS READ ONE SOURCE LINE GT B7,B1,ROF13 IF EOI SA6 LN SAVE LINE NUMBER SA1 ROFC COUNT THE LINE SX6 X1+B1 SA6 A1 NE B7,B1,ROF3 IF NOT EOR/EOF SA1 ROFD COUNT THE FILE MARK SX6 X1+B1 SA6 A1 SA1 ROFG COUNT MARKS JUST HIT SX6 X1+B1 SA6 A1 SA1 ROFK MAX RECORDS/FILES SA2 ROFD IX0 X1-X2 NZ X0,ROF2 IF NOT LAST RECORD/FILE SX6 X6-1 SA6 A6 SA1 ROFC SX6 X1-1 DECREMENT LINE COUNT SA6 A1 SA1 ROFD SX6 X1-1 DECREMENT FILE/RECORD COUNT SA6 A1 EQ ROF13 COUNT RUN OUT, QUIT ROF2 SA1 ROFA PROCESS EOR/EOF SX1 X1-2 NZ X1,ROF5 IF NOT MERGE SA1 ROFC SX6 X1-1 DON-T COUNT IT SA6 A1 EQ ROF1 ROF3 BX6 X6-X6 SA6 ROFG NO RECORDS JUST HIT PL B7,ROF5 IF NO SEQUENCING ERRORS SA1 ROFA SX0 X1-1 ZR X0,ROF4 IF *APPEND* PL X0,ROF4.1 IF *MERGE* SA1 ROFC SX0 X1-1 NZ X0,ROF4 IF NOT FIRST CARD SX6 IP.BASE-IP.INCR SA6 ROFE SX6 IP.INCR SA6 ROFJ EQ ROF6 ROF4 SA1 ROFJ SX0 X1-IP.INCR ZR X0,ROF6 ... IF WE ARE GENERATING THEM SA1 ROFF SX6 X1+B1 SA6 A1 EQ ROF6 ROF4.1 SA1 ROFF COUNT THE BAD SEQUENCE FIELD SX6 X1+B1 SA6 A1 SA1 ROFC DECREMENT LINE COUNT SX6 X1-1 SA6 A1 EQ ROF1 NEXT LINE ROF5 SA1 LN PL X1,ROF7 IF WE HAVE A LINE NUMBER ROF6 SA1 ROFE GENERATE A LINE NUMBER SA2 ROFJ IX6 X1+X2 SA6 LN SA1 ROFI SX6 X1+B1 SA6 A1 * PROCESS THE LINE ACCORDING TO THE FUNCTION. ROF7 SA1 ROFA SB7 X1 JP B7+ROF8 FO PROCESS ROF8 JP ROF9 OLD JP ROF9 APPEND JP ROF12 MERGE * OLD AND APPEND PROCESSING. MAKE SURE THE NEW LINE * IS NOT OUT OF SEQUENCE. ROF9 SA1 LN SA2 ROFE IX0 X1-X2 BX6 X1 SA6 A2 ZR X0,ROF10 IF EQUAL TO LAST LINE PL X0,ROF11 IF NOT OUT OF SEQUENCE ROF10 SX0 B1 IX6 X2+X0 GENERATE A LINE NUMBER SA6 A2 SA6 LN SA1 ROFH SX6 X1+B1 SA6 A1 ROF11 BX6 X6-X6 SA6 ATLA NO SQUEEZE BX1 X1-X1 NO FREE FIELD SB7 IN SA2 INL RJ ATL ADD TEXT LINE NZ B7,ROF13 IF NOT ENTERED * MARK THE LINE IF IT EXCEEDED THE SYSTEM LINE LENGTH. SA2 ROFL PL X2,ROF1 NEXT LINE PLEASE MX0 -18 BX6 -X0*X2 CLEAR FLAG BIT SET BY *ROS* SA6 A2 SA1 ATLC (X1) = ORDINAL OF LINE JUST ADDED SA1 X1+TTPT READ *TPT* ENTRY MX0 -1 LX0 21-0 BX6 -X0+X1 SET *MARK* BIT FOR TOO LONG LINE SA6 A1 EQ ROF1 * MERGE - SEE IF THIS LINE OVERWRITES. ROF12 SA1 LN RJ LTP LOCATE TEXT POINTER NZ B7,ROF11 NOT OVERWRITE, ADD IT SA1 ROFH SX6 X1+B1 COUNT THE CONFLICT SA6 A1 SA1 ROFB SA1 ROFB NZ X1,ROF11 IF *O* SA1 ROFC SX6 X1-1 SA6 A1 EQ ROF1 * END OF FILE. DELETE TRAILING MARKS AND WRITE STATS. * DELETE TRAILING MARKS IF NOT MERGE AND HE DOESNT MIND. ROF13 SA1 ROFA SX0 X1-2 ZR X0,ROF15 IF MERGE SA1 ROFB NZ X1,ROF15 IF *N* FLAG GIVEN SA1 ROFG SA2 ROFD ADJUST RECORD/FILE COUNT IX6 X2-X1 SX6 X6+B1 SA6 A2 ROF14 SA1 ROFG ZR X1,ROF15 IF NO MORE SX6 X1-1 SA6 A1 RJ FLL FIND LAST LINE BX1 X6 RJ DEL DELETE LINE SA1 ROFI SX6 X1-1 SA6 A1 SA1 ROFC SX6 X1-1 SA6 A1 EQ ROF14 ROF15 SA1 ROFF ZR X1,ROF16 IF NO SEQ ERRORS PVL ( 12345 BAD SEQUENCE FIELDS) ROF16 SA1 ROFA SX0 X1-2 ZR X0,ROF18 IF *MERGE* SA1 ROFH ZR X1,ROF17 IF NO OUT-OF-SEQ PVL ( 12345 LINES OUT OF SEQUENCE) ROF17 SA1 ROFD SX0 X1-1 ZR X0,ROF18 IF ONLY 1 RECORD/FILE ZR X1,ROF18 IF ONLY 1 FILE PVL ( 12345 RECORDS/FILES) ROF18 SA1 CSYT SX0 X1-SYTD ZR X0,ROF19 IF NOT DATA SA1 ROFI ZR X1,ROF19 IF NONE GENERATED PVL ( 12345 LINE NUMBERS GENERATED) ROF19 SA1 ROFA SX0 X1-2 NZ X0,ROF20 IF NOT *MERGE* SA1 ROFH ZR X1,ROF20 IF NO CONFLICTS PVL ( 12345 MERGE CONFLICTS) ROF20 SA1 ROFL ZR X1,ROF21 IF NO LINES TRUNCATED PVL ( 12345 LINES TRUNCATED, THEY HAVE BEEN MARKED!) ROF21 SA1 ROFC PVL ( 12345 LINES) PRINT ( ) EQ ROFX ROFA BSS 1 PROCESSING FLAG (OLD-APPEND-MERGE) ROFB BSS 1 N/O PARAMETER FLAG ROFC BSS 1 LINE COUNT ROFD BSS 1 RECORD/FILE MARK COUNT ROFE BSS 1 HIGHEST LINE NUMBER SO FAR ROFF BSS 1 COUNT OF BAD SEQUENCE NUMBERS ROFG BSS 1 COUNT OF MARKS JUST HIT ROFH BSS 1 OUT OF SEQ COUNTS ROFI BSS 1 NO SEQ COUNTS ROFJ BSS 1 INCREMENT FOR NUMBERLESS LINES ROFK BSS 1 NUMBER OF RECORDS EXPECTED ROFL BSS 1 COUNT OF LINES TRUNCATED ROS SPACE 4,10 ** ROS - READ ONE SOURCE LINE. * * THIS ROUTINE READS A LINE OF TEXT FROM A USER-SUPPLIED * FILE, AS IN *OLD*, ETC. THE LINE NUMBER, IF ANY, IS EXTRACTED * ACCORDING TO THE CURRENT SYSTEM. *EOR/F ARE RETURNED IF * A FILE MARK IS ENCOUNTERED. * * ENTRY (S) HAS FILE NAME, FILE POSITIONED. * (ROFA) - TYPE OF COMMAND * (TFIT HAS SENINFO, IF ANY) * (ROSB) LENGTH OF LINES FOR THIS SYSTEM * (ROSC) SYSTEM TYPE * (ROSD) LENGTH CODE FOR THIS SYSTEM * * EXIT (IN) HAS THE LINE, INL _ EOL * X6 HAS THE LINE NUMBER OR -1 * B7 - 0 IF LINE NUMBER OK * - 1 IF EOR/EOF * - 2 IF EOI * --1 IF SEQUENCE NUMBER ERROR * (ATLZ) = UAT BITS * (ROFL) INCREMENTED IF LINE TRUNCATED * * USES ALL * * CALLS MVE, RDS ROS SUBR STAT S,3 SOURCE INPUT STATISTICS READS S,IN,-N.LINE-1 N.LINE+1 CHARS, NO TRAILING SPACE-FILL BX6 X1 SA6 ROSA SAVE RETURN CODE NZ X1,ROS12 IF EOR/EOF/EOI SX6 B6-IN SET LENGTH OF LINE SA6 INL SA2 ROSC GET SYSTEM TYPE SA3 ROSD GET LENGTH CODE IF DEF,SYTB *BASIC* SX0 X2-SYTB ZR X0,ROS9 IF *BASIC* ENDIF IF DEF,SYTT *TELEX* SX0 X2-SYTT ZR X0,ROS9 IF *TELEX* ENDIF SX0 X3-SLMX ZR X0,ROS3 IF NO SEQUENCING EXPECTED SA3 X3+SYSL GET EXPECTED LENGTH ROS1 SA1 INL IX0 X1-X3 SX0 X0-6 NG X0,ROS3 IF NOT LONG ENOUGH SX6 X3+B1 SA6 INC START OF THE LINE NUMBER ROS2 SB7 B1 RJ GLN GET LINE NUMBER EQ B7,B1,ROS2 IF DELIMITER, TRY AGAIN NZ B7,ROS3 IF BAD LINE NUMBER SA1 ROSB BX7 X1 SA7 INL SB7 B0 EQ ROSX EXIT * BAD LINE NUMBER ROS3 SA1 INL SA2 ROSB IX0 X1-X2 SX0 X0-1 NG X0,ROS4 IF LINE NOT TOO LONG SA1 ROFL SX6 X1+B1 COUNT THE TRUNCATED LINE MX0 1 BX6 X0+X6 SET SIGN BIT FOR *ROF* TO SEE SA6 A1 BX6 X2 SA6 INL ROS4 SX6 -B1 SB7 -B1 EQ ROSX EXIT * BASIC IF DEF,SBAS ROS9 SX6 B1 SA6 INC ROS10 SB7 B1 RJ GLN GET LINE NUMBER SX1 X6-1R SX0 B7-B1 BX0 X0+X1 MX1 1 BX0 -X1*X0 ZR X0,ROS10 IF BLANK, SKIP NZ B7,ROS3 IF BAD SA6 ROSA SAVE THE LINE NUMBER SA4 INC SA2 INL SA3 ROSB IX0 X2-X3 SX0 X0-1 NG X0,ROS11 IF LINE NOT TRUNCATED SA1 ROFL SX6 X1+B1 COUNT TRUNCATED LINE MX0 1 BX6 X0+X6 SET SIGN BIT FOR *ROF* TO SEE SA6 A1 BX2 X3 ROS11 IX6 X2-X4 SX6 X6+B1 SA6 INL MOVE X6,IN+X4-1,IN SA1 ROSA BX6 X1 SB7 B0 EQ ROSX EXIT ENDIF * END OF FILE/RECORD/INFORMATION, GENERATE A LINE. ROS12 SX0 X1+2 SB7 2 SX6 1R* SA6 IN ZR X0,ROSX IF EOI NG X1,ROS13 IF EOF UPC A6+B1,(EOR) EQ ROS14 ROS13 BSS 0 UPC A6+B1,(EOF) ROS14 SX6 4 SA6 INL READ S START READING AGAIN SX6 -B1 SB7 B1 EQ ROSX EXIT ROSA BSS 1 SCRATCH STUFF ROSB BSS 1 SYSTEM LINE LENGTH ROSC BSS 1 SYSTEM TYPE ROSD BSS 1 SYSTEM LENGTH CODE XTEXT COMCCFD SPACE 4,10 QUAL * SPACE 2 USE LITERALS END10 BSS 0 TITLE 2,0 OVERLAY - MORE *READY* COMMANDS. IDENT SEN20,READY,/UTL/UTL,2,0 ORG READY SPACE 2,5 COMMENT SENATOR VERSION "VER" - MORE READY MODE COMMANDS SPACE 2,5 QUAL UTL SPACE 4,10 ** THE 2,0 OVERLAY. * * THIS OVERLAY PROCESSES SOME OF THE *READY* MODE * COMMANDS THAT ARE NOT USED AS OFTEN AND THAT INVOLVE * A BIT OF CORE. THIS OVERLAY EXISTS TO KEEP THE TOTAL * CORE DOWN. * * THE COMMANDS PROCESSED IN THIS OVERLAY ARE MOSTLY * THE LINE EDITING COMMANDS. A TABLE OF THE PROCESSING * ORDINALS APPEARS AFTER THE ENTRY POINT. SPACE 4,10 * DATA WORDS FOR THE 2,0 OVERLAY. THE TABLE TRLN * FOLLOWS THE LWA OF THE *TTPT*, AND IS DYNAMICALLY * ALLOCATED AS LINE NUMBER REFERENCES ARE COLLECTED * DURING A *BASIC* RESEQUENCE. * TRLNP CON 500000B POINTER TO TRLN TRLNO CON ** ORDINAL IN -TRLN- TINP BSS M.INP *DUP*/*MOVE* INSERTION POINTS TFLN BSS M.FLN FLAGS TFLNL BSS 1 NUMBER OF FLAGS R1 BSS 1 START OF RANGE R2 BSS 1 END OF RANGE N1 BSS 1 FIRST NEW LINE NUMBER N2 BSS 1 INCREMENT SPACE 4,10 * 2,0 OVERLAY ENTRY POINT. SPACE 2,5 UTL SA1 COMMON SB7 X1 JP B7+UCOM UCOM BSS 0 LOC 0 VRET JP RES RESEQUENCE VSTT JP STA STATUS VMOT JP MOV MOVE VSUT JP SUB SUBMIT VEST JP EST EDIT STATUS VDUT JP DUP DUPLICATE LOC *O SPACE 4,10 UTLX LOAD 1 EXIT FROM 2,0 OVERLAY DUP SPACE 4,8 ** DUP - PROCESS *DUPLICATE* COMMAND. * * DUP R1-R2,N1,N2,...,N15 * * THE *FREE* FIELD OF VARIOUS *TTPT* ENTRIES IS * UTILIZED AS FOLLOWS * **T 1/R,1/RN,10/,1/IP * * R = 1 IFF THIS *TTPT* ENTRY WITHIN R1-R2. * RN = 1 FOR THE SINGLE *TTPT* ENTRY WITHIN * THE RANGE R1-R2 THAT WAS LAST DUPPED. * IP = 1 FOR THOSE *TTPT* ENTRIES AFTER WHICH * THE RANGE IS TO BE REPLICATED. * DUP BSS 0 SX1 B0 RJ //SFF CLEAR *FREE* FIELD SX6 B1 SA6 ATLA ENABLE *SQUEEZE* SA6 TLNRL INDICATE ONE RANGE TO *NLR* * CRACK ARGUMENTS. RJ GLR GET R1-R2 NZ B7,MOV1 IF SYNTAX ERROR SA6 TLNR STORE RANGE MX0 -21 BX7 -X0*X6 LX1 X6 AX6 24 BX6 -X0*X6 PL X1,DUP1 IF FORWARD RANGE BX6 X6-X7 BX7 X6-X7 BX6 X6-X7 SWAP R1 AND R2 DUP1 BSS 0 SX0 B1 IX6 X6-X0 SO THE CHECK WORKS SA6 R1 SA7 R2 SAVE R1 AND R2 FOR LATER SX6 B0+ SA6 DUPA INIT WRITE ORDINAL INTO *TINP* RJ NLR SEE IF THE RANGE EXISTS SX6 B1+ SA6 TLNRL RESET LENGTH PL B7,DUP2 IF SOMETHING IN THE RANGE PRINT (NO LINES IN SPECIFIED RANGE.) EQ UTLX EXIT. DUP2 BSS 0 SB7 B0+ ALLOW *A* AND/OR *Z* RJ GLN GET NEXT LINE NUMBER MI B7,MOV1 IF MORE THAN 999999 EQ B7,B1,DUP2 IF DELIMITER NZ B7,DUP4 IF EOL SA1 DUPA SX7 X1+1 COUNT NEW INSERTION POINT SX0 X7-M.INP-1 PL X0,DUP3 IF DUPPING TOO MANY TIMES SA6 TINP+X1 SA7 A1 * MAKE SURE WE*RE NOT DUPPING THE RANGE INTO ITSELF. SA3 R1 IX5 X3-X6 MI IFF N MORE THAN R1 SA2 R2 IX4 X6-X2 MI IFF N LESS THAN R2 BX0 X4*X5 MI IFF N WITHIN RANGE PL X0,DUP2 IF GOOD SYNTAX PRINT (CANNOT *DUP* R1-R2 INTO ITSELF.) EQ UTLX EXIT. DUP3 BSS 0 .A DECMIC M.INP PRINT (CANNOT *DUP* R1-R2 MORE THAN ".A" TIMES.) EQ UTLX EXIT. DUP4 BSS 0 * SORT *TINP*. SA1 DUPA (X1) = NUMBER OF ELEMENTS ZR X1,MOV1 ERROR IF NO INSERTION POINTS BX6 X1 SA6 A1+B1 SAVE COUNT OF INSERTION POINTS SB7 TINP RJ SST= SB7 B1 INITIALIZE *NXL* RJ NXL * MOVE THE FIRST LINE OF THE RANGE TO ALL INSERTION POINTS * TO FIX THEM WITHIN THE *TTPT*. PROCEED FROM Z-A BECAUSE * *SQUEEZE* MOVES THE *TTPT* DOWN TOWARDS EOF AND HENCE * LOWER LINE NUMBERS WON*T BE RESEQUENCED ON US. SX6 B1+ SA6 TLNRL RESET LENGTH OF *TLNR* FOR *NLR* RJ NLR FIND FIRST LINE IN DUP RANGE SA1 TTPT+X6 READ *TTPT* FOR FIRST LINE IN RANGE AX1 24 MX0 -24 BX6 -X0*X1 SA6 DUPB SAVE DISK ADDRESS FOR *ATL* DUP5 BSS 0 SA2 DUPA SX6 X2-1 (X6) = NEXT READ ORDINAL IN *TINP* MI X6,DUP9 IF FIRST LINE DUPPED AT ALL POINTS SA1 TINP+X6 (X1) = LINE NUMBER SA6 A2 BX6 X1 SA6 LN SET SPECIFIED LINE NUMBER RJ LTP FIND LINE EQ B7,B1,DUP7 IF BEFORE *A* PL B7,DUP6 IF LINE NUMBER EXACT OR AFTER EOF LX1 X6 (X1) = STARTING ORDINAL RJ UOL ADJUST *TTPT* ORDINAL DUP6 BSS 0 SA1 TTPT+X6 SA2 LN MX0 -21 BX1 -X0*X1 IX0 X1-X2 SX6 B1 MI X0,DUP7 IX6 X1+X6 USE *TTPT* LINE NUMBER + ONE SA6 A2 DUP7 BSS 0 SB7 B0 SA2 DUPB (X2) = DISK ADDRESS OF R1 SX1 B1 SET B48 TO FIX LINE WITHIN *TTPT* LX1 -12 POSITION *FREE* FIELD RJ ATL ADD FIRST LINE OF RANGE ZR B7,DUP5 IF LINE ADDED TO CURRENT FILE DUP8 BSS 0 RJ DIL DELETE INSERTED LINES PRINT (CURRENT FILE FULL, *DUP* INCOMPLETE.) EQ UTLX EXIT. DUP9 BSS 0 * CHECK HOW MANY LINES WERE IN THE SPECIFIED RANGE. IF ONLY * ONE, JUST GO AWAY. SA1 NXLB SX0 X1-1 ZR X0,UTLX EXIT, 1-LINE RANGE DUPPED * SINCE *ATL* WASN*T DESIGNED TO ADD MORE THAN A LINE * AT A TIME, AND HENCE CHEWS UP TREMENDOUS AMOUNTS OF * CP TIME, *DUP* WILL ADD THE REST OF THE RANGE. FIRST, * FIND ONE OF THE INSERTED LINES (BIT 48 WILL BE SET). * *SQUEEZE* ALL FOLLOWING LINES UNTIL THE RANGE WILL FIT, * AND THEN OPEN A HOLE IN THE *TTPT*. *DUP* WILL ADD * THE *TTPT* ENTRIES OF THE NEW LINES IN THE ZERO WORDS * FOLLOWING THE MARKED LINE. SA1 NXLB SA2 DUPA+1 (X2) = NUMBER OF INSERTION POINTS SX1 X1-1 (X1) = NUMBER OF LINES - 1 IN RANGE IX6 X1*X2 (X6) = NUMBER OF WORDS NEEDED RJ IFL INCREASE FL PL X0,DUP8 IF FL INCREASE NOT GRANTED SX1 -1 START AT BOF DUP10 BSS 0 RJ DOL DOWN ONE LINE NZ B7,DUP17 EOF, SQUEEZE AND HOLES COMPLETE LX5 59-48 BX1 X6 PL X5,DUP10 IF *TTPT* NOT MARKED SA6 DUPC SAVE ORDINAL FOR HOLE CREATION LX5 48-59 MX0 -21 SA2 NXLB (X2) = NUMBER OF LINES IN RANGE BX5 -X0*X5 (X5) = LAST ASSIGNED LINE NUMBER IX4 X2+X5 (X4) = NEXT SQUEEZE LINE NUMBER SA3 =1000000D (X3) = LARGEST LINE NUMBER + 1 SX1 B1 IX0 X4-X1 (X0) = LAST LINE NUMBER OF RANGE IX0 X0-X3 PL X0,DUP13 IF LAST LINE IN RANGE TOO LARGE DUP12 BSS 0 LX1 X6 RJ DOL NZ B7,DUP14 EOF, OPEN A HOLE IN THE *TTPT* MX0 -21 BX2 -X0*X5 (X2) = NEW LINE NUMBER IX2 X2-X4 PL X2,DUP14 IF SQUEEZE COMPLETE IX2 X4-X3 PL X2,DUP13 IF LINE NUMBER OVERFLOW BX5 X0*X5 REMOVE OLD NUMBER BX7 X4+X5 INSERT NEW NUMBER SA7 A5 STORE SQUEEZED *TTPT* ATL EQU ATL *ATL* ACTIVITIES BELOW SX7 B1+ IX4 X4+X7 INCREMENT SQUEEZE LINE NUMBER EQ DUP12 DUP13 BSS 0 RJ DIL DELETE INSERTED LINES PRINT (LINE NUMBERS TOO LARGE, *DUP* INCOMPLETE.) RJ CPT RELEASE FIELD LENGTH NOT USED EQ UTLX DUP14 BSS 0 * OPEN A HOLE (NXLB)-1 WORDS LONG, AND ZERO IT. SA1 DUPC SA2 NXLB SX1 X1+1 (X1) = FIRST ORDINAL TO MOVE SB5 X2-1 (B5) = NUMBER OF WORDS NEEDED SA2 TTPTE IX0 X2-X1 SB2 X0+B1 (B2) = NUMBER OF ENTRIES TO MOVE SB3 TTPT+X1 MOVE B2,B3,B3+B5 BX6 X6-X6 SA1 TTPTE SX7 X1+B5 DUP15 BSS 0 SB5 B5-B1 MI B5,DUP16 IF ENTIRE HOLE ZERO SA6 B3+B5 EQ DUP15 DUP16 BSS 0 SA7 A1 UPDATE (TTPTE) * COMPUTE THE LAST ORDINAL OF THE HOLE AND PROCEED * DOWN THE FILE FROM THERE UNTIL ALL HOLES CREATED. SA1 NXLB SX2 B1+B1 IX1 X1-X2 (X1) = NUMBER OF LINES - 2 IN RANGE SX0 A6-TTPT (X0) = ORDINAL OF FIRST ZERO WORD IN HOLE IX1 X0+X1 (X1) = ORDINAL OF LAST ZERO WORD IN HOLE EQ DUP10 DUP17 BSS 0 * FIND THE FIRST LINE IN THE RANGE AND SET (NXLD) * WHICH MOST LIKELY HAS CHANGED WITH ALL THE * SHUFFLING OF THE *TTPT*. SA2 TLNR SX1 -1 PL X2,DUP19 IF A FORWARD RANGE RJ FLL FIND LAST LINE MI X5,DUP20 IF LAST LINE 1ST LINE IN RANGE DUP18 BSS 0 LX1 X6 RJ UOL NZ B7,*+400000B SYSERR IF RANGE NOT FOUND PL X5,DUP18 IF NOT IN R1-R2 EQ DUP20 DUP19 BSS 0 RJ DOL NZ B7,*+400000B SYSERR IF RANGE NOT FOUND LX1 X6 PL X5,DUP19 IF NOT MARKED WITHIN R1-R2 DUP20 BSS 0 SA6 NXLD RESET (NXLD) SX1 -1 DUP21 BSS 0 * FIND THE FIRST *TTPT* ENTRY WITH B48 SET, CLEAR THE BIT, * AND INSERT THE NEXT LINE FROM R1-R2 AFTER IT. RJ DOL DOWN ONE LINE NZ B7,UTLX EOF, DUP COMPLETE LX5 59-48 SEE IF *TTPT* MARKED BX1 X6 SAVE ORDINAL FOR *DOL* PL X5,DUP21 IF NOT MARKED (B48) SA6 DUPD SAVE STORE ORDINAL MX0 1 BX6 -X0*X5 CLEAR B48 LX6 48-59 SA6 A5 STORE *TTPT* ENTRY DUP22 BSS 0 * FETCH THE NEXT LINE IN THE RANGE, EXTRACT THE DISK * ADDRESS, AND FORM A NEW *TTPT* ENTRY. MX0 -21 BX6 -X0*X6 (X6) = LAST LINE NUMBER SX0 B1 IX6 X0+X6 SA6 LN SET LINE NUMBER FOR THIS LINE SB7 B0+ GET NEXT LINE IN DUP RANGE RJ NXL NZ B7,DUP23 IF END OF RANGE (EOR) MX0 -24 AX5 24 BX2 -X0*X5 (X2) = DISK ADDRESS OF LINE SA1 LN (X1) = LINE NUMBER LX2 24 POSITION DISK ADDRESS BX6 X1+X2 FORM NEW *TTPT* ENTRY SA2 DUPD (X2) = LAST STORE ORDINAL SX7 B1 IX7 X2+X7 INCR NEW STORE ORDINAL SA7 A2 SA6 TTPT+X7 STORE NEW *TTPT* ENTRY SA2 LEN UPDATE LEN SX7 B1 IX7 X2+X7 COUNT THE ADDED LINE SA7 A2 LX6 X1 (X6) = LAST LINE NUMBER EQ DUP22 DUP23 BSS 0 SA1 DUPD (X1) = LAST STORE ORDINAL EQ DUP21 DUPA CON ** NUMBER OF *TINP* ENTRIES CON ** DUPB CON ** DISK ADDRESS OF FIRST LINE IN RANGE DUPC CON ** LAST ORDINAL DUPD CON ** *TTPT* STORE ORDINAL HELP SPACE 4,8 MOVE SPACE 4,10 ** MOVE - PROCESS *MOVE* COMMAND. * * MOVE R1-R2,N1,FLAG,F1,F2,...,F10 * MOV BSS 0 SX1 B0+ RJ //SFF CLEAR *FREE* FIELD RJ GLR GET R1-R2 ZR B7,MOV2 IF A VALID RANGE MOV1 BSS 0 PRINT (SYNTAX ERROR.) EQ UTLX EXIT. MOV2 BSS 0 SA6 TLNR SET R1-R2 FOR *NLR* MX0 -21 BX7 -X0*X6 R2 LX1 X6 AX6 24 BX6 -X0*X6 R1 PL X1,MOV3 IF A FORWARD RANGE BX6 X6-X7 BX7 X6-X7 SWAP X6 AND X7 BX6 X6-X7 R2 MOV3 BSS 0 SX0 B1 IX6 X6-X0 ADJUST FOR LATER CHECK SA6 R1 SET START OF RANGE SA7 R2 SET END OF RANGE SX6 B1+ SA6 ATLA ENABLE *SQUEEZE* SA6 TLNRL SET 1 RANGE FOR *NLR* * FETCH THE INSERTION POINT. MOV4 BSS 0 SB7 B0+ ALLOW *A* AND/OR *Z* RJ GLN GET LINE NUMBER (HOPEFULLY N1) EQ B7,B1,MOV4 IF DELIMETER NZ B7,MOV1 IF AN INVALID N1 SA6 TINP STORE INSERTION POINT * OKAY, GET LINE FLAGS, IF ANY. SB7 B1 RJ GLF GET LINE FLAGS NZ B7,MOV1 IF ERROR IN FLAGS * SET THE -U- BIT OF ALL -TRLN- ENTRIES (IF ANY). CHECKED * BY *PFC*, CLEARED BY *UFT*. SA1 TRLNO ZR X1,MOV5 LX7 X1 RJ SUF SET -U- BITS MOV5 BSS 0 * MAKE SURE THERE IS SOMETHING TO MOVE. RJ NLR SX6 B1+ SA6 TLNRL RESET LENGTH PL B7,MOV6 IF SOMETHING IN RANGE PRINT (NO LINES IN SPECIFIED RANGE.) EQ UTLX EXIT. MOV6 BSS 0 MX0 -24 AX5 24 BX6 -X0*X5 SA6 MOVA SAVE DISK ADDRESS OF FIRST LINE SX6 A5 SA6 MOVB SAVE *TTPT* ADDRESS FOR LATER DELETE * INCR N1 IF THAT LINE ALREADY EXISTS FOR SQUEEZE. SA1 TINP+0 BX6 X1 SA6 LN SET INITIAL LINE NUMBER MAYBE RJ LTP NZ B7,MOV7 IF LINE NOT FOUND SA1 LN SX6 B1 IX6 X1+X6 SA6 A1+ MOV7 BSS 0 * INIT *NXL* FOR THE MOVE AND MAKE SURE THE LINE * NUMBERS DON*T EXCEED 999999. SB7 B1+ RJ NXL INITIALIZE *NXL* SA1 LN SA2 NXLB (X2) = NUMBER OF LINES IN RANGE IX0 X1+X2 SX6 B1 SA3 =1000000 (X3) = LARGEST LEGAL LINE NUMBER + 1 IX0 X0-X6 (X0) = LAST LINE NUMBER OF NEW RANGE IX0 X0-X3 MI X0,MOV8 IF NEW RANGE FITS PRINT (LINE NUMBERS TOO LARGE.) EQ UTLX EXIT. MOV8 BSS 0 SA1 LN SA2 R2 SA3 R1 IX4 X1-X2 MI IFF N1 LESS THAN R2 IX5 X3-X1 MI IFF N1 MORE THAN R1 BX0 X4*X5 PL X0,MOV11 OKAY, MOVE FIRST LINE OF RANGE PRINT (CANNOT *MOVE* R1-R2 INTO ITSELF.) EQ UTLX MOV9 BSS 0 * THIS IS THE TOP OF THE MAIN MOVE LOOP. GET * THE NEXT LINE FROM THE RANGE. NOTE THAT *NXL* * WILL DELETE THE PREVIOUS LINE BEFORE RETURNING SA1 LN SX6 B1 IX6 X1+X6 SA6 A1 INCR MOVE LINE NUMBER SB7 B0+ RJ NXL GET NEXT LINE FROM *MOVE* RANGE NZ B7,MOV10 END OF RANGE, MOVE COMPLETE BX1 X5 (X1) = *TTPT* ENTRY FOR LINE RJ UFT UPDATE FLAG TABLE LX1 -21-3 BX2 -X0*X1 (X2) = DISK ADDRESS MX0 -1 LX1 3 21/LN,12/FREE,24/DA,1/RSVD,1/EPNT,1/MARK BX1 -X0*X1 EXTRACT POSSIBLE MARK BIT LX1 21-0 POSITION PROPERLY SB7 B0 INDICATE DISK ADDRESS SUPPLIED * BX2 X2 (SEE ABOVE) RJ ATL ADD TEXT LINE NZ B7,*+400000B SYSERR IF CAN*T ADD NEW LINE EQ MOV9 LOOP FOR ENTIRE RANGE MOV10 BSS 0 * THE RANGE HAS BEEN MOVED. PRINT FLAGS AND EXIT. RJ PFC PRINT FLAG CHANGES EQ UTLX EXIT. MOV11 BSS 0 SA1 MOVB SA1 X1 (X1) = *TTPT* ENTRY OF FIRST LINE RJ UFT PROCESS FLAG FOR FIRST LINE * MOVE FIRST LINE OF RANGE. IF THAT IS THE ONLY LINE, THEN * DELETE THE ORIGINAL *TTPT* ENTRY AND EXIT. SA2 MOVA (X2) = DISK ADDRESS OF FIRST LINE SA1 NXLB SX0 X1-1 NZ X0,MOV12 IF MORE THAN A SINGLE LINE RANGE SA1 MOVB (X1) = *TTPT* ADDRESS SA5 X1 READ TTPT ENTRY BEFORE IT IS DELETED MX6 0 SA6 X1 DELETE THE LINE SA1 LEN SX6 X1-1 SA6 A1+ MX0 -1 LX0 21-0 BX1 -X0*X5 PROPAGATE MARK BIT FOR *MOVE* SB7 B0 RJ ATL NZ B7,*+400000B SYSERR IF CAN*T ADD LINE EQ MOV10 PROCESS FLAGS AND EXIT MOV12 BSS 0 SB7 B0 SA1 MOVB (X1) = ADDRESS OF FIRST TTPT ENTRY MX0 -1 SA1 X1 (X1) = TTPT ENTRY LX0 21-0 BX1 -X0*X1 PROPAGATE MARK BIT FOR *MOVE* RJ ATL NZ B7,*+400000B EQ MOV9 MOVA CON ** DISK ADDRESS OF FIRST LINE IN RANGE MOVB CON ** *TTPT* ADDRESS OF FIRST LINE SPACE 2,5 RESEQ SPACE 4,10 ** RESEQUENCE PROCESSING. SPACE 2,5 RES BSS 0 BX6 X6-X6 SET DEFAULT VALUES SA6 RESC ASSUME NO BLOCK RESEQ (E.G., A-Z) SA6 R1 SA1 =999999D BX6 X1 SA6 R2 SX6 100D SA6 N1 SX6 10D SA6 N2 RJ GLR GET R1-R2 EQ B7,B1,RES5 IF NO RANGE MX0 -21 BX7 -X0*X6 END AX6 24 BX6 -X0*X6 START IX0 X6-X7 ZR X0,RES3 IF NO RANGE, ITS N1 SA6 RESC SET BLOCK RESEQ IN PROGRESS FOR *ULR* NG X0,RES1 IF IN ORDER BX6 X6-X7 SWAP THEM BX7 X6-X7 BX6 X6-X7 RES1 SA6 R1 STORE START SA6 N1 NEW DEFAULT N1 SA7 R2 STORE END RES2 SB7 B0 RJ GLN GET LINE NUMBER EQ B7,B1,RES2 IF DELIMITER NZ B7,RES5 IF NONE RES3 SA6 N1 RES4 SB7 B1 RJ GLN GET INCREMENT EQ B7,B1,RES4 IF DELIMITER NZ B7,RES5 IF NO GOOD SA6 N2 * CHECK FOR ERRORS IN THE RESEQUENCE PARAMETERS * * 1) ZERO INCREMENT * 2) RANGE EMPTY * 3) RANGE DOESN-T FIT * 4) LINE NUMBER OVERFLOW * 5) ATTEMPT TO MOVE RANGE RES5 BSS 0 SB7 B1 RJ GLF GET LINE FLAG NZ B7,UTLX IF ERROR, EXIT SA1 N2 NZ X1,RES6 IF INCR NOT ZERO PRINT (ZERO INCREMENT) EQ UTLX RES6 RJ CLR COUNT LINES IN RANGE NZ X7,RES7 IF SOMETHING THERE PRINT (NO LINES IN RANGE) EQ UTLX RES7 SA7 INL NUMBER OF LINES SX7 X7-1 COMPUTE FINAL RESEQUENCED NUMBER SA1 N2 IX7 X7*X1 SA1 N1 IX7 X7+X1 N1 + (NL-1)*N2 SA1 =1000000D IX0 X7-X1 NG X0,RES8 IF NOT TOO BIG PRINT (RESEQUENCED NUMBERS TOO LARGE) EQ UTLX RES8 SA1 CLRB CHECK IN RANGE RJ DOL DOWN ONE LINE NZ B7,RES9 IF EOF, OK SA1 X6+TTPT MX0 -21 BX2 -X0*X1 IX0 X7-X2 NG X0,RES9 IF IN RANGE PRINT (RESEQUENCED LINES OVERFLOW RANGE) EQ UTLX RES9 SA1 CLRA CHECK START OF RANGE RJ UOL UP ONE LINE NZ B7,RES10 IF BOI, OK SA5 X6+TTPT MX0 -21 BX6 -X0*X5 SA1 N1 IX0 X6-X1 NG X0,RES10 IF FIRST LINE OK PRINT (ATTEMPT TO *MOVE* INSTEAD OF *RESEQUENCE*) EQ UTLX * RESEQUENCE THE FILE. FIRST CALL *BLR* TO GET * BASIC LINE REFERENCES IF *BASIC* IS THE CURRENT * SYSTEM. THEN RESEQUENCE THE FILE, UPDATING THE * VALUES IN *TRLN*. THEN UPDATE BASIC LINE REFER- * ENCES. FINALLY, DISPLAY FLAG TABLE AND EXIT. RES10 SA1 SYS SX0 X1-SBAS NZ X0,RES13 IF NOT SYSTEM *BASIC* RJ BLR BASIC LINE REFERENCES * SAVE THE FIRST AND LAST LINE NUMBER OF THE RESEQ RANGE. * USED BY *ULR* DURING A BLOCK RESEQUENCE SA1 CLRA -TTPT- ORDINAL OF FIRST LINE SA1 TTPT+X1 MX0 -21 BX6 -X0*X1 SA6 RESA STARTING LINE NUMBER OF RANGE SA1 CLRB -TTPT- ORDINAL OF LAST LINE SA1 TTPT+X1 BX6 -X0*X1 SA6 A6+B1 ENDING LINE NUMBER OF RANGE RJ RCF SA1 TRLNO ZR X1,RES11 IF NO FLAGS AND/OR REFERENCES RJ ULR UPDATE LINE REFERENCES RES11 BSS 0 * PRINT ANY *BASIC* RESEQUENCE ERROR MESSAGES. SA1 BLRC ZR X1,RES12 IF NOT UNDEFINED REFERENCES PVL ( 12345 UNDEFINED LINE REFERENCES) RES12 SA1 BLRD ZR X1,RES14 IF NO ILLEGAL STATEMENTS PVL ( 12345 ILLEGAL *BASIC* STATEMENTS) EQ RES14 PRINT FLAGS AND EXIT RES13 RJ RCF RESEQUENCE CURRENT FILE RES14 RJ PFC PRINT FLAG CHANGES EQ UTLX RESA BSS 2 USED BY *ULR* RESC CON 0 NZ IFF A BLOCK RESEQ (FOR *ULR*) STATUS SPACE 4,10 ** STATUS - PRINT VARIOUS STATII. EST BSS 0 STA BSS 0 RJ GCP GET COMMAND PARAMETER ZR X6,STC NO PARAMETER, ASSUME *C* SB7 STAA FWA OF SEARCH LIST BX1 X6 MX0 42 RJ SLS SEARCH LIST NZ X6,STA1 IF FOUND PRINT (ILLEGAL STATUS PARAMETER) STA0 BSS 0 PRINT ( ) LOAD LAST STA1 BSS 0 SB7 X6 JP B7 PROCESS STATUS REQUEST STAA BSS 0 C TABLE STC CURRENT FILE STATUS D TABLE STD DUMP REGISTERS AFTER A SYSERR E TABLE STE EDIT STATUS F TABLE STF FULL STATUS M TABLE STM MISCELLANEOUS STATUS P TABLE STP PF STATUS R TABLE STR RCE STATUS CON 0 END OF TABLE STC SPACE 4,8 STC BSS 0 CURRENT FILE STATUS RJ STC0 EQ STA0 STD SPACE 4,8 STD BSS 0 DUMP REGISTERS AFTER A SYSERR RJ STD0 EQ STA0 STE SPACE 4,8 STE BSS 0 EDIT STATUS RJ STC0 RJ STE0 EQ STA0 STF SPACE 4,8 STF BSS 0 FULL STATUS RJ STC0 RJ STE0 RJ STM0 RJ STP0 RJ STR0 EQ STA0 STM SPACE 4,8 STM BSS 0 MISCELLANEOUS STATUS RJ STC0 RJ STM0 EQ STA0 STP SPACE 4,8 STP BSS 0 PF STATUS RJ STC0 RJ STP0 EQ STA0 STR SPACE 4,8 STR BSS 0 RCE STATUS RJ STC0 RJ STR0 EQ STA0 STC0 SPACE 4,8 ** STC0 - CURRENT FILE STATUS. * STC0 SUBR CURRENT FILE STATUS PRINT ( ) PUTI JN SET PUT FWA PUTB 1,B6 SA5 CTY CURRENT FILE TYPE IN EFFECT AX5 1 58/0,1/S,1/P ZR X5,STC1 IF TYPE = LOCAL SX1 1R( PUTF X1,10,1,B6 PUT OPEN PAREN IFNOSBE SA1 SN SETNAME ELSE SA1 PN PACKNAM MX0 42 BX1 X0*X1 DROP DEVICE TYPE INFORMATION NZ X1,STC0.1 IF NOT DEFAULT PACKNAM SA1 =9L*DEFAULT* FOR NOW... STC0.1 BSS 0 ENDIF PUTF X1,,Z,B6 PUT SETNAME/PACKNAME PUTT ()),B6 IFNOSBE SA1 ID PERM FILE ID ELSE SA1 UN USERNUMBER ENDIF PUTF X1,,Z,B6 PUT ID/UN PUTT ("COLON"),B6 STC1 BSS 0 PUTF TYPE,,Z,B6 PUT FILE TYPE PUTT (/),B6 PUTF CFN,,Z,B6 PUT CURRENT FILE NAME PUTT (.),B6 SA1 SYS BX0 X1 LX1 2 *4 IX1 X0+X1 *5 SA1 X1+SYST PUTF X1,,3,B6 PUT SYSTEM PUTT (, LEN=),B6 PUTD LEN,,,B6 PUT LENGTH OF CURRENT FILE PUTT (, TAB=),B6 SA5 FIT+VTTT GET TAB INFO LX5 6 MI X5,STC2 IF NO TAB CHARACTER PUTF X5,10,1,B6 PUT TAB CHARACTER EQ STC3 STC2 BSS 0 PUTT (*NONE*),B6 STC3 BSS 0 LX5 1+5 MX0 -5 BX6 -X0*X5 SA6 STCA SAVE COUNT OF TAB COLUMNS MX0 48 BX5 X0*X5 CLEAR COUNT FROM (X5) STC4 BSS 0 SA1 STCA ZR X1,STC6 IF END OF TAB COLUMNS SX6 X1-1 SA6 A1 COUNT THIS TAB PUTT (,),B6 NZ X5,STC5 IF MORE TABS IN THIS WORD SA5 A5+B1 READ REMAINDER OF TAB COLUMNS STC5 BSS 0 LX5 8 PUTD (X5,0,8),,,B6 PUT TAB COLUMN MX7 -8 BX5 X5*X7 CLEAR JUST PROCESSED TAB COLUMN EQ STC4 LOOP FOR ALL TAB COLUMNS STC6 BSS 0 PUTZ PRINTC JN OUTPUT FIRST STATUS LINE EQ STC0X EXIT STCA BSS 1 COUNT OF TAB COLUMNS STD0 SPACE 4,8 ** STD0 - DUMP REGISTERS AFTER A SYSERR. * STD0 SUBR DUMP REGISTERS AFTER A SYSERR SA1 SJRB ZR X1,STD0X IF NO REPRIEVE MX6 0 SA6 STDA INITIALIZE REGISTER NUMBER STD1 BSS 0 PUTI JN SET PUT FWA SA5 STDA (X5) = REGISTER NUMBER SX1 X5+2RA0 PUTF X1,9,2,2 FORMAT A-REGISTER SA1 X5+SJRB PUTO (X1,18,18),6,,B6+B1 SX1 X5+2RB0 PUTF X1,9,2,B6+B1 FORMAT B-REGISTER SA1 X5+SJRB PUTO (X1,0,18),6,,B6+B1 SX1 X5+2RX0 PUTF X1,9,2,B6+B1 FORMAT X-REGISTER SA5 X5+SJRB+8 PUTO (X5,48,12),4,Z,+1 PUTO (X5,36,12),4,Z,+1 PUTO (X5,24,12),4,Z,+1 PUTO (X5,12,12),4,Z,+1 PUTO (X5,0,12),4,Z,+1 SA1 STDA SA1 X1+SJRB+8 RJ SZC SPACE-FILL ZERO CHARACTERS PUTF X6,,10,B6+B1 PUT DISPLAY CODE PUTZ PRINTC JN SA1 STDA SX6 X1+B1 ADVANCE TO NEXT REGISTER SA6 A1 SX0 X6-8 MI X0,STD1 MX6 0 SA6 SJRB CLEAR STATUS WORD EQ STD0X EXIT STDA BSS 1 REGISTER NUMBER STE0 SPACE 4,8 ** STE0 - EDIT STATUS. * STE0 SUBR EDIT STATUS PRINT ( ) PUTI JN SET PUT FWA PUTT (POINTER AT),B6+B1 SA5 EPNT SA1 =3LXXX SA2 TTPTE IX0 X2-X5 MI X0,STE1 IF PAST EOF SA4 X5+TTPT ZR X4,STE1 IF NO CURRENT LINE MX0 -21 BX1 -X0*X4 (X1) = LINE NUMBER RJ CDD CONVERT TO DECIMAL DISPLAY CODE SB2 B2-B1 MX0 1 AX0 B2 BX1 X0*X4 STE1 BSS 0 PUTF X1,,Z,B6+B1 PUT LINE NUMBER OR *XXX* PUTT (, RANGE=),B6 PUTD ERANGE,,,B6 PUT SOR PUTT (-),B6 PUTD ERANGE+1,,,B6 PUT EOR PUTT (, PRC=O),B6 SA1 PRC SX5 2RN ASSUME PRC=ON NZ X1,STE2 IF ON SX5 2RFF INDICATE PRC=OFF STE2 BSS 0 PUTF X5,9,2,B6 PUT N OR FF PUTZ PRINTC JN OUTPUT STATUS INFORMATION * NOW FOR EDIT DEFAULTS. PUTI JN SET PUT FWA PUTT (DEFAULTS:),B6+B1 SA1 DALL ZR X1,STE3 IF NOT *ALL* PUTT (ALL),+2 STE3 BSS 0 SA1 DTOP ZR X1,STE4 IF NOT *TOP* PUTT (TOP),+2 STE4 BSS 0 SA1 DUNIT ZR X1,STE5 IF NOT *UNIT* PUTT (UNIT),+2 STE5 BSS 0 SA1 DVETO ZR X1,STE6 IF NOT *VETO* PUTT (VETO),+2 STE6 BSS 0 SA1 DNDIS ZR X1,STE7 IF NOT *DISPLAY* PUTT (DISPLAY),+2 SB6 DNDIS SB7 DDIS RJ PCR PRINT COLUMN RANGES STE7 BSS 0 SA1 DNZONE ZR X1,STE8 IF NOT *ZONE* PUTT (ZONE),+2 SB6 DNZONE SB7 DZONE RJ PCR PRINT COLUMN RANGES STE8 BSS 0 PUTZ PRINTC JN OUTPUT STATUS INFORMATION EQ STE0X STM0 SPACE 4,8 ** STM0 - MISCELLANEOUS STATUS. * STM0 SUBR MISCELLANEOUS STATUS SX6 STMA RJ PSI PRINT STATUS INFORMATION EQ STM0X STMA BSS 0 ALARM TABLE FALA BRIEF TABLE -BRIEF DEST TABLE DEST SAVE TABLE -SVFI VERSION TABLE STMB CON 0 END OF TABLE .V MICRO 1,3, "VER" STMB CON 3L".V" STP0 SPACE 4,8 ** STP0 - PF STATUS. * STP0 SUBR PF STATUS SX6 STPA RJ PSI PRINT STATUS INFORMATION EQ STP0X STPA BSS 0 IFNOSBE 1 ID TABLE ID IFNOS PN TABLE PN PW TABLE PW ENDIF IFNOSBE RD TABLE RD RP TABLE RP SN TABLE SN TK TABLE TK ENDIF TYPE TABLE TYPE IFNOS 1 UN TABLE UN IFNOSBE 1 XR TABLE XR CON 0 END OF TABLE STR0 SPACE 4,8 ** STR0 - RCE STATUS. * STR0 SUBR RCE STATUS SX6 STRA RJ PSI PRINT STATUS INFORMATION EQ STR0X STRA BSS 0 B TABLE FIT+VBFT COPYL TABLE FIT+VCLT G TABLE FIT+VGTT LIB TABLE FIT+VLIT LOAD TABLE FIT+VLOT S TABLE FIT+//VSTT CON 0 END OF TABLE SUBMIT SPACE 4,10 ** SUBMIT PROCESSING. * * IF A FILE NAME IS GIVEN, SUBMIT THAT FILE. ELSE, SAVE THE * CURRENT FILE AND SUBMIT IT INSTEAD. * SUB BSS 0 SB7 B0 NO DEMAND SB6 B1+B1 FETCH, RETURN IF NOT FOUND RJ GFI GET FILE INFORMATION EQ B7,B1,UTLX IF *END* OR ERROR SA1 GFIJ NZ X1,SUB2 IF NOT CURRENT FILE SA1 =0L"BFILE" RJ //SUF SET AND UNLOAD FILE BX6 -X6*X6 SA6 TLNRL INDICATE SAVE A-Z RJ VCF VERIFY CURRENT FILE NZ B7,UTLX EXIT IF NO CURRENT FILE SA1 SYS SX6 X1 SA6 SCFE BX6 X6-X6 NO *SAVE* INFO RJ SCF SAVE CURRENT FILE EQ SUB3 SUB2 BSS 0 SA1 NLFN MX0 -1 BX6 -X0+X1 INSERT COMPLETE BIT SA6 S ZR B7,SUB3 IF FILE EXISTS (FROM *GFI*) PRINT (NO FILE.) EQ UTLX EXIT SUB3 BSS 0 * *S* HAS THE FILE NAME TO ROUTE TO THE INPUT QUEUE. * DO IT. SC IFNOSBE SA1 S MX0 6*7 BX6 X0*X1 SA6 SUBA SA1 UID BX6 X1 SA6 SUBA+2 SYSTEM DSP,R,SUBA * BECAUSE *DSP* DOESN-T CURRENTLY RETURN JOB-CARD ERROR, * WE HAVE TO DO EXTRA WORK HERE. IF THE FILE WE WANTED * TO DISPOSE IS STILL HERE, ISSUE A MESSAGE. UNLOAD IT * IF IT IS OUR *BATCH* FILE. SA1 SUBA LX1 0-12 MX0 -6 BX6 -X0*X1 ZR X6,SUB5 IF NO ERROR CODE SX0 X6-03B ZR X0,SUB4 IF TRIED TO ROUTE A PERM FILE PRINT (ILLEGAL FILE FOR SOME REASON) PRINT ( ) EQ SUB7 SUB4 PRINT (CAN-T SUBMIT A PERM FILE) PRINT ( ) EQ SUB7 SUB5 BSS 0 SA1 S MX0 7*6 BX1 X0*X1 RJ FNT SEE IF FILE STILL AROUND NZ B7,SUB6 IF FILE STILL LOCAL PUTI JN SET PUT FWA PUTF SUBA,,7,2 PUT JOBNAME PUTT (SUBMITTED),B6+B1 PUTZ PRINTC JN EQ UTLX SUB6 BSS 0 PRINT (UNABLE TO SUBMIT - POSSIBLE JOB CARD ERROR) SUB7 BSS 0 SA1 S MX0 7*6 BX1 X0*X1 SA2 =0L"BFILE" BX0 X1-X2 NZ X0,UTLX IF NOT OUR BATCH FILE MX0 -1 BX6 -X0+X2 SA6 S CLOSE S,UNLOAD,R GET RID OF IT EQ UTLX SUBA CON ** FILE NAME VFD 12/0,12/0200B,12/2LIN,6/0,18/410124B VFD 48/0,12/** CON 0 CON 0 SC ELSE SA1 S PLUG IN THE FILE NAME MX0 42 BX6 X0*X1 SA6 SUBA SA6 SUBB SA1 DEST ZR X1,SUB4 IF NO DEST= OPTION BX6 X1 SA6 SUBC+1 ROUTE SUBB,R SA1 SUBB GET RETURN INFORMATION. EQ SUB5 SUB4 ROUTE SUBA,R SA1 SUBA GET RETURN INFORMATION * CHECK RETURN CODE AND REPORT THE SUBMITTED FILE NAME. SUB5 MX0 42 EXTRACT SUBMITTED JOB NAME BX6 X0*X1 MX0 -6 LX1 0-12 GET RETURN CODE BX1 -X0*X1 ZR X1,SUB6 IF NO ERROR CODE SX0 X1-/ERR/EC03 ZR X0,SUB7 IF TRIED TO SUBMIT A PERM FILE SX0 X1-/ERR/EC21 ZR X0,SUB10 IF BAD DEST SX0 X1-/ERR/EC32 ZR X0,SUB8 IF JOB CARD ERROR SX0 X1-/ERR/EC33 ZR X0,SUB9 IF TOO MANY JOBS SUBMITTED SX5 X1 REPORT RETURN CODE PUTI JN PUTT (*SUBMIT* ERROR ) PUTO X5,2,Z PUTZ PRINTC JN EQ UTLX SUB6 BX5 X6 SAVE JOB NAME PUTI JN PUTF X5,,4,2 PUTT (SUBMITTED),B6+B1 PUTZ PRINTC JN EQ UTLX EXIT SUB7 BSS 0 PRINT (CANNOT SUBMIT A DIRECT ACCESS PERMANENT FILE.) EQ UTLX EXIT SUB8 PRINT (JOB CARD ERROR.) EQ UTLX SUB9 PRINT (TOO MANY DEFERRED BATCH JOBS.) EQ UTLX SUB10 BSS 0 PRINT (BAD DESTINATION.) EQ UTLX SUBA CON ** SUBMIT TO CENTRAL SITE VFD 12/0,12/1000B,12/2RTO,6/0,18/410022B BSSZ 5 SUBB CON ** SUBMIT TO EI TERMINAL VFD 12/0,12/1000B,12/2RTO,6/0,18/410024B VFD 36/0,24/-SUBC BSSZ 4 SUBC DATA 0 DEFAULT FAMILY CON ** DESTINATION USER NUMBER SC ENDIF TITLE 2,0 OVERLAY - SUBROUTINES. ** ARN - ADD REFERENCED NUMBER. * * THIS ROUTINE ADDS A LINE REFERENCE TO -TRLN-. * * ENTER X7 = REFERENCE * (TRLNO) = NEXT FREE ORDINAL IN -TRLN- * * EXIT -TRLN- ENTRY MADE, (TRLNO) INCREMENTED. * * CALLS *IFL* IF MORE MEMORY NEEDED FOR THE -TRLN- ENTRY. * * USES B - NONE. * A - 1, 6, 7. * X - 0, 1, 6, 7. * ARN SUBR SA1 ARNA FETCH FIRST TIME FLAG NZ X1,ARN2 IF ALREADY INITIALIZED * GET AN INITIAL FIELD LENGTH IF NEEDED. SA1 TTPTE ORDINAL OF LAST -TTPT- ENTRY SX0 TTPT+X1 LWA OF NEEDED FL SA1 FL CURRENT FL IX0 X0-X1 NEEDED - CURRENT MI X0,ARN1 IF NO FL INCREASE NEEDED SX6 D.FL RJ IFL REQUEST FL INCREASE PL X0,ARN4 IF NO FIELD LENGTH LEFT ARN1 BSS 0 * INITIALIZE -TRLNP- (FWA OF -TRLN-) TO THE LWA+1 OF * THE -TTPT-, AND SET THE FWA-1 OF -TRLN- TO -1 FOR *SRT*. SA1 TTPTE SX0 TTPT+1+X1 LWA+1 OF -TTPT- SX6 -1 SA6 X0 SET FWA-1 OF -TRLN- = -0 SX6 A6+B1 SA6 TRLNP SET FWA OF -TRLN- SA6 ARNB SAVE STORE ADDRESS FOR -TRLN- ENTRY SA6 ARNA INDICATE INITIALIZATION COMPLETE EQ ARN3 ARN2 BSS 0 * SEE IF AN FL INCREASE IS NEEDED BEFORE STORING THIS ENTRY. SA1 TRLNP BX0 X1 FWA OF -TRLN- SA1 TRLNO IX6 X0+X1 FL WE NEED SA6 ARNB SAVE STORE ADDRESS SA1 FL CURRENT FIELD LENGTH IX0 X6-X1 NEEDED - CURRENT MI X0,ARN3 IF NO FL INCREASE NEEDED SX6 D.FL RJ IFL REQUEST FL INCREASE PL X0,ARN4 IF NO FIELD LENGTH LEFT ARN3 BSS 0 * OKAY, UPDATE -TRLN- WITH THE NEW ENTRY. SA1 ARNB FETCH STORE ADDRESS SA7 X1 STORE -TRLN- ENTRY SX7 X1+B1 SA1 TRLNP FETCH FWA OF -TRLN- IX7 X7-X1 SA7 TRLNO SET NEXT ORDINAL IN -TRLN- EQ ARNX EXIT. ARN4 PRINT (TOO MANY REFERENCES OR FILE TOO LONG) PRINT ( ) EQ UTLX EXIT ARNA DATA 0 ZR IFF FIRST CALL TO *ARN* ARNB BSS 1 STORE ADDRESS IN -TRLN- BLR SPACE 4,10 ** BLR - BASIC LINE REFERENCES. * * THIS ROUTINE EXTRACTS LINE REFERENCES FROM BASIC SOURCE CODE, * BUILDS A TABLE OF THESE REFERENCES, AND WRITES THE CARD * IMAGE TO A SCRATCH FILE. FURTHER, THE -FREE- FIELD OF * THE -TPT- ENTRY ASSOCIATED WITH THE LINE IS SET TO THE * ORDINAL WITHIN THE SCRATCH FILE OF THE AFOREMENTIONED * *BASIC* STATEMENT. THE REFERENCED LINE NUMBER TABLE * HAS THE FOLLOWING FORMAT/ * **T TRLN 1/U,11/ FREE,24/ NEW,24/ OLD * * U = 1 IF UNDEFINED LINE NUMBER (THE INITIAL VALUE). * SET BY *BLR*, CLEARED BY *RCF*. * ALSO, SOMETIMES, BY *ULR* DURING A BLOCK RESEQ. * OLD = REFERENCED LINE NUMBER. * NEW = VALUE THAT -OLD- WILL TAKE ON WHEN THE RESEQ * IS COMPLETE. -NEW- IS NOT GENERATED IN THIS * ROUTINE, BUT IN *RCF*. * * THE *BASIC* CARD IMAGE IS WRITTEN TO THE SCRATCH FILE IN R1 * FORMAT, WITH A ONE WORD HEADER AND ALL EXTRACTED LINE * REFERENCES PRECEEDING IT. SEE *WSF* FOR DETAILS. * * EXIT B7 = 0 IF NO LINE REFERENCES COLLECTED * B7 = 1 IF LINE REFERENCES FOUND * (TRLNO) = NUMBER OF REFERENCES (LENGTH OF -TRLN-) * QUOTE MICRO 1,,/"/ **** TSBC - TABLE OF SPECIAL *BASIC* COMMANDS. VFD 24/0,18/BLR5,*P/2RJU JUMP TSBC VFD 24/0,18/BLR5,*P/2RGO GOTO/GOSUB VFD 24/0,18/BLR5,*P/2RIF IF-THEN VFD 24/0,18/BLR5,*P/2RNO NODATA VFD 24/0,18/BLR6,*P/2RON ON-GOTO/ON-ERROR VFD 24/0,18/BLR15,*P/2RPR PRINT-USING CON -0 **** BLR SUBR SA1 SYS SX0 X1-SBAS NZ X0,BLRX IF NOT BASIC SA1 =0L"SFILE" RJ //SUF SET AND UNLOAD FILE SX1 B0+ RJ //SFF CLEAR *FREE* FIELD RJ FFL FETCH ORDINAL OF FIRST -TPT- ENTRY SA6 BLRF EQ BLR2 JOIN MAIN LOOP BLR1 BSS 0 SA1 BLRF FETCH LAST -TPT- ORDINAL RJ DOL NZ B7,BLR24 IF EOR/EOF/EOI SA6 BLRF SAVE CURRENT -TPT- ORDINAL BLR2 BSS 0 * THIS IS THE TOP OF THE MAIN LOOP. ISSUE A STRING READ, * AND THEN DETERMINE THE COMMAND TYPE OF THIS LINE. * * X6 = ORDINAL OF CURRENT -TPT- ENTRY. SA1 TTPT+X6 READ -TPT- ENTRY AX1 24 MX0 -24 BX1 -X0*X1 EXTRACT DISK ADDRESS SX2 IN RJ ROT READ ONE TEXT LINE SA6 INL SB7 B1+B1 COLLECT TWO NON-SPACE CHARS BX1 -X7*X7 CHARACTER ACCUMULATOR SX4 B1 STARTING COLUMN SA5 INL LAST COLUMN BLR3 BSS 0 IX0 X5-X4 MI X0,BLR1 IF END OF LINE, ASSUME NOT SPECIAL SA2 IN+X4-1 READ A CHARACTER SX4 X4+B1 INCR COLUMN POINTER SX0 X2-1R ZR X0,BLR3 LX1 6 BX1 X1+X2 INSERT THE NEW CHARACTER SB7 B7-1 NZ B7,BLR3 IF TWO CHARS NOT ACCUMULATED * SEARCH -TSBC- FOR A SPECIAL *BASIC* COMMAND. SA3 TSBC-1 BLR4 BSS 0 SA3 A3+B1 MI X3,BLR1 IF NOT A SPECIAL COMMAND SX0 X3 IX0 X0-X1 NZ X0,BLR4 LOOK AGAIN * OKAY, WE HAVE A SPECIAL COMMAND, AND X3 HAS THE -TSBC- ENTRY. * JUMP TO THE CODE TO PROCESS THE *BASIC* STATEMENT. AX3 18 SB7 X3 JP B7 PROCESS SPECIAL COMMAND BLR5 BSS 0 * HERE FOR THE SIMPLEST CASE. THE LINE REFERENCE IS THE LAST * LEGAL FIELD OF THE CARD IMAGE, THUS, WE SIMPLY MOVE * BACKWARDS THRU THE STATEMENT DECODING THE DISPLAY CODE * NUMBER TO BINARY. RJ SOS SKIPBACK OVER SPACES RJ DRR DECODE REFERENCE SX6 -B1 ONE REFERENCE SA6 BLRG SAVE LONE LINE REF SA7 A6+B1 SX6 B3-IN+1 COLUMN 1 SA6 BLRH BX6 -X6*X6 SA6 A6+B1 COLUMN 2 = 0 * ADD THE REFERENCE TO -TRLN-. RJ ARN ADD REFERENCED NUMBER * WRITE THE CARD IMAGE + HEADER TO THE SCRATCH FILE. RJ WSF WRITE SCRATCH FILE * FINALLY, MODIFY THE -TPT- ENTRY. RJ SFF SET FREE FIELD EQ BLR1 NEXT STATEMENT BLR6 BSS 0 * HERE FOR THE SECOND MOST DIFFICULT SPECIAL CASE, DISTINGUISHING * BETWEEN AND PROCESSING A COMPUTED GOTO AND THE ON-ERROR * STATEMENT. * * -- THE ON-GOTO STATEMENT IS SIMILAR TO A SIMPLE GOTO * EXCEPT THAT MULTIPLE REFERENCES MUST BE COLLECTED. * AS WE MOVE BACKWARDS THRU THE STRING BUFFER, EACH * LINE NUMBER REFERENCE IS STORED IN A LIST. WE WILL * FETCH NUMBERS IN A REVERSE ORDER FROM THIS LIST WHEN * ADDING ENTRIES TO -TRLN-. * * -- AN ON-ERROR STATEMENT MAY OR MAY NOT HAVE A TRAILING * LINE NUMBER. IF NOT, IT IS TREATED AS AN ORDINARY * STATEMENT AND NOT WRITTEN TO THE SCRATCH FILE. ELSE, * WE PROCESS IT LIKE A SIMPLE GOTO. SX6 -0 RJ SOS SET WORD COUNT OF LINE SA6 BLRG INIT STORE ADDRESS ZR B7,BLR8 IF LAST NON-SPACE IS A DIGIT PL B7,BLR1 ALPHA, ASSUME JUST -ON ERROR- MI B7,IBS DELIMETER, ERROR BLR7 BSS 0 BACKSPACE TO NEXT DIGIT SB3 B3-B1 SA1 B3 SX0 X1-1R ZR X0,BLR7 SX0 X1-1R0 MI X0,BLR9 IF DONE DECODING REFERENCE(S) SX0 X1-1R9-1 PL X0,IBS BLR8 BSS 0 RJ DRR DECODE REFERENCE TO BINARY * IF THE CHARACTER CAUSING THE EXIT FROM *DRR* WAS A (,), * ASSUME WE HAVE A COMPUTED GOTO AND STORE THE NUMBER. * A6 POINTS TO NEXT FREE WORD IN THE LIST OF NUMBERS. THEN * GO BACK AND LOOK FOR ANOTHER. SX1 X1+1R9+1-1R, NZ X1,BLR9 IF NOT (,), IS IT ON-GOTO OR ON-ERROR BX6 X7 SA6 A6+B1 STORE COMPUTED GOTO REFERENCE IN LIST EQ BLR7 BLR9 BSS 0 * THE LINE REFERENCES ARE STORED AT -BLRG+1-, IN REVERSE ORDER. * STORE THE LAST REF (IN X7), AND THEN CALCULATE THE NUMBER * OF REFS, AS WELL AS COLUMN ONE AND TWO. SA7 A6+B1 STORE LAST (OR ONLY) LINE REF SA4 A7+B1 ** A4 _ LAST STORED REFERENCE + 1 SX6 A6-BLRG+1 NUMBER OF REFERENCES COLLECTED BX6 -X6 SA6 BLRG SX6 B3-IN+1 SA6 BLRH COLUMN 1 BX6 -X6*X6 SA6 A6+B1 COLUMN 2 = 0 BLR10 BSS 0 * READ THE REFS FROM THE LIST AT -BLRG+1-, AND ADD THEM TO THE * REFERENCED LINE NUMBER TABLE. SA4 A4-B1 MI X4,BLR11 IF LAST REF ADDED TO -TRLN- BX7 X4 RJ ARN EQ BLR10 BLR11 BSS 0 RJ WSF WRITE SCRATCH FILE RJ SFF MODIFY -TPT- ENTRY EQ BLR1 BLR15 BSS 0 * THE ONLY OTHER CASE WE HAVE TO CONSIDER IS THE *BASIC* PRINT * USING STATEMENT. IN CONTRAST TO THE MANNER IN WHICH ALL * OTHER SPECIAL COMMANDS WERE PROCESSED, WE WILL SCAN THIS * CARD IMAGE FOREWARD. IF A QUOTE IS DETECTED, EXIT RIGHT * AWAY AND ASSUME WE HAVE A SIMPLE PRINT. ELSE LOOK FOR * PAIRED COLONS OR BALANCED PARENS AND SCAN THRU THEM IF * FOUND. THE WORD -USING- MAY FOLLOW. IF NO COLONS OR * PARENS ARE FOUND, NOR IS -USING- DETECTED, TREAT THE LINE * AS A SIMPLE PRINT STATEMENT. SA5 IN-1 FWA-1 OF STRING BUFFER RJ SOS SET WORD COUNT OF LINE BLR16 BSS 0 SA5 A5+1 ZR X5,BLR1 EOL, THIS LINE IS NOT SPECIAL SX0 X5-1R"QUOTE" ZR X0,BLR1 IF A SIMPLE PRINT SX0 X5-1R"COLON" ZR X0,BLR22 SEARCH FOR BALANCING COLON SX0 X5-1R( ZR X0,BLR22 SEARCH FOR BALANCING PAREN SX0 X5-1RU CHECK FOR (U)SING NZ X0,BLR16 SB3 4 IF -U-, LOOK FOR -SING- BLR17 BSS 0 SA5 A5+1 ZR X5,BLR1 HUH... QQ. SX2 X5-1R ZR X2,BLR17 SB3 B3-B1 MI B3,BLR18 IF ENOUGH CHARS COLLECTED LX0 6 BX0 X0+X5 COLLECT THE CHAR EQ BLR17 BLR18 BSS 0 SA2 =4RSING OH SAY CAN YOU SEE, BY THE DAWN*S... IX1 X0-X2 BX7 -X7*X7 ** INIT ACCUMULATOR NZ X1,BLR1 IF NOT -USING- * AH, -USING- DETECTED. DECODE THE LINE REFERENCE WHICH FOLLOWS. SX6 A5-IN COLUMN WE STOPPED SCANNING AT BLR18.3 BSS 0 BACKSPACE OVER BLANKS AFTER -USING- SA4 IN+X6-1 SX4 X4-1R NZ X4,BLR18.7 IF NO MORE SPACES SX6 X6-1 EQ BLR18.3 BLR18.7 BSS 0 SA6 BLRH SET COLUMN 1 SA5 A5-1 BACKUP A BIT... BLR19 BSS 0 SA5 A5+1 ZR X5,BLR20 EOL, SHOULD HAVE A LINE REFERENCE SX2 X5-1R ZR X2,BLR19 SX3 X5-1R0 SUBTRACT DISPLAY CODE BIAS MI X3,BLR20 IF ALPHA SX2 X5-1R9-1 PL X2,BLR20 IF DELIMETER * HAVE A DIGIT, ACCUMULATE THE BINARY RESULT. LX1 X7,B1 X7 * 2 LX7 3 X7 * 8 IX7 X1+X7 X7 * 10 IX7 X3+X7 + NEW DIGIT EQ BLR19 BLR20 BSS 0 ZR X7,BLR1 IF NO LINE NUMBER, IGNORE * X7 = THE LINE REFERENCE. ADD IT TO -TRLN-, AND COMPUTE A * FEW COLUMN POSITIONS FOR THE SAKE OF *WSF*. SX6 -B1 SA6 BLRG ONE REFERENCE SA7 A6+B1 RJ ARN * I THINK THE NEXT HUNK OF CODE IS NEEDED, BUT AM REALLY NOT * SURE. SA1 BLRE WORD COUNT OF THIS STRING SX1 IN+X1 FORM LWA OF STRING SX0 A5 CURRENT ADDRESS IN STRING IX6 X0-X1 ZR X6,BLR21 IF NO DATA FOLLOWS LINE REFERENCE SX6 A5-IN COMPUTE COLUMN 2 BLR21 BSS 0 SA6 BLRI COLUMN 2 RJ WSF RJ SFF EQ BLR1 BLR22 BSS 0 SA5 A5+1 ZR X5,BLR1 WHO KNOWS WHATS COMING OFF SX0 X5-1R"COLON" ZR X0,BLR23 IF BALANCED COLONS SX0 X5-1R) NZ X0,BLR22 IF NOT BALANCED PARENS BLR23 BSS 0 SA5 A5+1 ZR X5,BLR1 IF JUST A SIMPLE PRINT SX0 X5-1RU NZ X0,BLR23 IF NOT (U)SING SB3 4 LOOK FOR -SING- EQ BLR17 BLR24 BSS 0 WRITER S * OKAY, THE ENTIRE *BASIC* SOURCE FILE HAS BEEN PERUSED, AND * WE*VE DONE A PRETTY GOOD JOB OF EXTRACTING ALL THE LINE * NUMBER REFERENCES. THESE HAVE BEEN STORED IN -TRLN-. * NEXT, THIS TABLE WILL BE SORTED, SO AT A LATER TIME, WHEN * WE MUST FREQUENTLY LOOK THRU THE TABLE, A BINARY SEARCH * METHOD MAY BE EMPLOYED. SA1 TRLNO X1 = NUMBER OF TABLE ENTRIES ZR X1,BLR27 IF 0 REFS IN *BASIC* SOURCE CODE SA2 TRLNP FWA OF TABLE TO SORT SB7 X2 RJ SST= SHELL SORT THE REFS TABLE * AND TO FURTHER REDUCE SEARCH TIME, GO THRU THE SORTED TABLE * OF REFERENCES AND DELETE DUPLICATE ENTRIES. SA0 B1 INIT STORE ORDINAL IN -TRLN- SA5 TRLNO X5 = LENGTH OF OLD -TRLN- SX4 B1 CONSTANT FOR SUBTRACTING SA2 TRLNP SA2 X2 BX1 X2 SB7 A2 BLR25 BSS 0 IX5 X5-X4 DECR COUNT OF TABLE ENTRIES ZR X5,BLR26 IF ENTIRE TABLE PROCESSED SA2 A2+B1 READ NEXT HIGHER TABLE ENTRY IX0 X1-X2 COMPARE TWO TABLE ENTRIES ZR X0,BLR25 LOOK FOR NON-DUPLICATE ENTRY BX7 X2 SA7 A0+B7 MOVE NON-DUPLICATE ENTRY BX1 X2 SWAP ENTRY FOR FURTHER COMPARISONS SA0 A0+1 INCR STORE ORDINAL IN NEW -TRLN- EQ BLR25 BLR26 BSS 0 SX7 A0+ SA7 A5 NUMBER OF ENTRIES IN NEW -TRLN- * FINALLY, SET THE -U- BIT OF EVERY -TRLN- ENTRY. RJ SUF SET -U- BITS RECALL S REWIND S,R SB7 B1 IF REFS FOUND EQ BLRX EXIT. BLR27 BSS 0 SB7 B0 IF NO REFS EQ BLRX EXIT. BLRA DATA 0 ORDINAL OF LINE IN SCRATCH FILE * BLRB -- CHANGED TO TRLNO BLRC DATA 0 CNT. OF UNDEFINED LINE NUMBERS BLRD DATA 0 CNT. OF ILEGAL BASIC STATEMENTS BLRE BSS 1 WORD COUNT (LESS SPACES) IN -IN- BLRF BSS 1 -TPT- ORDINAL OF CURRENT TEXT LINE BLRG = JN FOR COUNT OF REFS + FLAGS BLRH BSS 1 COLUMN 1 (SEE *WSF*) BLRI BSS 1 COLUMN 2 (ONLY FOR PRINT-USING) CLR SPACE 4,10 ** CLR - COUNT LINES IN RANGE. * * COUNTS THE NUMBER OF LINES THAT FALL INTO THE * RANGE R1-R2. ALSO RETURNS SOME POINTERS. * * ENTRY R1 STARTING LINE NUMBER * R2 FINAL LINE NUMBER * * EXIT (X7) = NUMBER OF LINES IN RANGE * (CLRA)* = ORDINAL OF START OF RANGE * (CLRB)* = ORDINAL OF END OF RANGE * * *IF (X7) NE 0 CLR1 SA6 CLRA SX7 B0 SA4 R2 CLR2 SA5 X6+TTPT MX0 -21 BX1 -X0*X5 IX0 X4-X1 NG X0,CLRX IF HIT THE END SA6 CLRB SX7 X7+B1 BX1 X6 RJ DOL DOWN ONE LINE ZR B7,CLR2 IF NOT EOF CLR SUBR IF NOT EOF SA1 R1 RJ LTP LOCATE TEXT POINTER LE B7,B1,CLR1 IF NOT EOF BX7 -X7*X7 IF NO LINES IN SPECIFIED RANGE EQ CLRX EXIT CLRA BSS 1 STARTING ORDINAL OF RANGE CLRB BSS 1 FINAL ORDINAL OF RANGE DIL SPACE 4,8 ** DIL - DELETE INSERTED LINES. * * ENTRY NONE. * * EXIT ALL *TTPT* ENTRIES WITH BIT 48 SET ARE REMOVED. * * CALLS *FFL*, *DOL* * * USES B - NONE. * A - NONE. * X - 1, 4, 5. * DIL1 BSS 0 BX1 X6 LX5 59-48 PL X5,DIL2 IF NOT MARKED LX4 X6 SAVE ORDINAL FOR NEXT *DOL* RJ DEL DELETE THE LINE BX1 X4 DIL2 BSS 0 RJ DOL ZR B7,DIL1 IF NOT EOF DIL SUBR RJ FFL FIND FIRST LINE EQ DIL1 DRR SPACE 4,10 ** DRR - DECODE REFERENCE IN REVERSE. * * DECIMAL DISPLAY CODE TO BINARY CONVERSION STARTING FROM THE * LEAST SIGNIFICANT DIGITS. * * ENTER B3 _ LEAST SIGNIFICANT DIGIT IN STRING BUFFER * * EXIT X7 = NUMBER IN BINARY * B3 _ CHAR CAUSING EXIT FROM *DRR* (ALPHA, ETC.) * * CALLS NONE. * * USES B - 3 * A - 1 * X - 0, 1, 4 * DRR SUBR SX4 B1 INIT MULTIPLYING FACTOR BX7 -X7*X7 INIT ACCUMULATOR SB3 B3+1 DRR1 BSS 0 SB3 B3-B1 SA1 B3 FETCH NEXT CHARACTER SX0 X1-1R ZR X0,DRR1 SPACE, LOOK AGAIN SX0 X1-1R0 MI X0,DRRX ALPHA, EXIT SX1 X1-1R9-1 PL X1,DRRX DELIMETER, EXIT IX1 X0*X4 NEW DIGIT TIMES 10**L, L = 0,1,2... LX0 X4,B1 X4 * 2 IX7 X1+X7 ACCUMUALTE TOTAL LX4 3 X4 * 8 IX4 X0+X4 X4 * 10 EQ DRR1 NEXT DIGIT GLF SPACE 4,10 ** GLF - GET LINE FLAGS. * * THIS ROUTINE ATTEMPTS TO READ *FLAG* FOLLOWED * BY FLAGGED LINE NUMBERS. * * ENTRY INC SET TO STARTING COLUMN * B7 = 1 TO CALL *GCP*, 0 IF *GCP* ALREADY CALLED. * * EXIT TFLN HAS THE FLAGS * TFLNL SET OF TFLN * FLAGS ALSO ENTERED IN TLNR * B7 = 0 IF OK ELSE 1 IF ERROR GLF3 SB7 B0 GLF SUBR BX6 X6-X6 ASSUME NO FLAGS SA6 TFLNL ZR B7,GLF1 IF *GCP* ALREADY CALLED RJ GCP GET COMMAND PARAMETER ZR X6,GLF3 IF NOT *FLAG* LX6 6 MX0 -6 BX6 -X0*X6 SX0 X6-1RF NZ X0,GLF3 IF NOT *F* * THIS LOOP READ IN THE FLAGGED VALUES GLF1 SB7 B0 ALLOW *A* OR *Z* RJ GLN GET LINE NUMBER EQ B7,B1,GLF1 IF DELIMITER, TRY AGAIN NZ B7,GLF3 IF NO MORE SA1 TFLNL SX0 X1-M.FLN ZR X0,GLF2 IF TOO MANY FLAGS SA6 X1+TFLN SX7 X1+B1 SA7 A1 BX7 X6 RJ ARN ADD REFERENCED NUMBER EQ GLF1 GET ANOTHER GLF2 PRINT (TOO MANY FLAGS) SB7 B1 EQ GLFX IBS SPACE 4,10 ** IBS - ILLEGAL *BASIC* STATEMENT. * * FLAG THE CURRENT STATEMENT AS ILLEGAL BY PLACING A (*) * AT THE LWA+1 OF THE CARD IMAGE. * * ENTRY (INL) = LAST CHAR IN STATEMENT * * EXIT NEW LINE ADDED TO TEXT FILE * * CALLS *ATL* * * USES ALL. * IBS BSS 0 SA1 BLRD SX6 X1+B1 SA6 A1 COUNT THE ILLEGAL STATEMENT SA1 BLRF CURRENT -TPT- ORDINAL SA1 TTPT+X1 MX0 -21 BX6 -X0*X1 SA6 LN SAME LINE NUMBER BX6 -X6*X6 SA6 ATLA NO SQUEEZE SX7 1R* SA1 INL SA7 IN+X1 STORE(*) SX7 X1+B1 SA7 A1 UPDATE INL BX1 -X1*X1 -FREE- = 0 SB7 IN SA2 INL RJ ATL ADD TEXT LINE EQ BLR1 NXL SPACE 4,10 ** NXL - NEXT LINE IN RANGE. * * GET NEXT LINE IN RANGE R1-R2. FOR *MOVE*, DELETE * THE PREVIOUS LINE BEFORE RETURNING. * * ENTER (B7) = 1 TO INITIALIZE *NXL*. * (TLNR) AND (TLNRL) SET UP WITH ONE RANGE. * * (B7) = 0 IF NOT INITIAL CALL. * * EXIT (B7) = 0 IF NEXT LINE FOUND. * (X5) = *TTPT* ENTRY. * (A5) = ADDRESS OF ENTRY. * * (B7) = 1 IF END OF RANGE. * (NXLB) = NUMBER OF LINES IN RANGE. * * CALLS *NLR*, *DOL*, *UOL*. * * USES B - 6, 7. * A - 1, 2, 3, 5, 6, 7. * X - 0, 1, 2, 3, 5, 6, 7. * NXL6 BSS 0 INITIALIZE *NXL* SA1 COMMON SX6 X1-VMOT SA6 NXLG SET *MOVE* PROCESSING SA1 TLNR MX0 -1 LX1 0-59 BX2 -X0*X1 (X2) = MI IFF A REVERSE RANGE SA1 TNXL+X2 PLUG RJ *DOL* OR *UOL* AS REQUIRED BX6 X1 SA6 NXLA SA6 NXLF * DETERMINE ORDINAL OF FIRST LINE IN RANGE. RJ NLR MI B7,*+400000B SA6 NXLC SA1 TTPT+X6 MX0 1 BX6 X0+X1 MARK FIRST LINE IN RANGE SA6 A1 SX6 B1 SA6 NXLB COUNT FIRST LINE NXL7 BSS 0 * COUNT THE NUMBER OF LINES IN R1-R2 WHILE SETTING * BIT 59 OF THOSE *TTPT* ENTRIES. RJ NLR MI B7,NXL8 IF ENTIRE RANGE MARKED SA6 NXLD SAVE ORDINAL SA1 TTPT+X6 MX0 1 BX6 X0+X1 SA6 A1 MARK IT SA1 NXLB SX6 B1 IX6 X1+X6 SA6 A1 COUNT THE LINE EQ NXL7 LOOP FOR ALL LINES NXL8 BSS 0 SA1 NXLB SX0 X1-1 ZR X0,NXLX EXIT IF ONE LINE RANGE * COMPUTE THE DISTANCE BETWEEN THE FIRST AND LAST *TTPT* * ENTRIES AND SAVE IT. USED TO FIND THE BEGINNING OF * THE RANGE. SA1 NXLD (X1) = ORDINAL OF LAST *TTPT* IN RANGE SA2 NXLC (X2) = ORDINAL OF FIRST *TTPT* SA3 TLNR SX6 B1 PL X3,NXL9 IF A FORWARD RANGE SX6 -B1 NXL9 BSS 0 IX1 X1+X6 IX6 X1-X2 SA6 A2+ SET DISTANCE -- + IF FORWARD, - IF REVERSE EQ NXL10.1 NXL10 BSS 0 SA1 NXLG ZR X1,NXL12 EXIT, EOR DURING A *MOVE* NXL10.1 BSS 0 * END OF RANGE. FIND START OF RANGE AND SET BIT 58 * OF THE *TTPT* ENTRY. * * (NXLC) = MAXIMUM DISTANCE FROM EOR TO SOR. * (NXLD) = ORDINAL OF LAST *TTPT* IN RANGE. SA1 NXLC (X1) = DISTANCE SA2 NXLD (X2) = LAST ORDINAL IX3 X2-X1 LX1 X3 (X1) = POSSIBLE ORDINAL FOR SOR NXL11 BSS 0 * MOVE DOWN/UP THE FILE LOOKING FOR THE FIRST MARKED *TTPT* * ENTRY, INDICATING START OF RANGE. THEN RECOMPUTE * (NXLC) FOR THE NEXT TIME. SET B7 TO ONE AFTER FIRST * RESETTING (NXLD) TO POINT TO THE FIRST LINE. NXLF RJ ** PRESET, *DOL* OR *UOL* NZ B7,*+400000B SYSERR IF NO SOR LX1 X6 PL X5,NXL11 IF NOT MARKED MX0 1 LX0 58-59 BX7 X0+X5 SET BIT 58 SA7 A5 SA1 NXLD SA6 A1 RESET (NXLD) SA3 TLNR SX7 B1 PL X3,NXL12 IF FORWARD RANGE SX7 -B1 NXL12 BSS 0 IX1 X1+X7 IX7 X1-X6 SA7 NXLC SAVE NEW DISTANCE SB7 B1 EOR BX6 X6-X6 SA6 NXLE ZERO ORDINAL WITHIN R1-R2 NXL SUBR NZ B7,NXL6 IF *NXL* NEEDS INITIALIZATION * GET THE NEXT LINE FROM THE DUP RANGE. (NXLD) = *TTPT* * ORDINAL OF LAST LINE REPLICATED, AND BIT 58 SHOULD * BE SET. IF NOT, *ATL* MANIPULATED THE *TTPT* WHILE * ADDING THE LAST LINE, AND THE DESIRED *TTPT* WILL BE * PLUS OR MINUS 2 ENTRIES AWAY. SYSERR IF NOT THE CASE. * WE TRY *DOL* AT MOST TWICE, THEN *UOL*, FOR BOTH * FORWARD AND REVERSE RANGES. SA1 NXLD (X1) = POSSIBLE ORDINAL OF *TTPT* WITH B58 LX6 X1 SA5 TTPT+X1 LX5 59-58 PL X5,NXL2 NOT THIS ONE, TRY *DOL* AT MOST TWICE NXL1 BSS 0 * FOUND THE *TTPT* WITH BIT 58 SET. * * (A5) = ADDRESS OF *TTPT* * (X5) = *TTPT* ENTRY SHIFTED LEFT 59-58 * (X6) = STARTING ORDINAL TO FIND NEXT LINE * * FIRST, CLEAR BIT 58 OF THE CURRENT ENTRY, FIND THE NEXT * LINE, SET BIT 58 OF THE *TTPT*, AND SET (NXLD). MX0 1 BX7 -X0*X5 CLEAR BIT 58 LX7 58-59 PL X7,*+400000B SYSERR IF NOT IN RANGE SA1 NXLG NZ X1,NXL1.1 IF NOT *MOVE* COMMAND * DELETE THE PREVIOUS LINE, AND DECR (LEN). SA1 LEN SX7 X1-1 SA7 A1 MX7 0 NXL1.1 BSS 0 SA7 A5 * SEE IF AT END OF RANGE (EOR). SA1 NXLE SA2 NXLB SX7 X1+B1 IX0 X2-X7 ZR X0,NXL10 IF EOR, ENTIRE RANGE DUPPED SA7 A1 INCREMENT (NXLE) LX1 X6 (X1) = STARTING ORDINAL FOR SEARCH NXLA RJ ** PRESET, *DOL* OR *UOL* NZ B7,*+400000B IF BOF/EOF PL X5,*+400000B IF LINE NOT WITHIN R1-R2 SA6 NXLD UPDATE POINTER MX0 1 LX0 58-59 BX6 X0+X5 SA6 A5 SET BIT 58 EQ NXLX EXIT, LINE FOUND NXL2 BSS 0 SB6 2 * BX6 X6 NXL3 BSS 0 SB6 B6-B1 MI B6,NXL4 IF 2 TRIES, LOOK UP LX1 X6 RJ DOL NZ B7,NXL4 IF EOF, TRY UP LX5 59-58 MI X5,NXL1 IF FOUND EQ NXL3 NXL4 BSS 0 SA1 NXLD (X1) = STARTING ORDINAL SB6 B1+B1 LX6 X1 NXL5 BSS 0 SB6 B6-B1 MI B6,*+400000B SYSERR IF LINE NOT FOUND LX1 X6 RJ UOL NZ B7,*+400000B IF BOF LX5 59-58 MI X5,NXL1 IF FOUND EQ NXL5 *NXLA - PRESET. NXLB CON 0 NUMBER OF LINES IN RANGE NXLC CON 0 DISTANCE BETWEEN SOR AND EOR NXLD CON 0 POTENTIAL ORDINAL OF LAST LINE GOTTEN NXLE CON 0 WHICH LINE IN R1-R2 *NXLF - PRESET. NXLG CON 1 ZERO IFF A *MOVE* COMMAND TNXL SPACE 4,8 ** TNXL TNXL RJ DOL IF FORWARD RANGE RJ UOL IF REVERSE RANGE PCR SPACE 4,10 ** PCR - PRINT COLUMN RANGES. * * THIS ROUTINE PRINTS THE EDIT COLUMN RANGES FOR THE *ZONE* * AND *DISPLAY* PORTIONS OFF THE EDIT STATUS PRINTOUT. * * ENTRY A6 _ LAST CHAR *PUT*ED * B6 _ NUMBER OF RANGES * B7 _ COLUMN RANGES * * EXIT A6 UPDATED FOR *PUT* * * USES ALL * * CALLS CDD, PUT PCR SUBR BX7 X7-X7 LOOP INDEX SA7 PCRA SA1 B6 BX7 X1 LOOP LIMIT SA7 PCRB SX7 B7 _ TO COLUMN RAAGES SA7 PCRC PUTT (,) * PUT A NEW RANGE PCR1 SA1 PCRC GET RANGE SA2 PCRA IX7 X1+X2 SA7 PCRD ADDRESS OF THIS RANGE SA1 X7 LX5 X1 PUTD (X1,0,30),,,B6 PUT LOW 30 BITS MX0 30 BX1 -X0*X5 AX5 30 IX0 X1-X5 ZR X0,PCR2 IF NOT A REAL RANGE PUTT (-),B6 PUTD X5,,,B6 PUT HIGH 30 BITS PCR2 SA1 PCRA INCREMENT INDEX SX7 X1+B1 SA7 A1 SA1 PCRB IX0 X1-X7 ZR X0,PCRX IF ALL DONE PUTT (,),B6 EQ PCR1 PCRA BSS 1 LOOP INDEX PCRB BSS 1 LOOP LIMIT PCRC BSS 1 BASE ADDRESS OF DISPLAYS PCRD BSS 1 CURRENT ADDRESS PFC SPACE 4,10 ** PFC - PRINT FLAG CHANGES. * * PRINT THE OLD AND NEW FLAG NUMBERS. * * ENTRY TFLN HAS FLAGS * TFLNL HAS LENGTH OF ABOVE * TNLR HAS NEW/OLD PAIRS * * USES ALL * * CALLS WTC, SRT PFC SUBR SA1 TFLNL ZR X1,PFCX IF NONE * PRINT THE TABLE OF OLD AND NEW PRINT ( ) PRINT ( OLD NEW) PRINT ( ) BX6 X6-X6 SA6 PFCA LOOP INDEX PFC1 SA1 X6+TFLN GET THE NEW/OLD ENTRY RJ SRT SEARCH REFERENCE TABLE MI X6,PFC3 IF LINE NOT FOUND, IGNORE SA1 TRLNP IX1 X1+X6 SA1 X1 PL X1,PFC2 IF A WELL-FORMED -TRLN- ENTRY MX0 -21 BX6 -X0*X1 EXTRACT -OLN- LX6 24 BX1 X1+X6 INSERT -NLN- (= -OLN-) PFC2 BSS 0 MX0 1 BX6 -X0*X1 CLEAR -U- BIT OF -TRLN- ENTRY SA6 PFCB MX0 -21 BX1 -X0*X1 RJ CDD CONVERT DECIMAL DIGITS LX6 3*6 SA6 PFCC STORE OLD SA1 PFCB AX1 24 RJ CDD LX6 4*6 MX0 6*6 BX6 X0*X6 SA6 PFCC+1 WRITEC O,PFCC PFC3 BSS 0 SA1 PFCA SX6 X1+B1 SA6 A1 INCREMENT INDEX SA1 TFLNL IX0 X1-X6 NZ X0,PFC1 IF NOT DONE PRINT ( ) EQ PFCX EXIT PFCA BSS 1 LOOP INDEX PFCB BSS 1 SRT RETURN WORD PFCC BSS 2 OLD, NEW PSI SPACE 4,8 ** PSI - PRINT STATUS INFORMATION. * * ENTER (X6) = FWA OF STATUS LIST. * * EXIT RELEVANT STATUS INFORMATION PRINTED. PSI SUBR SX6 X6-1 SA6 PSIA PRINT ( ) EQ PSI6 PSI1 BSS 0 SA6 PSIA SAVE LIST ADDRESS SA1 X6 READ LIST ENTRY ZR X1,PSIX IF END OF LIST SX2 X1 MI X2,PSI2 IF ON/OFF VALUE SA5 X1 READ VALUE ZR X5,PSI6 IF NO VALUE, SKIP SX0 X1-FALA SPECIAL CASE *ALARM* TIME NZ X0,PSI3 IF NOT ALARM LX5 6 SHIFT OFF LEADING SPACE EQ PSI3 PSI2 BSS 0 BX2 -X2 (X2) = ADDRESS OF VALUE SA4 X2 READ VALUE SA5 =2LON ASSUME *ON* NZ X4,PSI3 IF INDEED ON SA5 =3LOFF VALUE IS *OFF* PSI3 BSS 0 BX7 X1 PUTI JN SET PUT FWA MX0 7*6 BX1 X0*X7 ONLY 7 CHARACTERS FOR NAME OF OPTION PUTF X1,1,Z,2 PUT NAME OF OPTION MX0 7*6 BX1 X0*X5 NZ X1,PSI4 IF L-FORMAT VALUE PUTD (X5,0,18),,,10 PUT NUMERIC VALUE EQ PSI5 PSI4 BSS 0 PUTF X5,,Z,10 PUT L-FORMAT VALUE PSI5 BSS 0 PUTZ PUT EOL PRINTC JN PRINT STATUS INFORMATION PSI6 BSS 0 SA1 PSIA SX6 X1+1 ADVANCE LIST ADDRESS EQ PSI1 LOOP FOR ALL LIST ITEMS PSIA BSS 1 ADDRESS OF LIST OPTION RCF SPACE 4,10 ** RCF - RESEQUENCE CURRENT FILE. * * THIS ROUTINE RESEQUENCES THE GIVEN PORTION OF THE TTPT * AND UPDATES THE TABLE OF LINE REFERENCES. * * ENTRY CLRA - ORDINAL OF START OF RANGE * CLRB - ORDINAL OF END OF RANGE * N1 - STARTING RESEQUENCED NUMBER * N2 - INCREMENT * (ALL OF THE ABOVE ARE ASSUMED LEGAL) * TRLN IS SET UP * * EXIT TTPT AND TRLN ARE UPDATED * * USES ALL REGS. * CLRA, N1 * * CALLS SRT RCF SUBR RCF1 SA1 CLRA SA2 CLRB IX0 X2-X1 NG X0,RCFX IF END OF SEQUENCE, EXIT SX6 X1+B1 SA6 A1 SA5 X1+TTPT UPDATE LINE NUMBER ZR X5,RCF1 IF EMPTY TTPT ENTRY MX0 -21 BX1 -X0*X5 SA2 N1 BX6 X0*X5 UPDATE TTPT ENTRY BX6 X6+X2 SA6 A5 RJ SRT SEARCH REFERENCE TABLE NG X6,RCF2 IF NOT FOUND SA1 TRLNP IX1 X1+X6 SA1 X1 ADD -NLN- TO -TRLN- ENTRY SA2 N1 LX2 24 BX6 X1+X2 MX0 1 BX6 -X0*X6 CLEAR -U- BIT OF -TRLN- ENTRY SA6 A1 RCF2 SA1 N1 SA2 N2 IX6 X1+X2 SA6 A1 EQ RCF1 NEXT SFF SPACE 4,10 ** SFF - SET FREE FIELD. * * INSERT INTO THE -FREE- FIELD OF THE -TPT- ENTRY ASSOCIATED * WITH THE CURRENT *BASIC* STATEMENT THE ORDINAL IN THE * SCRATCH FILE OF THAT LINE. AS EACH SPECIAL *BASIC* CARD * IMAGE IS WRITTEN TO THE FILE, 1 IS ADDED TO -BLRA-. * * ENTER (BLRA) = ORDINAL IN SCRATCH FILE * (BLRF) = -TPT- ORDINAL OF CURRENT LINE * * EXIT -TPT- ENTRY UPDATED * * CALLS NONE. * * USES B - NONE. * A - 1, 2, 6 * X - 1, 2, 6 * * NOTE, CALL *WSF* BEFORE *SFF* TO MAINTAIN -BLRA-. * SFF SUBR SA1 BLRF SA2 TTPT+X1 READ CURRENT -TPT- ENTRY SA1 BLRA LX1 -12 POSITION ORDINAL TO -FREE- BX6 X1+X2 INSERT ORDINAL OF LINE IN SCRATCH SA6 A2 EQ SFFX EXIT. SOS SPACE 4,10 ** SOS - SKIPBACK OVER SPACES. * * BACKSPACE THRU -IN- UNTIL THE FIRST NON-SPACE CHARACTER IS * ENCOUNTERED. ALSO, SAVE THE WORD COUNT OF THE LINE LESS THE * TRAILING SPACES. * * ENTER (IN) = CARD IMAGE IN STRING FORMAT * * EXIT B3 _ LAST NON-SPACE CHAR IN -IN- * (BLRE) = WORD COUNT OF CARD IMAGE LESS TRAILING * SPACES. USED BY *WSF* WHEN WRITING * THE SCRATCH FILE. * B7 = -1 IF CHAR IS A DELIMETER. * B7 = 0 IF CHAR IS A DIGIT. * B7 = +1 IF CHAR IS ALPHABETIC. * * CALLS NONE. * * USES B - 3 * A - 1, 7 * X - 0, 1, 7 * SOS1 BSS 0 SB3 B3-B1 SA1 B3 SX0 X1-1R ZR X0,SOS1 IF A SPACE CHARACTER * B3 _ LAST NON-SPACE CHAR, NOW SET THE WORD COUNT. SX7 B3-IN+1 NUMBER OF WORDS IN CARD IMAGE SA7 BLRE BX7 -X7*X7 SA7 B3+B1 INDICATE NEW END OF LINE SB7 +1 ASSUME ALPHABETIC SX0 X1-1R0 MI X0,SOSX IF ALPHA SB7 -1 ASSUME DELIMETER SX0 X1-1R9-1 PL X0,SOSX IF DELIMETER SB7 0 IF A DIGIT SOS SUBR IF A DIGIT SA1 INL SB3 IN+X1 B3 _ LWA+1 OF STRING EQ SOS1 SRT SPACE 4,10 ** SRT - SEARCH REFERENCE TABLE. * * THIS ROUTINE WILL SEARCH -TRLN-, USING A UNIFORM BINARY * SEARCH TECHNIQUE, FOR A SPECIFIC VALUE. THE LIST MUST * BE ORDERED, AND MUST BE PRECEEDED BY A WORD OF -1. * * ENTER (TRLNO) = NUMBER OF ENTRIES IN -TRLN- * X1 = SOUGHT AFTER REFERENCE IN -TRLN- * * EXIT X6 = ORDINAL OF -TRLN- ENTRY * X6 = -1 IF ENTRY NOT FOUND * * CALLS NONE. * * USES B - 2 * A - 2, 4 * X - 0, 2, 3, 4, 5, 6 * * REFERENCE/ KNUTH, VOL. 3, SEARCHING AN ORDERED TABLE, P. 411 * SRT SUBR SB2 60-1 CONSTANT SHIFT FACTOR MX0 -21 MASK FOR -TRLN- ENTRY SX5 B1 CONSTANT ONE SA4 TRLNO N = TABLE LENGTH ZR X4,SRT4 IF NO ENTRIES TO SEARCH LX6 X4,B2 X6 MI IFF X4 ODD AX4 1 M = N/2 BX3 X4 I = N/2 PL X6,SRT1 IF TABLE LENGTH EVEN IX3 X3+X5 I = I+1 SRT1 BSS 0 MAIN SEARCH LOOP SA2 TRLNP IX2 X2+X3 SA2 X2-1 BX2 -X0*X2 X2 = K(I) IX6 X1-X2 COMPARE -TRLN- ENTRY WITH INPUT MI X6,SRT2 IF K LESS THAN K(I) NZ X6,SRT3 IF K MORE THAN K(I) * WE FOUND A MATCH, RETURN THE TABLE ORDINAL IN X6. SX6 A2 SA2 TRLNP IX6 X6-X2 ORDINAL OF ENTRY EQ SRTX EXIT, SEARCH SUCCESFUL SRT2 BSS 0 * HALVE THE INTERVAL OF SEARCH. X3 POINTS JUST TO THE RIGHT * (HIGH SIDE) OF THE INTERVAL. ZR X4,SRT4 IF SEARCH UNSUCCESFUL LX6 X4,B2 AX4 1 M = M/2 IX3 X3-X4 I = I - M/2 PL X6,SRT1 IX3 X3-X5 I = I-1 EQ SRT1 CONTINUE SEARCH SRT3 BSS 0 * HALVE THE INTERVAL OF SEARCH. X3 POINTS JUST TO THE LEFT * (LOW SIDE) OF THE INTERVAL. ZR X4,SRT4 IF SEARCH UNSUCCESFUL LX6 X4,B2 AX4 1 M = M/2 IX3 X3+X4 I = I + M/2 PL X6,SRT1 IX3 X3+X5 I = I+1 EQ SRT1 SRT4 BSS 0 SX6 -1 IF SEARCH UNSUCCESFUL EQ SRTX EXIT. SUF SPACE 4,10 ** SUF - SET *U* FLAG. * * SET THE -U- BIT OF EVERY -TRLN- ENTRY. THE ROUTINE *RCF* * CLEARS THIS BIT WHEN IT UPDATES THE -TRLN- ENTRY WITH A * LINE*S NEW LINE NUMBER DURING A RESEQUENCE. *PFC* CHECKS * THIS BIT WHEN PRINTING FLAGS TO SEE, A) IF THE -TRLN- * ENTRY REFERENCES AN UNDEFINED LINE NUMBER (*BASIC* RESEQ), * OR, B) IF THE -TRLN- ENTRY IS JUST A FLAGGED LINE NUMBER, * AND WAS NOT IN THE RANGE OF A RESEQUENCE, MOVE, OR DUP. * (THERE MAY BE A FEW OTHER CONSIDERATIONS, TOO.) * * ENTER X7 = NUMBER OF -TRLN- ENTRIES. * * EXIT ALL -U- BITS SET. * * CALLS NONE. * * USES B - 2. * A - 1, 6. * X - 0, 1, 6, 7. * SUF1 BSS 0 SA1 B2+X7 BX6 X0+X1 SET THE -U- BIT SX7 X7-1 DECR -TRLN- COUNT SA6 A1 NZ X7,SUF1 LOOP FOR ALL -TRLN- ENTRIES SUF SUBR ENTRY / EXIT SA1 TRLNP -TRLN- POINTER SB2 X1-1 FWA-1 OF -TRLN- MX0 1 THE -U- BIT EQ SUF1 ENTER MAIN LOOP TFF SPACE 4,10 ** TFF - TEST FREE FIELD. * * ENTER X1 = STARTING -TPT- ORDINAL OF SEARCH * X3 = MASK FOR -FREE- FIELD * X4 = COMPARISON AGAINST -FREE- * * EXIT TO B6 IF -TPT- NOT FOUND * X6 = DESIRED -TPT- ORDINAL * X2 = DESIRED -TPT- ENTRY * * CALLS *DOL* * * USES B - NONE. * A - 2 * X - 0, 1, 2 * TFF1 BSS 0 SA2 TTPT+X6 BX1 X3*X2 MASK OUT -FREE- IX0 X1-X4 COMPARE... BX1 X6 NZ X0,TFF+1 IF NOT THE DESIRED -TPT- ENTRY TFF SUBR RJ DOL ZR B7,TFF1 IF NOT BOTTOM OF FILE JP B6 ERROR EXIT UFT SPACE 4,10 ** UFT - UPDATE FLAG TABLE FOR A *MOVE* OR *DUP*. * * ENTER X1 = -TTPT- ENTRY * (LN) = NEW LINE NUMBER. * * EXIT X1 = -TTPT- ENTRY * X0 = L/O 24 BIT MASK * * CALLS *SRT* * * USES B - NONE. * A - 1, 2, 7 * X - 0, 1, 2, 7 * UFT1 BSS 0 SA1 UFTA FETCH -TTPT- ENTRY MX0 -21 SET MASK UFT SUBR ENTRY / EXIT LX7 X1 SA2 TRLNO MX0 -21 ZR X2,UFTX IF EMPTY TRLN, EXIT SA7 UFTA SAVE -TTPT- ENTRY BX1 -X0*X1 ORIGINAL LINE NUMBER RJ SRT SEARCH REFERENCE TABLE MI X6,UFT1 IF REF NOT FOUND SA1 TRLNP READ -TRLN- ENTRY IX1 X1+X6 SA1 X1 SA2 LN (X2) = NEW LINE NUMBER LX2 24 BX7 X1+X2 UPDATE -TRLN- ENTRY MX0 1 BX7 -X0*X7 CLEAR *U* BIT SA7 A1 EQ UFT1 UFTA BSS 1 HOLD -TTPT- ENTRY ULR SPACE 4,10 ** ULR - UPDATE LINE REFERENCES. * * THIS ROUTINE, USING -TRLN- AND THE DATA ON THE SCRATCH FILE * ESTABLISHED BY *BLR*, WILL ALTER ALL INTERNAL LINE REFS * TO REFLECT CHANGES RESULTING FROM THE RESEQ OR MOVE. * THE SCRATCH FILE CONTAINS INFO TELLING WHAT COLUMN OF * THE ORIGINAL STATEMENT THE NEW LINE REFERENCE WILL BEGIN * AT, AND -TRLN- CAN BE SEARCHED TO FIND THE VALUE OF THE * NEW REFERENCE. ONCE THE NEW STATEMENT IS REMADE, *ATL* * WILL BE CALLED TO ADD IT TO THE TEXT FILE. * ULR SUBR SA1 SYS SX0 X1-SBAS NZ X0,ULRX IF NOT BASIC, EXIT BX6 -X6*X6 SA6 ATLA NO SQUEEZE SA6 ULRA INIT ORDINAL IN SCRATCH FILE SX6 -B1 SA6 A6+B1 INIT LAST REFERENCED -TPT- ENTRY OPEN S,READ,R READ S INITIATE READ OF SCRATCH ULR1 BSS 0 * THIS IS THE TOP OF THE REFORMATTING LOOP. READ THE HEADER * WORD, SO WE KNOW HOW MANY MORE WORDS TO REQUEST TO GET * ALL THE OLD REFERENCES AND THE STRING CARD IMAGE. READO S READ HEADER WORD NZ X1,ULRX EXIT IF EOX SA6 ULRE SAVE CONTROL WORD SA1 ULRA SX7 X1+B1 SA7 A1 INCR ORDINAL IN SCRATCH FILE * CALCULATE THE WORD LENGTH OF THE READ. LX6 8 MX0 -8 BX1 -X0*X6 TOTAL WORD COUNT LX6 7 MX0 -7 BX7 -X0*X6 SA7 ULRC NUMBER OF LINE REFS IN THE LINE SA7 ULRF SAVE NUMBER OF LINE REFS (*B ULR9) READW S,ULRD,X1 READ REFS + STRING CARD IMAGE BX6 -X6*X6 SA6 B6 MARK EOL WITH A ZERO WORD * THERE ARE NOW (ULRC) LINE REFERENCES BEGINNING AT -ULRD-, * FOLLOWED IMMEDIATELY BY THE STRING CARD IMAGE. MOVE * SOME OF THE CARD IMAGE TO THE STRING BUFFER -IN-. * THE CHARACTERS INVOLVED ARE ALL THOSE UP TO BUT NOT * INCLUDING THE LINE REFERENCE. IF THE STATEMENT IS A * PRINT-USING AND THERE ARE CHARACTERS FOLLOWING THE LINE * REFERENCE, THEY WILL BE TRANSFERED AT -ULR9-. SA1 ULRE FETCH HEADER WORD SX7 X1 NUMBER OF WORDS TO MOVE SA7 INL NEXT FREE COLUMN IN -IN- SA2 ULRC NUMBER OF REFS MOVE X7,(ULRD+X2),IN * WE HAVE/ * * (ULRC) LINE REFS STORED AT -ULRD-. USING THESE VALUES, * WE CAN SEARCH -TRLN-, EXTRACT THE VALUE OF THE NEW REF, * AND REBUILD THE CARD IMAGE. * * -IN- THRU -IN+(INL)-1- CONTAINS THE CARD IMAGE LESS THE * OLD LINE REFERENCE. THE NEW LINE REF WILL START AT * -IN+(INL)-. * * NOW LOOK FOR THE -TPT- ENTRY WHOSE -FREE- FIELD IS NON-ZERO * AND MATCHES THE LINE ORDINAL OF THE LINE OF THE SCRATCH * FILE WE JUST READ. THE SEARCH WILL BE END AROUND, * STARTING WITH THE LAST REFERENCED -TPT- ENTRY. SA4 ULRA LX4 -12 ORDINAL IN SCRATCH FILE MX3 12 MASK FOR -FREE- FIELD SA1 ULRB LAST USED -TPT- ENTRY SB6 ULR3 GO THERE IF BOTTOM OF FILE HIT RJ TFF TEST FREE FIELD EQ ULR4 IF -TPT- DESIRED WAS FOUND ULR3 BSS 0 * THE -TPT- ENTRY WAS NOT FOUND. ASSUMING WE DIDN*T START * AT THE TOP OF THE FILE, CONTINUE THE END AROUND SEARCH * FOR THE DESIRED -TPT- ENTRY, SYSERR IF NOT FOUND. SX1 -B1 START AT TOP OF FILE SB6 *+400000B GO THERE IF -TPT- ENTRY NOT FOUND RJ TFF TEST FREE FIELD ULR4 BSS 0 WE FOUND THE DESIRED -TPT- ENTRY SA6 ULRB SAVE -TPT- ORDINAL MX0 12 BX7 -X0*X2 ZERO -FREE- FIELD SA7 TTPT+X6 MX0 -21 BX6 -X0*X2 SA6 LN SAVE LINE NUMBER OF THIS LINE * IT*S ABOUT TIME TO ADD THE NEW LINE REFERENCES. PICK UP AN * OLD REF, FIND IT IT -TRLN-, EXTRACT THE NEW REFERENCE, * CONVERT THE NEW REF TO DISPLAY CODE, AND INSERT IT INTO * THE STATEMENT. SA1 INL SX7 1R SA7 IN+X1 SEPARATING SPACE BEFORE FIRST REF SX7 X1+B1 SA7 A1 KEEP -INL- UP TO DATE ULR5 BSS 0 SA1 ULRC SX7 X1-1 SA7 A1 DECR COUNT OF REFERENCES SA1 ULRD+X7 READ OLD LINE REF RJ SRT SEARCH -TRLN- MI X6,*+400000B *BLR* STORED IT, *ULR* MUST FIND IT SA1 TRLNP IX1 X1+X6 SA1 X1 MI X1,ULR12 IF UNDEF. LINE NUMBER REFERENCE ULR5.1 BSS 0 MX0 -21 AX1 24 BX1 -X0*X1 EXTRACT NEW LINE REF RJ CDD CONVERT TO DISPLAY CODE SB2 B2-B1 MX0 1 AX0 X0,B2 CREATE MASK BX4 X0*X4 DROP TRAILING SPACES * MOVE THE DIGITS TO -IN-, STARTING AT (INL). SA1 INL CURRENT COLUMN IN -IN- MX0 -6 ULR6 BSS 0 LX4 6 BX7 -X0*X4 REMOVE ONE DIGIT ZR X7,ULR7 IF END OF DIGITS SA7 IN+X1 SX1 X1+1 UPDATE -INL- EQ ULR6 ULR7 BSS 0 SA2 ULRC ZR X2,ULR8 IF NO MORE REFERENCES TO ADD * THIS MUST BE A COMPUTED GOTO, ADD A SEPARATOR, AND PLUG IN * ANOTHER LINE REFERENCE. SX7 1R, SA7 A7+B1 SX7 X1+B1 SA7 INL KEEP THINGS ACCURATE EQ ULR5 ULR8 BSS 0 BX7 X1 SA7 INL * IF THERE IS MORE OF THE CARD IMAGE (I.E. THIS IS A PRINT * USING STATEMENT), THEN ADD THE REMAINING CHARACTERS. SA1 ULRE FETCH HEADER WORD ONCE MORE AX1 30 POSITION -C2- (SEE *WSF* FOR DETAILS) MX0 -15 BX1 -X0*X1 EXTRACT -C2- ZR X1,ULR11 IF NO MORE TO COPY SA5 INL STARTING COLUMN IN X5 SA2 ULRF NUMBER OF LINE REFERENCES IX1 X1+X2 ULR9 BSS 0 SA3 ULRD+X1 FETCH A CHARACTER ZR X3,ULR10 IF DONE BX7 X3 SA7 IN+X5 SX1 X1+B1 SX5 X5+B1 EQ ULR9 ULR10 BSS 0 BX7 X5 SA7 INL FINAL COLUMN POSITION ULR11 BSS 0 SX1 B0+ -FREE- = 0 SB7 IN SA2 INL RJ ATL ADD TEXT LINE EQ ULR1 NEXT STATEMENT ULR12 BSS 0 * * THE -U- BIT OF THIS -TRLN- ENTRY IS SET, INDICATING THAT * *RCF* NEVER PROCESSED IT. THIS USUALLY MEANS THAT * THE REFERENCE IS UNDEFINED, BUT, IF THE REFERENCE IS * NOT IN THE RANGE OF THE RESEQUENCE, ITS NOT UNDEFINED * AT ALL, *RCF* NEVER RESEQED THAT PART OF THE -TTPT-. * IN THIS CASE, UPDATE THE -TRLN- ENTRY BY INSERTING * -NLN- (NEW LINE NUMBER), WHICH IS UNCHANGED OVER THE * RESEQUENCE, AND EQUALS -OLN- (OLD LINE NUMBER). ALSO, * CLEAR THE -U- BIT SO IF THIS LINE IS REFERENCED AGAIN * WE DON*T HAVE TO REPEAT THIS PROCEDURE. MX0 -21 BX0 -X0*X1 EXTRACT REFERENCE SA2 RESC SEE IF BLOCK RESEQ ZR X2,ULR13 IF RESEQ A-Z, LINE DEFINITELY UNDEFINED SA2 RESA FIRST LINE IN RANGE SA3 A2+B1 LAST LINE IN RANGE IX2 X0-X2 MI IFF LESS THAN LOWER LIMIT IX3 X3-X0 MI IFF MORE THAN UPPER LIMIT BX2 X2+X3 .OR. THE SIGN BITS PL X2,ULR13 WITHIN RANGE, REALLY UNDEFINED * UPDATE THE -TRLN- ENTRY. * X0 = NLN * X1 = -TRLN- ENTRY (WITH -U- BIT SET) * A1 = ADDRESS OF -TRLN- ENTRY LX0 24 POSITION -NLN- BX6 X0+X1 MX0 1 BX6 -X0*X6 CLEAR -U- BIT SA6 A1 STORE UPDATED -TRLN- ENTRY LX1 X6 EQ ULR5.1 CONTINUE PROCESSING ULR13 BSS 0 SA2 BLRC SX6 X2+B1 SA6 A2 COUNT THE UNDEF. LINE REFERENCE * THE LINE REFERENCE IS UNDEFINED. PLACE THE OLD REF BACK * INTO THE CARD IMAGE PRECEEDED BY A QUESTION MARK. * * X1 = -TRLN- ENTRY, USE -OLN-. MX0 -21 BX1 -X0*X1 EXTRACT OLD REF RJ CDD CONVERT TO DISPLAY CODE SB2 B2-B1 MX0 1 AX0 X0,B2 CREATE MASK BX4 X0*X4 L FORMAT SA1 INL CURRENT COLUMN POSITION SX7 1R"QM" THE QUESTION MARK SA7 IN+X1 SX1 X1+B1 INCR COLUMN POINTER MX0 -6 EQ ULR6 BACK TO MAIN FLOW ULRA BSS 1 LINE ORDINAL IN SCRATCH FILE ULRB BSS 1 ORDINAL OF LAST REFERENCED -TPT- ULRC BSS 1 COUNT OF REFS IN CURRENT STATEMENT ULRD = JN WSA FOR FERS AND CARD IMAGE ULRE BSS 1 HEADER WORD FOR EACH STATEMENT ULRF BSS 1 COUNT OF LINE REFS (NOT TOUCHED) WSF SPACE 4,10 ** WSF - WRITE SCRATCH FILE. * * THIS ROUTINE WRITES THE EXPLODED *BASIC* STATEMENT TO THE * SCRATCH FILE, PRECEEDED BY TWO OR MORE HEADER WORDS. * THE FIRST HEADER WORD ALWAYS HAS THE SAME FORMAT FOR * EACH *BASIC* STATEMENT WRITTEN. THE NEXT ONE OR MORE * WORDS ARE THE DECODED LINE REFERENCES EXTRACTED FROM * THE SOURCE STATEMENT. EACH REFERENCE IS IN BINARY. * TYPICALLY THERE WILL BE ONLY ONE REFERENCE, BUT, OF COURSE, * THERE MAY BE MORE FOR A COMPUTED GOTO. THE FORMAT OF * THE FIRST HEADER WORD IS AS FOLLOWS/ * **T 8/ W,7/ R,15/ C2,30/ C1 * * W = NUMBER OF WORDS (EXCLUDING HEADER WORD ONE) * IN REMAINDER OF *BASIC* STATEMENT. THIS WORD * COUNT INCLUDES THE LENGTH OF THE EXPLODED * SOURCE STATEMENT AND ALL THE REFERENCES. * * R = THE NUMBER OF REFERENCES FOLLOWING HEADER * WORD ONE. * * C1 = COLUMN NUMBER THAT THE NEW RESEQUENCED REFS * WILL BEGIN AT. THAT IS, FOR A SIMPLE GOTO, * THE COLUMN NUMBER IS SOMEWHERE PAST THE WORD * *GOTO*. * * C2 = COLUMN NUMBER TO CONTINUE READING DATA FROM * AFTER ALL THE NEW LINE REFERENCES HAVE BEEN * STORED IN THE NEW CARD IMAGE. USED ONLY FOR * PRINT-USING STATEMENTS. * * ENTER (BLRG) = NEG. OF COUNT OF REFS IN LIST. THE REFS * IMMEDIATELY FOLLOW THE COUNT. * (BLRE) = WORD COUNT OF EXPLODED STATEMENT. * (BLRH) = COLUMN ONE. * (BLRI) = COLUMN TWO. * * EXIT LINE WRITTEN, (BLRA) UPDATED. * * CALLS *WTO=*, WTW=* * * USES ALL. * WSF SUBR * FIRST, WRITE HEADER WORD ONE. SA1 BLRE WORD COUNT OF STRING CARD IMAGE SA2 BLRG NUMBER OF REFS TAKEN FROM THE CARD BX6 -X2 MAKE THE COUNT POSITIVE IX1 X1+X6 TOTAL LENGTH FOR PASS 2 READ SA6 A2 SAVE COUNT FOR LATER LX1 7 BX1 X1+X6 INSERT NUMBER OF REFS LX1 15+30 SA2 BLRH COL 1 BX1 X1+X2 SA2 BLRI COL 2 LX2 30 BX6 X1+X2 WRITEO S WRITE HEADER WORD ONE TO SCRATCH * NOW, WRITE THE REFERENCES TO SCRATCH, IMMEDIATELY AFTER THE * FIRST HEADER WORD. SA1 BLRG NUMBER OF REFS WRITEW S,BLRG+1,X1 * NOW WRITE THE EXPLODED STRING CARD IMAGE. SA1 BLRE WORD COUNT OF STRING WRITEW S,IN,X1 * FINALLY, INCREMENT THE LINE ORDINAL IN THE FILE. SA1 BLRA SX6 B1 IX6 X1+X6 SA6 A1 EQ WSFX EXIT. SPACE 4,10 XTEXT COMCSST XTEXT COMCSFN USE LITERALS SPACE 2,5 QUAL * SPACE 2,5 END20 BSS 0 SPACE 2,5 TITLE 3,0 OVERLAY - *READY* MODE CONTROL CARD COMMANDS. IDENT SEN30,READY,/CCC/CCC,3,0 ORG READY SPACE 2,5 COMMENT SENATOR VERSION "VER" - CONTROL STATEMENT COMMANDS SPACE 2,5 QUAL CCC SPACE 4,10 ** THE 3,0 OVERLAY. * * THIS OVERLAY CONTAINS THOSE *READY* MODE COMMANDS * THAT NEED TO EXECUTE CONTROL CARDS. AGAIN, THESE * COMMANDS ARE SEPARATED FROM THE 1,0 FOR CM PURPOSES. * * EXCEPT FOR ERRORS, CONTROL EXITS FROM THIS OVERLAY * TO THE CONTROL CARDS THAT ARE PASSED TO THE OPERATING * SYSTEM. CONTROL SHOULD RETURN TO THE 1,0 OVERLAY VIA * A SENATOR RESTART. CCC SA1 COMMON SB7 X1 JP B7+CCOM CCOM BSS 0 LOC 0 VRUT JP RUN RUN VCOT JP COM COMPILE VEXT JP RCE EXECUTE VSOT JP SCO VSCT JP SCP VNPR JP NPR VPRT JP PRI PRINT VPUT JP PUN PUNCH VBET JP BEG BEGIN VRMT JP RMT RMT VBAT JP BAN BANG REQUEST, PROCESS CONTROL STATEMENT VCAT JP CAT CATLIST IFNOSBE VLOT JP LOG LOGOUT VGOT JP GOO GOODBYE ENDIF LOC *O ERRNZ VRUT FIRST THREE MUST BE RUN/COMPILE/EXECUTE SPACE 2,5 ** CONTROL STATEMENT DEFINITIONS. * NCSB EQU 300B SIZE OF CONTROL STATEMENT BUFFER GOTOEXE MICRO 1,, SKIP(EXECUTE) GOTOUPOK MICRO 1,, SKIP(UPDEND) GOTODONE MICRO 1,, SKIP(DONE) GOTODBG1 MICRO 1,, SKIP(DBG1) GOTODBG2 MICRO 1,, SKIP(DBG2) EXE MICRO 1,, ENDIF(EXECUTE) UPOK MICRO 1,, ENDIF(UPDEND) DONE MICRO 1,, ENDIF(DONE) DBG1 MICRO 1,, ENDIF(DBG1) DBG2 MICRO 1,, ENDIF(DBG2) IFNOS CONOUT MICRO 1,, ASSIGN(TT,OUTPUT) DISOUT MICRO 1,, ASSIGN(MS,OUTPUT) EXIT MICRO 1,, EXIT. PRINT MICRO 1,, ROUTE("BFILE",DC=PR) PUNCH MICRO 1,, ROUTE("BFILE",DC=PH) PUNCHB MICRO 1,, ROUTE("BFILE",DC=PB) ELSE CONOUT MICRO 1,, CONNECT(OUTPUT) DISOUT MICRO 1,, DISCONT(OUTPUT) EXIT MICRO 1,, EXIT(S) PRINT MICRO 1,, ROUTE("BFILE",DC=PR,TID=C) PUNCH MICRO 1,, ROUTE("BFILE",DC=PU,TID=C) PUNCHB MICRO 1,, ROUTE("BFILE",DC=PU,EC=SB,TID=C) ENDIF SPACE 4,10 CCCX LOAD 1 EXIT FROM THIS OVERLAY CSS SPACE 4,10 ** CSS MACRO - GENERATE A CONTROL STATEMENT SKELETON. * * THIS MACRO IS USED TO SET UP A CONTROL STATEMENT * SKELETON USED BY ROUTINE *ASC*. THIS AND THE FOLLOWING * MACROS ARE USED TO SET UP SEQUENCES OF CONTROL STATE- * MENTS USED IN CALLING COMPILERS, ETC. * * ORD CSS (TEXT),ORD,(TEXT),ORD,...,(TEXT) * * WHERE ORD IS A CONDITIONAL ORDINAL (OPTIONAL) * TEXT IS TEXT * ORD IS ORDINAL OF PARAM. TO BE INSERTED * * NOTE: TEXT MUST BE THE LAST PARAMETER. * * SEE BELOW FOR DETAILS ABOUT THE TABLE MACRO CSS,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15, ,P16,P17 LOCAL FULLWD FULLWD SET 1 * * CREATE A CONDITIONAL WORD IF A LABEL WAS GIVEN * .1 IFC NE,*P1**,1 + VFD 54/O_P1_+100B,6/72B * * LOOP THROUGH THE PARAMETERS * .1 ECHO ,PA=((P2),(P3),(P4),(P5),(P6),(P7),(P8),(P9),(P10),(P11 ,),(P12),(P13),(P14),(P15),(P16),(P17),) .2 IFC NE,$PA$$ * * PROCESS ORDINAL, IF THAT-S WHAT IT IS * .A MICRO 1,,\_PA_\ .B MICCNT .A .C MICRO .B,1,\_PA_\ .3 IFC LE,\".C"\Z\ POS 6 VFD 6/O_PA FULLWD SET 1 .3 ELSE * * PROCESS TEXT. CHANGE TRAILING OPEN AND CLOSE * BRACKETS TO OPEN AND CLOSE PARENS. THEN * BREAK THE TEXT UP INTO 9-CHARACTER HUNKS. * .4 IFC EQ,\".C"\[\ .A MICRO 1,.B-1,\".A"\ .A MICRO 1,,\".A"(\ .4 ELSE .5 IFC EQ,\".C"\]\ .6 IFGT .B,1 .A MICRO 1,.B-1,\".A"\ .A MICRO 1,,\".A")\ .6 ELSE 1 .A MICRO 1,, ) .5 ENDIF .4 ENDIF AA SET .B-1 AA SET AA/9+1 .4 DUP AA .B MICRO 1,9,\".A"\ .A MICRO 10,,\".A"\ .C MICCNT .B .C DECMIC .C .5 IFNE FULLWD,1 POS 6 VFD 6/70B FULLWD SET 1 .5 ENDIF + VFD 54/".C"L".B" FULLWD SET 0 .5 IFC NE,\".A"\\,2 VFD 6/70B FULLWD SET 1 .4 ENDD .3 ENDIF .2 ELSE 1 .1 STOPDUP .1 ENDD * * FINISH UP THE SKELETON * .1 IFNE *P,6,2 ERR CARD NOT TERMINATED WITH TEXT POS 6 * VFD 6/71B ENDM CSSDEF SPACE 4,10 ** CSSDEF MACRO - DEFINE START OF SKELETONS. * * CSSDEF (LABEL1,LABEL2,...) * * MERELY DEFINES AN INDEFINITE NUMBER OF ADDRESSES VIA * A *BSS 0* CSSDEF MACRO P1 IRP P1 P1 BSS 0 IRP ENDM CSSEND SPACE 4,10 ** CSSEND MACRO - MARK THE END OF A SKELETON OR USE BLOCK. * * CSSEND * * SIMPLY CREATES A WORD CONTAINING END-OF-SKELETON/USE CODE CSSEND MACRO CON 73B ENDM CSSUSE SPACE 4,10 ** CSSUSE MACRO - CALL A SUB-SKELETON. * * ORD CSSUSE SUBSKEL * * WHERE ORD IS A CONDITIONAL ORDINAL (OPTIONAL) * SUBSKEL IS ADDRESS OF SUB-SKELETON * * SEE BELOW FOR DETAILED DESCRIPTION OF SUB-SKELETONS * AND CONDITIONAL STUFF. MACRO CSSUSE,P1,P2 .1 IFC NE,*_P1_**,2 POS 6+18 VFD 18/O_P1_+100B * POS 6+18+18 VFD 18/_P2 * POS 6 VFD 6/72B ENDM BAN SPACE 4,8 ** BANG CHARACTER ENTERED, PROCESS CONTROL STATEMENT. BAN BSS 0 * ADD CONTROL STATEMENT TERMINATOR IF . OR ) NOT FOUND. SA5 INC (X5) = CURRENT COLUMN SA4 INL (X4) = LAST COLUMN SX3 1R. SX2 1R) BAN1 BSS 0 IX0 X4-X5 MI X0,BAN2 IF EOL SA1 IN+X5-1 READ A CHARACTER IX6 X1-X2 COMPARE TO ) BX7 X1-X3 COMPARE TO . ZR X6,BAN3 IF TERMINATOR FOUND ZR X7,BAN3 IF TERMINATOR FOUND SX5 X5+B1 EQ BAN1 LOOP FOR ANOTHER CHARACTER BAN2 BSS 0 TERMINATOR NOT FOUND SA1 INL SX6 1R. SA6 IN+X1 STORE CONTROL STATEMENT TERMINATOR SX6 X1+B1 SA6 A1 UPDATE (INL) BAN3 BSS 0 PUTI JN SA5 INC SA4 INL IX7 X4-X5 (X7) = CHARACTER COUNT SX7 X7+B1 ADJUST COUNT PUTS (IN+X5-1),X7,B6 PUT CONTROL STATEMENT PUTZ EQ BEG4 ENTER COMMON CODE BEGIN SPACE 4,10 ** BEGIN COMMAND. BEG BSS 0 * REPLACE SPACES WITH COMMAS IN COMMAND TEXT. SA5 INC SA4 INL SX6 1R, THE COMMA LX3 X5 BEG1 BSS 0 IX0 X4-X3 MI X0,BEG3 IF EOL SA1 IN+X3-1 SX0 X1-1R NZ X0,BEG2 IF NOT A SPACE SA6 A1 REPLACE BY A COMMA BEG2 BSS 0 SX3 X3+B1 INCREMENT CURSOR EQ BEG1 BEG3 BSS 0 SX6 1R. SA6 IN+X3-1 STORE LINE TERMINATOR IX7 X3-X5 SX7 X7+B1 COMPUTE CHARACTER COUNT PUTI JN SET PUT FWA PUTT (BEGIN) COMMAND VERB PUTS (IN+X5-1),X7,B6 PUT TEXT PUTZ BEG4 BSS 0 * ADD RESTART CONTROL STATEMENTS TO GET BACK WHERE WE CAME FROM. SA1 LSOG SB2 BEGB NUMBER OF WORDS SB3 BEGD FWA OF READY CS AX1 6 (X1) = LAST OVERLAY NUMBER SX0 X1-1 ZR X0,BEG5 IF CAME FROM READY SB3 BEGE FWA OF EDIT CS SX0 X1-4 ZR X0,BEG5 IF CAME FROM EDIT SB3 BEGA RESTART CS BEG5 BSS 0 SB2 B2-B1 MI B2,BEG6 IF ALL CONTROL STATEMENTS MOVED SA1 B3 LX6 X1 SA6 A6+B1 MOVE ONE WORD SB3 B3+B1 EQ BEG5 BEG6 BSS 0 SX6 A6+B1 SA6 BEGC SAVE CS LWA+1 RJ CPD CHECKPOINT DUMP SA5 BEGC ECS JN,X5 ENTER CONTROL STATEMENTS BEGA DATA C* "LOADFILE",RST.* DATA C*"EXIT"* DATA C* "LOADFILE",RST.* CON 0 BEGB EQU *-BEGA BEGC BSS 1 BEGD DATA C* "LOADFILE",REA.* DATA C*"EXIT"* DATA C* "LOADFILE",REA.* CON 0 BEGE DATA C* "LOADFILE",EDI.* DATA C*"EXIT"* DATA C* "LOADFILE",EDI.* CON 0 CATALOG SPACE 4,10 SPACE 4,10 CAT BSS 0 IFNOS SA1 UN BX6 X1 SA6 OI+TPVT SET DEFAULT *UN* FOR THE CATLIST ELSE SA1 ID READ DEFAULT *ID* FOR AUDIT BX6 X1 SA6 OI+TPVT SA1 SN BX6 X1 SA6 OB+TPVT SET SETNAME ENDIF CAT1 BSS 0 RJ GCP GET COMMAND PARAMETER ZR B7,CAT7 IF EOL MI B7,CAT99 IF ERROR SX0 B7-3 ZR X0,CAT5 POSSIBLE *TYPE* SPECIFICATION SB5 9 GT B6,B5,CAT99 IF ID TOO MANY CHARACTERS EQ B6,B1,CAT3 IF 1 CHARACTER, POSSIBLE *TYPE* CAT2 BSS 0 SA6 OI+TPVT STORE NEW CATLIST ID EQ CAT1 CAT3 BSS 0 BX3 X6 LX3 6 R1 FORMAT NOW SX0 X3-1RP ZR X0,CAT4 IF PERMANENT IFNOS SX0 X3-1RD ZR X0,CAT4 IF PERMANENT SX0 X3-1RI ZR X0,CAT4 IF PERMANENT ENDIF SX0 X3-1RL NZ X0,CAT2 IF NOT LOCAL, ASSUME AN ID CAT4 BSS 0 BX6 X3 SA6 CATA SAVE POSSIBLE *TYPE*, IFF A / FOLLOWS SA1 INC BX6 X1 SA6 CATB SAVE INPUT POINTER FOR RE-TRY (IF NEEDED) RJ GCP LOOK FOR TRAILING SLASH SX0 B7-3 NZ X0,CAT6 IF NO DELIMETER, NOT A *TYPE* SX0 X6-1R/ NZ X0,CAT6 NOT A /, THUS NOT A *TYPE* EQ CAT1 CAT5 BSS 0 SX0 X6-1R/ ENSURE A SLASH NZ X0,CAT1 SX6 1RL SA6 CATA DEFAULT *TYPE* IS LOCAL EQ CAT1 CAT6 BSS 0 NOT A *TYPE*, ASSUME AN ID SA1 CATB BX6 X1 SA6 INC RE-SET INPUT POINTER SA1 CATA MX6 0 SA6 A1 CLEAR FALSE *TYPE* BX6 X1 LX6 -6 BACK TO L-FORMAT EQ CAT2 STORE NEW ID CAT7 BSS 0 RJ CPD CHECKPOINT DUMP SA1 CATA NZ X1,CAT8 IF A *TYPE* SPECIFIED SA1 TYPE ELSE USE *TYPE* CURRENTLY IN EFFECT LX1 6 CAT8 BSS 0 SB7 CATD ASSUME LOCAL CATLIST SX0 X1-1RL ZR X0,CAT9 IF LOCAL SB7 CATC ELSE WE HAVE A PERMANENT FILE CATLIST CAT9 BSS 0 RJ ACS ASSEMBLE CONTROL STATEMENTS ECS CSB,B7+1 ENTER CONTROL STATEMENTS CAT99 BSS 0 PRINT (ILLEGAL CATLIST PARAMETER) EQ CCCX CATA CON 0 TYPE CATB CON 0 INC CSSDEF CATC IFNOS CSS (CATLIST/UN=),I,(.) ELSE CSS (AUDIT,AI=P,LF="OFILE",ID=),I,(,SN=),B,(.) ENDIF CSSUSE RCERST2 CSSEND CSSDEF CATD IFNOS CSS (ENQUIRE,F.) ELSE CSS (FILES.) ENDIF CSSUSE RCERST2 CSSEND SCOPE SPACE 4,10 ** SCOPE/SCP PROCESSING. SCO BSS 0 RJ CPD CHECK POINT DUMP SA1 BRIEF NZ X1,SCO1 IF BRIEF ECS SCOA,SCOB SCO1 ECS SCOB,SCOC SCOA DIS ,* "LOADFILE",SCOPE.* DATA 0 SCOB DIS ,* "LOADFILE",SCO.* DATA 0 SCOC BSS 0 SCP BSS 0 RJ CPD CHECK POINT DUMP SA1 BRIEF NZ X1,SCP1 IF BRIEF ECS SCPA,SCPB SCP1 ECS SCPB,SCPC SCPA DIS ,* "LOADFILE",SCP.* DATA 0 SCPB DIS ,* "LOADFILE",S.* DATA 0 SCPC BSS 0 RMT SPACE 4,10 IFNOSBE ** RMT - GET THE PARAMETERS. RMT BX6 X6-X6 UNSET *N* FLAG SA6 ON+TPVT SX6 B1 SA6 ONA+TPVT SET -NO *A*- FLAG RMT0 RJ GCP GET COMMAND PARAMETER ZR B7,RMT3 IF EOL NE B7,B1,RMT2.5 IF ILLEGAL PARAM SX0 B6-7 ZR X0,RMT2 IF JOBNAME SX0 B6-2 LX6 2*6 ZR X0,RMT2 IF ID NE B6,B1,RMT2.5 IF ILLEGAL LENGTH LX6 -6 SX0 X6-1RA ZR X0,RMT1 IF *A* SX0 X6-1RN NZ X0,RMT2.5 IF ILLEGAL PARAMETER SX6 B1 SET *N* SA6 ON+TPVT EQ RMT0 RMT1 BX6 X6-X6 UNSET *NOT A* FLAG SA6 ONA+TPVT EQ RMT0 RMT2 SA6 RMTB SAVE JOBNAME/ID EQ RMT0 RMT2.5 PRINT (ILLEGAL PARAMETER) EQ CCCX EXIT * GET THE REMOTE OUTPUT QUEUE FOR THIS USER. *TBL* IS USED. RMT3 SYSTEM TBL,R,RMTC CALL TBL FOR OUTPUT FNTS MX0 -12 SA1 RMTC LX1 0-36 BX7 -X0*X1 X7 = NUMBER OF WORDS RETURNED * SEARCH THE TABLE SA5 RMTB GET JOBNAME (IF ANY) SB7 B0-3 LOOP ORDINAL (RUNNING START) SA4 UID USER ID SB6 X7 LOOP LIMIT RMT4 SB7 B7+3 GE B7,B6,RMT7 IF END OF FNT SA1 BUFS+B7 GET AN FNT SA3 A1+2 GET 2ND FST MX0 -12 BX6 -X0*X3 EXTRACT PRIORITY AX3 24 GET DISPOSITION CODE BX2 -X0*X3 SX2 X2-40B NZ X2,RMT4 IF NOT PRINT DISPOSITION SA3 A3-B1 GET FIRST WORD OF FST AX3 24 CHECK DESTINATION ID BX2 -X0*X3 IX0 X2-X4 NZ X0,RMT4 IF NOT OURS MX0 6*7 BX2 X0*X1 GET JOBNAME BX3 X2-X5 ZR X3,RMT5 IF SPECIFIED AND FOUND LX2 -3*6 MX0 -2*6 BX2 -X0*X2 EXTRACT 2-CHAR ID IX3 X2-X5 ZR X3,RMT5 IF TWO CHAR ID MATCHES NZ X5,RMT4 IF WE ARE LOOKING FOR A SPECIFIC JOB ZR X6,RMT4 IF ZERO PRIORITY, SKIP IT * X1 IS THE NAME OF THE DESIRED FILE. GET IT. RMT5 MX0 6*7 BX6 X0*X1 SA6 RMTD+1 SA6 OI+TPVT BX4 X0*X5 NZ X4,RMT6 IF HE KNOWS THE JOBNAME WRITEC O,RMTD *GETTING JOBNAME* RMT6 RJ CPD CHECK POINT DUMP SB7 RMTE RJ ACS ASSEMBLE CONTROL STATEMENTS ECS CSB,B7+1 RMT7 PRINT (NO FILE) EQ CCCX EXIT RMTB BSS 1 JOBNAME IN 7L OR ID IN 2R OR ZERO RMTC VFD 12/9,12/LBUFS,6/0,18/BUFS,12/0 TBL CALL WORD RMTD DIS ,* GETTING JOBNAME* **** *RMT* CONTROL STATEMENTS. CSSDEF RMTE CSS (RETURN,OOO.) CSS (BATCH,),I,(,LOCAL.) CSS (BATCH,),I,(,RENAME,OOO.) CSS (REWIND,OOO.) N CSSUSE RCERST2 IF *N* NA CSS (SKIPF,OOO,262142,17.) NA CSS (SKIPB,OOO,1.) CSS (COPY,OOO,"OFILE".) CSS (REWIND,OOO.) CSSUSE RCERST2 CSSEND **** ELSE RMT BSS 0 MX6 0 SA6 ON+TPVT CLEAR *N* FLAG SA6 ONA+TPVT CLEAR *A* FLAG RMT1 BSS 0 RJ GCP GET COMMAND PARAMETER ZR B7,RMT4 IF EOL NE B7,B1,RMT3 IF ILLEGAL PARAMETER NE B6,B1,RMT3 IF NOT ONE CHARACTER LONG LX6 6 R-FORMAT SX0 X6-1RA ZR X0,RMT2 IF *ALL* SX0 X6-1RN NZ X0,RMT3 IF NOT *NONE* SX6 B1 SA6 ON+TPVT SET *N* FLAG EQ RMT1 RMT2 BSS 0 SX6 B1 SA6 ONA+TPVT SET *A* FLAG EQ RMT1 RMT3 BSS 0 PRINT (ILLEGAL PARAMETER) EQ CCCX RMT4 BSS 0 SA1 =3LOOO RJ SUF SETUP FET, UNLOAD *OOO* * HAVE *QAC* FIRST CHECK THE WAIT QUEUE, THEN THE PRINT * QUEUE FOR *EIOT* FILES. SYSTEM QAC,RCL,RMTA SA1 RMTA MX0 -8 AX1 10 BX2 -X0*X1 (X2) = *QAC* REPLY SB7 RMTA ASSUME FOUND A FILE ZR X2,RMT5 IF FOUND SX0 X2-7 SX7 3RQAC NZ X0,RMT9 IF NOT *NOT FOUND* SYSTEM QAC,RCL,RMTB SA1 RMTB MX0 -8 AX1 10 BX2 -X0*X1 (X2) = *QAC* REPLY SB7 RMTB ASSUME FOUND ZR X2,RMT5 IF FOUND SX0 X2-7 SX7 3RQAC NZ X0,RMT9 IF NOT *NOT FOUND* PRINT (NO FILE) EQ CCCX RMT5 BSS 0 PROCESS FILE FOUND SX6 B7 SA6 RMTC SAVE (B7) * ROUTE,OOO,DC=SC TO REMOVE THE *QF DISPOSITION. ROUTE RMTD,RCL SA1 RMTD MX0 -6 AX1 12 BX2 -X0*X1 EXTRACT *DSP* RETURN CODE SX7 3RDSP NZ X2,RMT9 IF SOMETHING TO WORRY ABOUT PUTI IN SET *PUT* FWA PUTT (GETTING),B6+B1 SA1 B7+7B READ JSN OF JOB MX0 4*6 BX1 X0*X1 PUTF X1,1,Z,B6+B1 PUTZ PRINTC IN DISPLAY JSN SA1 RMTC SB7 X1 RESTORE (B7) SA1 ON+TPVT NZ X1,CCCX IF *NONE*, WE ARE DONE REWIND S,RCL REWIND *OOO* SA1 ONA+TPVT MX6 0 ASSUME RSA = BOI NZ X1,RMT6 IF *ALL* SA1 B7+14B GET RSA OF DAYFILE, IF ANY MX0 -30 LX1 30 BX6 -X0*X1 EXTRACT RSA RMT6 BSS 0 SA6 S+6 SET RSA OF DAYFILE OR ZERO SA1 S+1 MX0 1 LX0 47-59 BX6 X0+X1 SET RANDOM BIT IN FET SA6 A1 READEI S,RCL A NICE FUNCTION SA1 S+1 MX0 1 LX0 47-59 BX6 -X0*X1 CLEAR RANDOM BIT SA6 A1 RMT7 BSS 0 READC S,IN SX0 X1+2 ZR X0,RMT8 IF END-OF-INFORMATION ENCOUNTERED WRITEC O,IN COPY ONE LINE EQ RMT7 RMT8 BSS 0 REWIND S,RCL EQ CCCX RMT9 BSS 0 BX5 X2 SAVE ERROR CODE PUTI IN PUTT (*),B6+B1 PUTF X7,8,3,B6 PUT NAME OF PPU ROUTINE PUTT (* ERROR CODE =),B6 PUTD X5,,,B6+B1 PUTZ PRINTC IN EQ CCCX RMTA BSS 0 *QAC* REQUEST FOR WAIT QUEUE FILE VFD 42/3LOOO,17/2,1/0 GET VFD 36/0,6/13B,18/0 LEN CON 0,0,0,0,0,0 VFD 12/40B,48/0 WAIT QUEUE CON 0,0,0,0,0,0,0 RMTB BSS 0 *QAC* REQUEST FOR EIOT PRINT FILE VFD 42/3LOOO,17/2,1/0 GET VFD 36/0,6/13B,18/0 LEN CON 0,0,0 VFD 42/0,6/0,12/3 EIOT ORIGIN TYPE CON 0 VFD 24/0,36/40B EIOT ORIGIN TYPE VFD 12/4B,48/0 PRINT QUEUE CON 0,0,0,0,0,0,0 RMTC CON ** STORAGE FOR (B7) RMTD BSS 0 ROUTE,OOO,DC=SC (TO REMOVE *QF ATTRIBUTE) VFD 42/3LOOO,18/0 VFD 12/0,12/0,12/2RSC,6/0,18/010020B CON 0,0,0,0,0,0 QUAL$ EQU 0 XTEXT COMCRDC ENDIF RUN SPACE 4,10 ** RUN COMMAND - SET FLAG. RUN SX6 1 SET RUN FLAG SA6 ORUN+TPVT EQ RCE COMPILE SPACE 4,10 ** COMPILE COMMAND - SET FLAG. COM SX6 1 SA6 OCOM+TPVT EQ RCE LOGOUT SPACE 4,10 IFNOSBE ** LOGOUT. LOG ECS LOGA,LOGB LOGA DIS ,*LOGOUT.* DATA 0 LOGB BSS 0 GOODBYE SPACE 4,10 ** GOODBYE. GOO ECS GOOA,GOOB GOOA DIS ,*LOGOUT,,,,SENATOR.* DATA 0 GOOB BSS 0 ENDIF PRINT SPACE 4,10 ** PRINT. NPR SX6 B1 SET NPRINT FLAG SA6 NPRF EQ PRI NPRF CON 0 PRI SB7 B0 SB6 B1+B1 FETCH, RETURN IF NOT FOUND RJ GFI GET FILE INFORMATION EQ B7,B1,CCCX IF *END* OR ERROR SA1 GFIJ NZ X1,PRI2 IF NOT CURRENT FILE RJ VCF VERIFY CURRENT FILE NZ B7,CCCX IF NONE SA1 =0L"SFILE" SAVE CURRENT FILE... RJ SUF SET AND UNLOAD FILE SA1 SYS GET SYSTEM ORDINAL FOR *SCF* SX6 X1 SA6 SCFE BX6 X6-X6 SAVE A-Z SA6 TLNRL RJ SCF SAVE CURRENT FILE RJ CPD CHECK POINT DUMP SA1 NPRF NPRINT FLAG(0=CS) SA2 DEST FILE DESTINATION BX6 X2 SA6 ODEST+TPVT EQUATE DEST TO ODEST FOR CSS NZ X1,PRI1.2 NPRINT SPECIFIED NZ X2,PRI1.1 DESTINATION SPECIFIED SB7 PRIA LOCAL FILE TO CENTRAL SITE EQ PRI1.4 PRI1.1 SB7 PRIA.1 LOCAL FILE TO SPECIFIED DESTINATION EQ PRI1.4 PRI1.2 NZ X2,PRI1.3 NPRINT W/DEST SPECIFIED SB7 PRIA.2 NPRINT TO CENTRAL SITE EQ PRI1.4 PRI1.3 SB7 PRIA.3 PRI1.4 BX6 X6-X6 CLEAR NPRINT FLAG SA6 NPRF RJ ACS ASSEMBLE CONTROL STATEMENTS ECS CSB,B7+1 PRI2 BSS 0 SA1 NLFN BX6 X1 SA6 OI+TPVT ZR B7,PRI3 IF FILE EXISTS (FROM *GFI*) PRINT (NO FILE) EQ CCCX EXIT PRI3 RJ CPD CHECK POINT DUMP SA1 NPRF NPRINT FLAG (0=CS) SA2 DEST FILE DESTINATION BX6 X2 SA6 ODEST+TPVT EQUATE DEST TO ODEST FOR CSS NZ X1,PRI3.2 NPRINT SPECIFIED NZ X2,PRI3.1 DESTINATION SPECIFIED SB7 PRIB PERM FILE TO CENTRAL SITE EQ PRI3.4 PRI3.1 SB7 PRIB.1 PERM FILE TO SPECIFIED DESTINATION EQ PRI3.4 PRI3.2 NZ X2,PRI3.3 SB7 PRIB.2 NPRINT W/DEST SPECIFIED EQ PRI3.4 PRI3.3 SB7 PRIB.3 NPRINT TO CENTRAL SITE PRI3.4 BX6 X6-X6 SA6 NPRF RJ ACS ASSEMBLE CONTROL STATEMENTS ECS CSB,B7+1 **** *PRINT* CONTROL STATEMENTS. CSSDEF PRIA CSS (REWIND,"SFILE","BFILE".) CSS (COPYSBF,"SFILE","BFILE",99999.) CSS (ROUTE,"BFILE",DC=PR.) CSSUSE RCERST2 CSSEND CSSDEF PRIA.1 CSS (REWIND,"SFILE","BFILE".) CSS (COPYSBF,"SFILE","BFILE",99999.) IFNOS CSS (ROUTE,"BFILE",DC=PR,UN=),DEST,(.) ELSE CSS (ROUTE,"BFILE",DC=PR,TID=),DEST,(.) ENDIF CSSUSE RCERST2 CSSEND CSSDEF PRIA.2 CSS (REWIND,"SFILE","BFILE".) CSS (COPY,"SFILE","BFILE".) CSS (ROUTE,"BFILE",DC=PR.) CSSUSE RCERST2 CSSEND CSSDEF PRIA.3 CSS (REWIND,"SFILE","BFILE".) CSS (COPY,"SFILE","BFILE".) IFNOS CSS (ROUTE,"BFILE",DC=PR,UN=),DEST,(.) ELSE CSS (ROUTE,"BFILE",DC=PR,TID=),DEST,(.) ENDIF CSSUSE RCERST2 CSSEND CSSDEF PRIB CSS (REWIND,),I,(,"BFILE".) CSS (COPYSBF,),I,(,"BFILE".) CSS (ROUTE,"BFILE",DC=PR.) CSSUSE RCERST2 CSSEND CSSDEF PRIB.1 CSS (REWIND,),I,(,"BFILE".) CSS (COPYSBF,),I,(,"BFILE".) IFNOS CSS (ROUTE,"BFILE",DC=PR,UN=),DEST,(.) ELSE CSS (ROUTE,"BFILE",DC=PR,TID=),DEST,(.) ENDIF CSSUSE RCERST2 CSSEND CSSDEF PRIB.2 CSS (REWIND,),I,(,"BFILE".) CSS (COPYBF,),I,(,"BFILE".) CSS (ROUTE,"BFILE",DC=PR.) CSSUSE RCERST2 CSSEND CSSDEF PRIB.3 CSS (REWIND,),I,(,"BFILE".) CSS (COPYBF,),I,(,"BFILE".) IFNOS CSS (ROUTE,"BFILE",DC=PR,UN=),DEST,(.) ELSE CSS (ROUTE,"BFILE",DC=PR,TID=),DEST,(.) ENDIF CSSUSE RCERST2 CSSEND IFNOS CSSDEF PRIC CSS (REWIND,"SFILE","BFILE".) CSS (COPYSBF,"SFILE","BFILE",99999.) CSS (ROUTE,"BFILE",DC=PR.) CSSUSE RCERST2 CSSEND CSSDEF PRID CSS (REWIND,),I,(,"BFILE".) CSS (COPY,),I,(,"BFILE".) CSS (ROUTE,"BFILE",DC=PR.) CSSUSE RCERST2 CSSEND ENDIF **** PUNCH SPACE 4,10 ** PUNCH. PUN SB7 B0 SB6 B1+B1 FETCH, RETURN IF NOT FOUND RJ GFI GET FILE INFORMATION EQ B7,B1,CCCX IF *END* OR ERROR SA1 GFIJ NZ X1,PUN1 IF NOT CURRENT FILE RJ VCF VERIFY CURRENT FILE NZ B7,CCCX IF NONE SA1 =0L"SFILE" RJ SUF SET UP FET/UNLOAD FILE SA1 SYS SX6 X1 SA6 SCFE MX6 0 SA6 TLNRL SET SAVE A-Z RJ SCF SAVE CURRENT FILE EQ PUN2 PUN1 BSS 0 SA1 NLFN MX0 -1 BX6 -X0+X1 INSERT COMPLETE BIT SA6 S SAVE FILE NAME ZR B7,PUN2 IF FILE EXISTS (FROM *GFI*) PRINT (NO FILE.) EQ CCCX PUN2 BSS 0 SA1 S MX0 42 BX6 X0*X1 SA6 OI+TPVT SET FILE NAME FOR *DISPOSE* RJ CPD CHECK POINT DUMP SB7 PUNA RJ ACS ASSEMBLE CONTROL STATEMENTS ECS CSB,B7+1 **** *PUNCH* CONTROL STATEMENTS. CSSDEF PUNA CSS (REWIND,"BFILE",),I,(.) CSS (COPY,),I,(,"BFILE".) CSS ("PUNCH") CSSUSE RCERST2 CSSEND **** TITLE 3,0 OVERLAY - RUN, COMPILE, AND EXECUTE. ** RUN, COMPILE, AND EXECUTE. * * THESE THREE COMMANDS ARE VERY SIMILAR IN TERMS OF * INTERNAL PROCESSING. THE FOLLOWING CODE BEARING THE * *RCE* LABEL PROCESSES ALL THREE COMMANDS. IN THE FEW * INSTANCES WHERE A COMMAND HAS SPECIAL PROCESSING THE * DIFFERENCE IS DOCUMENTED. CHK SPACE 4,10 ** CHK MACRO - SET UP THE CFT. * * ORD CHK (MESSAGE - ) * * WHERE ORD IS THE PARAMETER ORDINAL TO BE CHECKED * MESSAGE IS THE ERROR MESSAGE MACRO CHK,P1,P2 LOCAL L1 NOREF .B,.C,.D .A MICRO 1,,* _P2_* .B MICCNT .A .C SET .B-1 .C SET .C/10+1+1 .A DECMIC .C * USE CHK L1 DIS ".A", P2 DATA 0 ENSURE END OF MESSAGE USE * * + VFD 24/L1,18/.C-1,18/_P1_+TPVT ENDM PNL SPACE 4,10 ** PNL MACRO - SET UP PARAMETER NAME LIST. * * ORD PNL FLAG * * WHERE ORD IS THE ORDINAL TO BE DEFINED AND THE * PARAMETER NAME * FLAG - SEE ABOVE MACRO PNL,P1,P2 .A MICRO 2,,*_P1_* P1 VFD 42/0L".A",18/_P2 ENDM RCE SPACE 4,10 * RUN, COM, EXE MACROS. * * THESE MACRO ARE USED TO CREATE THE *TTPT* (SEE * BELOW). A SAMPLE ENTRY * * SYSTEM RUN (OPT,R,S,PR,PU) * EXE (FL,LIB) * * THIS ENTRY PERMITS A *RUN* OR *EXECUTE* IN SYSTEM * *SYSTEM*. THE PERMITTED PARAMETERS FOLLOW EACH ENTRY. * * * NOTE: THIS MACRO ALSO SETS UP *TSST* - THE * START SKELETON TABLE. STARTING POINTS ARE SET * FOR ALL LEGAL SYSTEM/COMMAND PAIRS. MACRO RUN,SYS,P1 =A 0,SYS,(_P1_),RUN ENDM MACRO COM,SYS,P1 =A 1,SYS,(_P1_),COM ENDM MACRO EXE,SYS,P1 =A 2,SYS,(_P1_),EXE ENDM SPACE 2,4 =A MACRO P1,P2,P3,P4 * * PROCESS NEW SYSTEM * .1 IFC NE,*_P2_** .A MICRO 1,3,/_P2_/ TSST RMT .A MICRO 1,3,/_P2_/ ORG TSST+//S".A" RMT ORG TPPT+//S".A" .1 ENDIF * * SET OK BIT * POS 60-_P1 VFD 1/1 * SET FLAGS AA SET 2-_P1 NOREF AA * SET PERM BITS IRP P3 POS AA*18+O_P3+1 VFD 1/1 IRP POS AA*18+OSHOW+1 SET SHOW VFD 1/1 POS AA*18+OHELP+1 SET HELP VFD 1/1 VFD $/0 * ENTER ADDR IN TSST TSST RMT POS 60-6-_P1_*18 VFD 18/".A"_P4 RMT ENDM SPACE 4,10 ** RCE TABLES. * * THE FOLLOWING TABLES ARE USED MAINLY BY *RCE* CODE. * CERTAIN OTHER COMMANDS ALSO USE THE CONTROL STATEMENT * SKELETONS DESCRIBED BELOW. TPNL SPACE 2,10 ** TPNL - PARAMETER NAME LIST. * * THIS TABLE CONTAINS THE NAMES OF EACH OF THE POSSIBLE * PARAMETERS ON AN *RCE* CONTROL CARD. THE TABLE ALSO * DEFINES THE ORDINAL NAMES FOR EACH OF THESE PARAMETERS. * **T ORD 42/PARAMETER NAME,18/FLAG * * WHERE ORD - ORDINAL NAME OF THE ENTRY * PARAMETER NAME - IN 0L FORMAT * FLAG - 0 IF *=* REQUIRED, ELSE 1 * * * NOTE: THE FIRST PARAMETER IN THIS TABLE MUST NOT BE * LEGAL UNDER THE *EXECUTE* COMMAND. IF THIS HAPPENS, * A CERTAIN *VFD* BELOW WILL MOVE ON TO A NEW WORD * WHILE SETTING UP THE PERMISSION BITS, CAUSING * TROUBLE. DON-T DO IT. SPACE 2,10 TPNL BSS 0 LOC 0 **** TPNL. OCFL PNL COMPILATION FIELD LENGTH OB PNL OEFL PNL OS PNL OG PNL OLIB PNL OOPT PNL OR PNL OPR PNL 1 *PRINT* FLAG OPU PNL 1 *PUNCH* FLAG OSHOW PNL 1 *SHOW* FLAG OU PNL 1 *UPDATE* FLAG OHELP PNL 1 *HELP* FLAG OMAP PNL OL PNL OLOAD PNL OCOPYL PNL ODEBUG PNL CID/PMD/C5TDMP **** TPNLL BSS 0 LENGTH OF THE TABLE DATA 0 ERRNG 18-TPNLL TOO MANY PARAMETERS LOC *O TPVT SPACE 4,10 ** TPVT - PARAMETER VALUE TABLE. * * CONTAINS THE VALUE OF EACH PARAMETER AND DEFINES * ORIDNALS OF PSEUDO-PARAMETERS SUCH AS THE *RUN* FLAG, * ETC. TPVT BSSZ TPNLL **** PSEUDO PARAMETERS. LOC TPNLL ORUN BSSZ 1 *RUN* FLAG OCOM BSSZ 1 *COMPILE* FLAG OI BSS 1 INPUT FILE FOR CONTROL STATEMENTS ODEST BSSZ 1 DESTINATION FOR PRINT FILES OUI BSS 1 UPDATE INPUT FILE OCB BSS 1 WHERE THE COMPILER-S BINARY GOES ON EQU ORUN *N* FLAG ON RMT ONA EQU OCOM NO *A* FLAG ON RMT OSHORT BSS 1 MAP(SHORT) OPTION **** LOC *O TCFT SPACE 4,10 ** TCFT - CHECK FILE TABLE. * * THIS LITTLE TABLE LISTS THOSE PARAMETERS THAT * SHOULD BE CHECKED FOR ILLEGAL FILE NAMES, AND * SUPPLIES THE ADDRESSES AND LENGTHS OF THE RELATED * ERROR MESSAGES. THE TABLE IS A LIST OF WORDS HAVING * THE FORMAT: * **T 24/MESS,18/LEN,18/ADDR * * WHERE MESS IS THE ADDRESS OF THE ERROR MESSAGE * LEN IS THE LENGTH OF THE ERROR MESSAGE (IN WORDS) * ADDR IS THE ADDRESS OF THE PARAMETER TO CHECK * * NOTE: THE MESSAGE IS PLUGGED WITH THE ERRONEOUS * FILE NAME. THAT IS WHY THE MESSAGE PLUS ONE WORD * IS RESERVED. SPACE 2,5 TCFT BSS 0 **** CFT. OB CHK (ILLEGAL BINARY FILE -) OS CHK (ILLEGAL 'S' TEXT -) OG CHK (ILLEGAL 'G' TEXT -) OLIB CHK (BAD LIBRARY NAME -) OL CHK (ILLEGAL LISTING FILE -) OLOAD CHK (ILLEGAL LOAD FILE -) OCOPYL CHK (ILLEGAL COPYL FILE -) **** DATA 0 TPPT SPACE 4,10 ** TPPT - PERMITED PARAMETER TABLE. * * THIS TABLE GIVES THE PERMITTED SYSTEM/COMMAND PAIRS * AND THE PARAMETERS ALLOWED FOR EACH. THE TABLE IS * CREATED BY THE *RUN*, *COM*, AND *EXE* MACROS. THE * TABLE HAS THE FOLLOWING FORMAT: * **T TPPT 1/R,1/C,1/E,3/,18/RUN,18/COM,18/EXE * * WHERE R - SET IF RUN OK * C - DITTO *COM* * E - DITTO *EXE* * RUN - RUN PERMITTED PARAMETERS (BITS CORRESPOND * TO PARAMETER ORDINALS RELATIVE TO THE * BOTTOM OF THE 18 BIT FIELDS. * COM - DITTO *COMPILE* * EXE - DITTO *EXECUTE* * * THE WORD ORDINAL IN THE TPPT CORRESPONDS TO THE * SYSTEM ORDINAL. TPPT BSSZ SYSN SPACE 2,10 **** TPPT ENTRIES. FORTRAN RUN (B,CFL,EFL,LIB,PR,PU,SHOW,MAP,U,L,LOAD,COPYL) RUN (R,OPT,S,G) RUN (DEBUG) COM (B,CFL,PR,PU,SHOW,U,L,COPYL) COM (R,OPT,S,G) COM (DEBUG) EXE (EFL,LIB,LOAD,MAP) EXE (DEBUG) BASIC RUN (CFL,EFL,U,LIB,LOAD,MAP) COM (CFL,LIB,L,B,PR,PU,U) COMPASS RUN (CFL,S,G,L,B,PR,PU,U,EFL,LIB,LOAD,MAP,COPYL) COM (CFL,S,G,L,B,U,PR,PU,COPYL) EXE (EFL,LIB,LOAD,MAP) SYMPL RUN (U,CFL,EFL,B,L,LIB,LOAD,MAP,PR,PU,COPYL) COM (U,CFL,B,L,PR,PU,COPYL) EXE (EFL,LIB,LOAD,MAP) US ECHO ,P1=(USA,USD,USF,USP) P1 RUN (L,B,CFL,EFL,MAP) COM (L,B,CFL) EXE (EFL,MAP) US ENDD SPACE 4,10 * OTHER SYSTEMS, IF THEY ARE IMPLEMENTED. IF DEF,SFTN FTN 5 FTN RUN (B,CFL,EFL,S,G,LIB,OPT,R,PR,PU,SHOW,MAP,L,LOAD,U,COPYL) RUN (DEBUG) COM (B,CFL,S,G,OPT,R,PR,PU,SHOW,L,U,COPYL) COM (DEBUG) EXE (EFL,LIB,LOAD,MAP) EXE (DEBUG) ENDIF SPACE 2,5 IF DEF,//SCOB COBOL COBOL RUN (CFL,EFL,B,LIB,PR,PU,SHOW,MAP,L,LOAD,COPYL,U) RUN (DEBUG) COM (B,CFL,PR,PU,SHOW,L,COPYL) COM (DEBUG) EXE (EFL,LIB,LOAD,MAP) EXE (DEBUG) ENDIF SPACE 2,5 IF DEF,SPAS PASCAL PASCAL RUN (B,CFL,PR,U,L,EFL,MAP,LIB,LOAD) COM (B,CFL,PR,U,L) EXE (B,EFL,MAP,LIB,LOAD) ENDIF SPACE 2,5 IF DEF,SALG ALGOL ALGOL RUN (CFL,EFL,B,LIB,PR,PU,SHOW,MAP,L,LOAD,COPYL) COM (B,CFL,PR,PU,SHOW,L,COPYL) EXE (EFL,LIB,LOAD,MAP) ENDIF SPACE 2,5 IF DEF,SSNO SNOBOL RUN (I,L,SHOW,CFL,EFL) ENDIF SPACE 2,4 IF DEF,SSCO SCOPE RUN ENDIF SPACE 4,10 ** INSERT LOCAL SYSTEM *RUN*, *COM*, AND *EXE* CALLS HERE. ORG TPPT+SYSN SPACE 2,5 TSST SPACE 4,10 ** TSST - START SKELETON TABLE. * * THIS TABLE CONTAINS THE STARTING ADDRESSES OF EACH * OF THE LEGAL SKELETON SEQUENCES. THE TABLE IS ACTUALLY * CREATED BY THE *RUN*, *COM*, AND *EXE* MACROS. IF A * SYSTEM/COMMAND PAIR IS LEGAL, A LABEL OF THE FORM * * SYS_COM * * IS ASSUMED TO EXIST. THAT ADDRESS IS PLACED IN THIS TABLE. * * THE TABLE HAS ONE WORD FOR EACH SYSTEM WITH THE FORM * **T 24/SYS_RUN,18/SYS_COM,18/SYS_EXE * * THE FIELD CORRESPONDING TO UNDEFINED COMMAND/SYSTEM PAIRS * ARE ZERO, BUT THIS FACT SHOULD BE TRAPPED OUT BEFORE THIS * TABLE IS USED. TSST BSSZ SYSN TSST HERE ORG TSST+SYSN TCSS SPACE 4,10 ** TCSS - CONTROL STATEMENT SKELETONS. * * THIS IS A TABLE OF THE CONTROL STATEMENTS USED IN * RUNNING, COMPILING, AND EXECUTING PROGRAMS IN THE * VARIOUS SYSTEMS. * * EACH CONTROL CARD IS REPRESENTED BY ONE OR MORE * WORDS. EACH WORD CONTAINS UP TO 9 CHARS OF TEXT IN * *L* FORMAT AND A SIX-BIT CODE IN THE BOTTOM OF THE * WORD. THESE CODES ARE * * CODE MEANING * ---- ------- * 0-67 ORDINAL* * 70 NULL * 71 END OF CONTROL STATEMENT * 72 SKIP/USE WORD** * 73 END OF SKELETON/USE BLOCK * * WHERE ORDINAL IS THE *RCE* ORDINAL OF THE PARAMETER * THAT IS TO BE INSERTED * SKIP/USE WORD IS A SPECIAL CONDITIONAL/ * 'SUBCSS' FLAG FOR CONDITIONALLY ASSEMBLING A * CONTROL STATEMENT * * * A SKIP/USE WORD HAS THE FOLLOWING FORMAT * **T 36/SUB-CSS,18/ORDINAL+100B,6/72B * * WHERE SUB-CSS IS THE ADDRESS OF A SUB-SKELETON * ORDINAL IS A CONDITIONAL ORDINAL * * THIS WORD INDICATES EITHER A SUB-CSS OR A CONDITIONAL * CONTROL CARD OR A CONDITIONAL SUB-CSS. THE ORDINAL IS THE * ORDINAL OF A VALUE IN *TPVT* THAT MUST BE NON-ZERO IF THE * CONTROL STATEMENT IS TO BE CREATED. ACTUALLY, THIS FIELD * IS THE ORDINAL PLUS 100B OR ZERO IF NO CONDITION INDICATED. * * * * EXAMPLE: THE FOLLOWING *CSS* CALLS ... * * CSS (REWIND,),I,(,),L,(.) * LIB CSS (LDSET,LIB=),LIB,(.) * CSS (PROG,I=),I,(,L=),L,(.) * * WOULD GENERATE THE FOLLOWING WORDS: * **T 54/ R E W I N D *,6/16 **T 54/ *,6/13 **T 54/ .,6/71 **T 36/,18/05,6/72 **T 54/ L D S E T * L I B,6/70 **T 54/ =,6/05 **T 54/ P R O G * I =,6/16 **T 54/ * L =,6/13 **T 54/ .,6/73 * * WHERE A (*) REPLACES A (,) DUE TO *DOCK* RESTRICTIONS * * * IF I=INPUT,L=OUTPUT,LIB=LIB * * THE FOLLOWING CARDS WOULD BE PRODUCED * * REWIND,INPUT,OUTPUT. * LDSET,LIB=LIB. * PROG,I=INPUT,L=OUTPUT. SPACE 4,10 ** CONTROL STATEMENT SKELETONS. CSSDEF (FORRUN,FORCOM) FTN 4 U CSSUSE RCEUP CSS (REWIND,),I,(,),L,(,),CB,(.) CFL CSS (RFL,),CFL,(.) DEBUG CSS (FTN,A,I=),I,(,L=),L,(,B=),CB,(,OPT=),OPT,(,R=),R,(,S=) ,,S,(,G=),G,(,PMD.) DEBUG CSS ("GOTODBG1") CSS (FTN,A,I=),I,(,L=),L,(,B=),CB,(,OPT=),OPT,(,R=),R,(,S=) ,,S,(,G=),G,(.) DEBUG CSS ("DBG1") COPYL CSSUSE RCECOPYL PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") COM CSSUSE RCERST CSS ("EXIT") PR CSSUSE RCEPRINT CSS (ERRFTN,),L,(,"OFILE".) CSSUSE RCERST2 CSSDEF (FOREXE) CSS ("EXE") DEBUG CSSUSE RCEDEBUG DEBUG CSS ("GOTODBG2") CSSUSE RCEEXE DEBUG CSS ("DBG2") CSSUSE RCERST2 CSSEND SPACE 2,5 CSSDEF (BASRUN) U CSSUSE RCEUP CSS (REWIND,),I,(.) IFNOSBE 1 CSS (RFL,40000.) CFL CSS (RFL,),CFL,(.) LIB CSS (LDSET,LIB=),LIB,(.) CSS (BASIC,I=),I,(,E="OFILE".) CSSUSE RCERST2 CSSEND SPACE 2,5 CSSDEF (BASCOM) U CSSUSE RCEUP CSS (REWIND,),I,(,),B,(,),L,(.) IFNOSBE 1 CFL CSS (RFL,),CFL,(.) EFL CSS (RFL,),EFL,(.) LIB CSS (LDSET,LIB=),LIB,(.) CSS (BASIC,I=),I,(,L=),L,(,E="OFILE",B=),B,(.) PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH CSSUSE RCERST2 CSSEND SPACE 2,5 CSSDEF (COMRUN,COMCOM) U CSSUSE RCEUP CSS (REWIND,),I,(,),L,(,),CB,(.) CFL CSS (RFL,),CFL,(.) CSS (COMPASS,A,O=0,I=),I,(,L=),L,(,S=),S,(,G=),G,(,B=),CB,( ,.) COPYL CSSUSE RCECOPYL PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") CSSUSE RCERST CSS ("EXIT") PR CSSUSE RCEPRINT CSS (ERRCOM,),L,(,"OFILE".) CSSUSE RCERST2 CSS ("EXE") CSSDEF (COMEXE) CSSUSE RCEEXE CSSUSE RCERST2 CSSEND SPACE 4,10 US ECHO ,P1=(USA,USD,USF,USP) CSSDEF (_P1_RUN) CSS (BEGIN,RUN_P1,,),I,(,),L,(,),B,(,),CFL,(,),EFL,(,),MAP, ,(.) CSSUSE RCERST2 CSSEND CSSDEF (_P1_COM) CSS (BEGIN,COM_P1,,),I,(,),L,(,),B,(,),CFL,(.) CSSUSE RCERST2 CSSEND CSSDEF (_P1_EXE) CSS (BEGIN,EXE_P1,,),B,(,),EFL,(,),MAP,(.) CSSUSE RCERST2 CSSEND US ENDD SPACE 4,10 IF DEF,//SCOB COBOL 5 CSSDEF (COBRUN,COBCOM) U CSSUSE RCEUP CSS (SENSEQ,),I,(,"XFILE",C.) CSS (REWIND,"XFILE",),L,(,),CB,(.) CFL CSS (RFL,),CFL,(.) CSS ("CONOUT") DEBUG CSS (COBOL5,I="XFILE",L=),L,(,B=),CB,(,PSQ,LO=R/S,ET=F,EL=W ,,DB=B/DL/RF/SB/TR,TDF.) DEBUG CSS ("GOTODBG1") CSS (COBOL5,I="XFILE",L=),L,(,B=),CB,(,PSQ,LO=R/S,ET=F,EL=W ,.) DEBUG CSS ("DBG1") COPYL CSSUSE RCECOPYL PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") COM CSSUSE RCERST CSS ("EXIT") PR CSSUSE RCEPRINT CSSUSE RCERST2 CSSDEF COBEXE CSS ("EXE") DEBUG CSSUSE RCEDEBUG DEBUG CSS ("GOTODBG2") CSSUSE RCEEXE DEBUG CSS ("DBG2") CSSUSE RCERST2 CSSEND ENDIF SPACE 2,10 IF DEF,//SFTN FTN 5 CSSDEF (FTNRUN,FTNCOM) U CSSUSE RCEUP CFL CSS (RFL,),CFL,(.) CSS (SENSEQ,),I,(,"XFILE",F.) CSS (REWIND,),L,(,),CB,(.) DEBUG CSS (FTN5,I="XFILE",L=),L,(,B=),CB,(,OPT=),OPT,(,S=),S,(,G= ,),G,(,SEQ,EL=W,ET=F,DB.) DEBUG CSS ("GOTODBG1") CSS (FTN5,I="XFILE",L=),L,(,B=),CB,(,OPT=),OPT,(,S=),S,(,G= ,),G,(,SEQ,EL=W,ET=F.) DEBUG CSS ("DBG1") COPYL CSSUSE RCECOPYL PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") COM CSSUSE RCERST CSS ("EXIT") PR CSSUSE RCEPRINT CSSUSE RCERST2 CSSDEF (FTNEXE) CSS ("EXE") DEBUG CSSUSE RCEDEBUG DEBUG CSS ("GOTODBG2") CSSUSE RCEEXE DEBUG CSS ("DBG2") CSSUSE RCERST2 CSSEND ENDIF SPACE 2,5 IF DEF,SSYM SYMPL CSSDEF (SYMRUN,SYMCOM) U CSSUSE RCEUP CSS (REWIND,),I,(,),L,(,),B,(.) CFL CSS (RFL,),CFL,(.) CSS (SYMPL,I=),I,(,S=SYSMISC/SYSIO,B=),CB,(,A,F,LR=),L,(.) COPYL CSSUSE RCECOPYL PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") COM CSSUSE RCERST CSS ("EXIT") CSSUSE RCERST CSS ("EXE") CSSDEF (SYMEXE) CSSUSE RCEEXE CSSUSE RCERST2 CSSEND SPACE 2,5 IF DEF,SALG ALGOL CSSDEF (ALGRUN,ALGCOM) CSS (REWIND,),I,(,),L,(,),CB,(.) CFL CSS (RFL,),CFL,(.) CSS (ALGOL5,I=),I,(,L=),L,(,B=),CB,(,ET=F,RES.) COPYL CSSUSE RCECOPYL PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") COM CSSUSE RCERST CSS ("EXIT") PR CSSUSE RCEPRINT IFNOSBE CSSUSE RCEERROR CSS (ERRORS,ALGOL.) ENDIF CSSUSE RCERST2 CSSDEF (ALGEXE) CSS ("EXE") CSSUSE RCEEXE CSS (REDUCE.) CSSUSE RCERST2 CSSEND ENDIF IF DEF,SPAS PASCAL 2 CSSDEF (PASRUN,PASCOM) U CSSUSE RCEUP CSS (REWIND,),I,(,),L,(,),B,(.) CSS (SENSEQ,),I,(,"XFILE",P.) CFL CSS (RFL,),CFL,(.) CSS (PASCAL,"XFILE",),L,(,),B,(.) IFNOS 1 PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH RUN CSS ("GOTOEXE") COM CSSUSE RCERST CSS ("EXIT") IFNOS 1 PR CSSUSE RCEPRINT PU CSSUSE RCEPUNCH CSS (ERRPAS,),L,(,"OFILE".) CSSUSE RCERST2 CSS ("EXE") SPACE 2,4 CSSDEF PASEXE CSSUSE RCEEXE CSSUSE RCERST2 CSSEND ENDIF SPACE 2,4 IF DEF,SSNO CSSDEF SNORUN CSS (REWIND,),I,(,),L,(.) CFL CSS (RFL,),CFL,(.) EFL CSS (RFL,),EFL,(.) CSS (SNOBOL,I=),I,(,L=),L,(.) CSSUSE RCERST2 CSSEND **** SPACE 4,10 **** SUB-SKELETONS. CSSDEF RCEUP CSS (REWIND,),UI,(,),I,(.) CSS (UPDATE,I=),UI,(,Q,L=1,C=),I,(,O="OFILE".) CSS ("GOTOUPOK") CSS ("EXIT") CSS ( "LOADFILE",RST.) CSS ("UPOK") CSSEND CSSDEF RCEPRINT CSS (REWIND,),L,(,"BFILE".) CSS (COPY,),L,(,"BFILE".) CSS ("PRINT") CSSEND CSSDEF RCEPUNCH CSS (REWIND,),B,(,"BFILE".) CSS (COPY,),B,(,"BFILE".) CSS ("PUNCHB") CSSEND CSSDEF RCERST CSS ( "LOADFILE",RST.) CSSEND CSSDEF RCERST2 IFNOSBE CSS (EXIT,U.) CSS ("LOADFILE",RST.) ELSE CSS ( "LOADFILE",RST.) CSS (EXIT.) CSS ( "LOADFILE",RST.) ENDIF CSSEND IFNOSBE CSSDEF RCEERROR CSS (REWIND,),L,(,"BFILE".) CSS (COPY,),L,(,"BFILE".) CSS (REWIND,),L,(,"BFILE".) CSSEND ENDIF CSSDEF RCEEXE IFNOS 1 EFL CSS (REDUCE,-.) SHORT CSS (REWIND,"SFILE","XFILE".) EFL CSS (RFL,),EFL,(.) MAP CSS (LDSET,MAP=),MAP,(/"OFILE".) SHORT CSS (LDSET,MAP=B/"XFILE".) LIB CSS (LDSET,LIB=),LIB,(.) LOAD CSS (LOAD,),LOAD,(.) SHORT CSS (LOAD,),B,(.) SHORT CSS (NOGO,"SFILE".) SHORT CSS ( "LOADFILE",ERRORS,MAP,"XFILE".) SHORT CSS ("SFILE".) SHORT CSS ("GOTODONE") CSS B,(.) SHORT CSS ("DONE") CSSEND MAPFILE MICRO 1,, ZZZZZMP LFN OF LOAD MAP IFF *DEBUG* CSSDEF RCEDEBUG IFNOS 1 EFL CSS (REDUCE,-.) CSS (UNLOAD,PMDUMP.) SHORT CSS (REWIND,"SFILE","MAPFILE".) EFL CSS (RFL,),EFL,(.) MAP CSS (LDSET,MAP=),MAP,(/"OFILE".) SHORT CSS (LDSET,MAP=B/"MAPFILE".) LIB CSS (LDSET,LIB=),LIB,(.) LOAD CSS (LOAD,),LOAD,(.) SHORT CSS (LOAD,),B,(.) SHORT CSS (NOGO,"SFILE".) SHORT CSS ( "LOADFILE",ERRORS,MAP,"MAPFILE".) SHORT CSS ("SFILE",*OP=),DEBUG,(.) SHORT CSS ("GOTODONE") CSS B,(,*OP=),DEBUG,(.) CSS ("GOTODONE") CSS ("EXIT") CSS ("DONE") CSS (IFE,FILE(PMDUMP,AS),PMD.) CSS (REWIND,PMDUMP.) CSS (COPY,PMDUMP,),L,(.) CSS (ENDIF,PMD.) CSSEND CSSDEF RCECOPYL CSS (REWIND,),B,(,),CB,(,),COPYL,(.) CSS (COPYL,),COPYL,(,),CB,(,),B,(.) CSSEND **** SPACE 4,10 * OTHER DATA VALUES RCEA BSS 1 INPUT POINTER RCEB BSS 1 DISPLAY FILE NAME RCEC DATA 0 FILE TO SAVE TO OR ZERO RCED BSS 1 SYSTEM RCEE BSS 1 SCRATCH WORD RCEF DIS 3, FILENAM 12:34 FORTRAN RCEG BSS 1 (OPT3)*18 RCEH BSS 0 MAP CONVERSION TABLE CON 3LOFF+3RN CON 4LPART+3RB CON 2LON+3RSBX DATA 0 IFNOSBE RCEI BSS 0 DIS ,* "LOADFILE",RST.* DIS ,*EXIT,S.* DIS ,* "LOADFILE",RST.* DATA 0 RCEJ DIS ,* NN WORDS TOO LONG* (MUST FOLLOW *RCEI*) ENDIF RCEK BSSZ 2 BINARY *CFL* AND *EFL* RCEL DATA 20H UNKNOWN PARAMETER-- BSS 1 CON 0 RCEM DATA 40H BAD PARAMETER FOR THIS COMMAND/SYSTEM-- BSS 1 CON 0 RCEN DATA 30H PROBLEMS W/EQUAL SIGN AFTER-- BSS 1 CON 0 RCEO BSS 1 SAVE COMMAND PARAMETER PERMISSION BITS CSB BSS NCSB CONTROL STATEMENT BUFFER SPACE 4,10 * GET A FILE NAME OR PARAMETER RCE SA1 INC SAVE THE INPUT POINTER BX6 X1 SA6 RCEA RCE1 GNA FN ZR B7,RCE4 IF EOL, USE ALL THE DEFAULTS SX0 B7-3 ZR X0,RCE1 IGNORE LEADING DELIMETERS * ASSUME THE PARAMETER IS A PERMITTED *RCE* PARAMETER. * IF NOT, ASSUME IT IS A FILE NAME. BX1 X6 MX0 42 SB7 TPNL ADDRESS OF POSSIBLE PARAMETERS RJ SLS SEARCH LIST ZR X6,RCE2 IF NOT FOUND, ASSUME FILE NAME * CHECK PERMISSION BITS FOR THIS PARAMETER. IF NOT LEGAL, * ASSUME A FILE NAME. SA1 SYS SA5 X1+TPPT READ PERMISSION WORD FOR CURRENT SYSTEM SA1 COMMON COMMAND ORDINAL (0-2) LX4 X1,B1 * 2 SB7 B7-TPNL (B7) = PARAMETER ORDINAL LX1 4 * 16 IX4 X1+X4 * 18 SB3 X4+6+18 LX5 B3 PERMISSION BITS (17-0) FOR COMMAND SB3 -B7 SB3 59+B3 LX5 B3 POSITION PERMISSION BIT FOR PARAMETER MI X5,RCE3 IF A PERMITTED PARAMETER RCE2 BSS 0 SA1 RCEA BX6 X1 SA6 INC BACKUP INPUT CURSOR SB7 B0 SEE IF AN EXISTING FILE SB6 B1+B1 OKAY IF FILE NOT FOUND RJ GFI GET FILE INFORMATION EQ B7,B1,CCCX IF ERROR SA1 GFIJ ZR X1,RCE4 IF USE THE CURRENT FILE ZR B7,RCE5 IF FILE FOUND, USE IT RCE3 BSS 0 SA1 RCEA BX6 X1 SA6 INC RESTORE PREVIOUS INPUT CURSOR RCE4 BSS 0 USE CURRENT FILE RJ VCF VERIFY CURRENT FILE EXISTS NZ B7,CCCX IF NONE, ERROR MOVE FITL,FIT,TFIT USE CURRENT FILE STUFF SA1 TFIT+VFST MX0 42 BX6 X0*X1 SA6 RCEB DISPLAY FILE NAME SA1 =0L"SFILE" BX6 X1 SA6 OI+TPVT ACTUAL FILE NAME SA6 RCEC FILE TO SAVE TO EQ RCE5.1 RCE5 BSS 0 SA1 TFIT+VFST MX0 42 BX6 X0*X1 SA6 OI+TPVT SETUP FILE NAME SA6 RCEB RCE5.1 BSS 0 SETUP PARAMETERS SA1 TFIT+VFST GET SYSTEM SX6 X1 SA6 RCED ECHO 3,P1=(VSTT,VGTT,VLIT,VBFT),P2=(OS,OG,OLIB,OB) SA1 TFIT+P1 BX6 X1 SA6 P2+TPVT * IF WE NEED A BINARY FILE, GENERATE ONE BY CORRUPTING THE * FILE HE IS USING BY ADDING TWO *X*S TO THE BEGINNING OF * THE FILE NAME AND TRUNCATING TO 7 CHARACTERS. SA1 TFIT+VBFT BX6 X1 NZ X1,RCE6 IF WE HAVE ONE ALREADY SA1 RCEB ADD ZZ AND TRUNCATE MX0 42 BX6 X0*X1 SX1 2RXX BX6 X6+X1 LX6 -2*6 BX6 X0*X6 SA6 TFIT+VBFT RCE6 SA6 OB+TPVT SA6 OCB+TPVT SA2 =1L0 SA1 TFIT+VFLT+1 BX3 X2-X1 ZR X3,RCE7 IF NO EFL BX6 X1 SA6 OEFL+TPVT SAVE IT RCE7 SA1 TFIT+VFLT BX3 X2-X1 ZR X3,RCE8 IF NO CFL BX6 X1 SA6 OCFL+TPVT SAVE IT RCE8 SA1 =0L"IP.OPT" BX6 X1 SA6 OOPT+TPVT SA1 =0L"IP.R" BX6 X1 SA6 OR+TPVT BX6 X6-X6 SA6 OPR+TPVT SA6 OPU+TPVT SA6 OSHOW+TPVT SA6 OMAP+TPVT SA6 OU+TPVT SA6 OSHORT+TPVT SA6 OUI+TPVT SA6 OHELP+TPVT SA6 ODEBUG+TPVT INITIALIZE DEBUG = OFF SA1 =0L"LFILE" BX6 X1 SA6 OL+TPVT SA1 TFIT+//VLOT BX6 X1 SA6 OLOAD+TPVT SA1 TFIT+VCLT BX6 X1 SA6 OCOPYL+TPVT SPACE 4,10 * CHECK FOR A LEGAL SYSTEM/COMMAND PAIR SA1 RCED SA5 TPPT+X1 GET PERMISSION WORD BX4 X5 LX5 6 SA1 COMMON LX6 X1,B1 *2 LX1 4 *16 IX6 X6+X1 *18 SA6 RCEG SB7 X6+18 LX5 B7 POSITION PERMISSIONS FOR THIS COMMAND/SYSTE MX0 -18 BX6 -X0*X5 SA6 RCEO SAVE PERMISSION BITS FOR LATER SA2 COMMON GET COMMAND ORDINAL SB7 X2 LX4 B7 NG X4,RCE9 IF PAIR IS LEGAL PRINT (COMMAND ILLEGAL IN THIS SYSTEM) PRINT ( ) EQ CCCX * READ AND SET PARAMETERS RCE9 GNA FN JP B7+1+RCE10 RCE10 JP RCE11 IF ILLEGAL JP RCE21 IF EOF JP RCE12 IF ALPHA JP RCE11 IF ILLEGAL (NUMERIC) JP RCE9 IF DELIMITER, SKIP RCE11 PRINT (BAD PARAMETER FOUND) PRINT ( ) EQ CCCX * GET A PARAMETER, SEARCH FOR IT RCE12 SB7 TPNL MX0 42 BX1 X6 SA6 RCEL+2 PLUG... SA6 RCEM+4 ...ERROR... SA6 RCEN+3 ...MESSAGES RJ SLS SEARCH LIST NZ X6,RCE13 IF PARAMETER FOUND WRITEC O,RCEL PRINT ( ) EQ CCCX EXIT RCE13 BSS 0 SA1 RCEO BX0 X1 CHECK PERMISSIONS FOR THIS PARAMETER LX0 -18 SB6 B7-TPNL GET THE PARAMETER ORDINAL SB6 B6+42 WE MUST LX0 59-(42+B6) SB6 -B6 SB6 59+B6 LX0 B6 POSITION PERMISSION BIT NG X0,RCE14 IF OK WRITEC O,RCEM PRINT ( ) EQ CCCX RCE14 SB6 X6 SAVE PARAMETER ADDRESS SB2 B7 ZR B6,RCE15 IF = EXPECTED SX6 B1 SET PARAM SA6 B7-TPNL+TPVT EQ RCE9 RCE15 GNA NUM,AO SX0 B7-3 NZ X0,RCE16 IF NOT DELIMITER SX0 X6-1R= ZR X0,RCE17 IF = SX0 X6-1R- ZR X0,RCE17 IF - RCE16 BSS 0 WRITEC O,RCEN EQ CCCX RCE17 GNA FN JP B7+1+RCE18 RCE18 JP RCE16 ERROR JP RCE19 EOL JP RCE20 ALPHA JP RCE20 NUMERIC JP RCE19 DELIMITER RCE19 BX6 X6-X6 CLEAR PARAMETER RCE20 SA6 B2-TPNL+TPVT EQ RCE9 NEXT PARAMETER SPACE 4,10 * CHECK THE PARAMETERS - MAKE SURE THEY ARE WHAT THEY * SHOULD BE. RCE21 SX6 TCFT SA6 RCEE SET LOOP ADDR RCE22 SA1 RCEE FILE-CHECKING LOOP SX6 X1+B1 SA6 A1 SA5 X1 ZR X5,RCE23 IF END OF TABLE SA1 X5 CHECK THE FILE NAME ZR X1,RCE22 IF NONE BX2 X1 LX2 6 SX2 X2-1R0 ZR X2,RCE22 IF *0* RJ VFN VALIDATE FILE NAME ZR X6,RCE22 IF FILE IS OK SA5 RCEE RE-READ THE WORD. (X5) KILLED BY *VFN* SA5 X5-1 (X5) = *TCFT* ENTRY AX5 18 SB7 X5 LENGTH OF ERROR MESSAGE IN WORDS AX5 18 BX6 X1 SET FILE NAME IN MESSAGE SA6 X5+B7 AT LAST WORD OF MESSAGE WRITEC O,X5 PRINT ( ) EQ CCCX * CHECK THE OTHER PARAMETERS RCE23 SA5 OCFL+TPVT ZR X5,RCE24 IF NO *CFL* SB7 B0 OCTAL CONVERSION RJ DXB NZ X4,RCE25 IF ILLEGAL SA6 RCEK SAVE BINARY CFL RCE24 SA5 OEFL+TPVT ZR X5,RCE26 IF NO *EFL* SB7 B0 OCTAL CONVERSION RJ DXB NZ X4,RCE25 IF ILLEGAL SA6 RCEK+1 SAVE BINARY EFL EQ RCE26 RCE25 PRINT (ILLEGAL FIELD LENGTH) PRINT ( ) EQ CCCX EXIT RCE26 SA1 OMAP+TPVT CONVERT THE MAP PARAMETER ZR X1,RCE27 IF NONE GIVEN * CONVERT THE MAP DESIGNATOR (ON,OFF,PART) TO THE * GIVEN *LDSET,MAP=* LETTER(S). IF NOT MATCH IS FOUND * WE USE WHATEVER THE USER SUPPLIED, ASSUMING HE KNOWS * WHAT MAP LETTERS HE WANTS. SB7 RCEH MX0 6*7 RJ SLS SEARCH LIST ZR X6,RCE27 IF NOT FOUND, LEAVE ALONE SX6 X6 EXTRACT LDSET EQUIVALENT LX6 -3*6 SA6 OMAP+TPVT RCE27 BSS 0 RJ PHI PRINT HELP INFORMATION SPACE 4,10 * THE PARAMETERS ARE NOW SET UP AND VERIFIED. * UPDATE ALL THE DEFAULTS. SA1 RCEC ZR X1,RCE28 IF NOT CURRENT FILE, DONT UPDATE SA1 OB+TPVT BINARY FILE NAME BX7 X1 SA7 FIT+VBFT SA1 RCEK UPDATE CFL RJ COD CONVERT TO DISPLAY SB2 B2-B1 SET UP MASK MX0 1 AX0 B2 BX7 X0*X4 JUST THE DISPLAY CODE SA7 FIT+VFLT SA1 RCEK+1 UPDATE EFL RJ COD CONVERT TO DISPLAY CODE SB2 B2-B1 SET UP MASK MX0 1 AX0 B2 BX7 X0*X4 JUST THE DISPLAY CODE SA7 FIT+VFLT+1 SA1 OS+TPVT STEXT BX7 X1 SA7 FIT+VSTT SA1 OG+TPVT GTEXT BX7 X1 SA7 FIT+VGTT SA1 OLIB+TPVT BX7 X1 SA7 FIT+VLIT SA1 OB+TPVT BX6 X1 SA6 OCB+TPVT SA1 OCOPYL+TPVT BX6 X1 SA6 FIT+VCLT SA1 OLOAD+TPVT BX6 X1 SA6 FIT+//VLOT SPACE 2,5 * SAVE THE CURRENT FILE, IF NEEDED SA1 COMMON GET COMMAND ORDINAL SX0 X1-VEXT SEE IF EXECUTE ZR X0,RCE28 IF EXECUTE, DO NOT SAVE CURRENT FILE SA1 RCEC SX0 B1 BX6 X1+X0 SA6 S SA1 SYS SX6 X1 SA6 SCFE BX6 X6-X6 SA6 TLNRL RJ SCF SAVE CURRENT FILE SPACE 2,5 * PRINT THE HEADER * * FILE TIME SYSTEM RCE28 SA1 RCEB RJ SZC SPACE-FILL ZERO CHARACTERS LX6 -6 SA6 RCEF CLOCK RCEF+1 GET CURRENT TIME SA1 RCEF+1 FORMAT THE TIME SA2 =77777700777700000000B SA3 =4R BX6 X2*X1 BX6 X6+X3 SX3 1R"COLON" LX3 6*6 BX6 X6+X3 ADD COLON SA6 A1 SA1 RCED GET SYSTEM SB2 X1 LX1 2 *4 SX1 X1+B2 *5 SA1 SYST+X1 GET SYSTEM NAME MX0 42 BX6 X0*X1 SA6 A6+B1 PRINT ( ) PRINT ( ) WRITEC O,RCEF PRINT HEADER PRINT ( ) SPACE 2,5 * SWAP PARAMETERS IF *UPDATE* MODE SA1 OU+TPVT ZR X1,RCE29 IF NOT UPDATE SA1 OI+TPVT BX6 X1 SA6 OUI+TPVT SET THE UPDATE INPUT FILE SA1 =0LCOMPILE SET THE COMPILER INPUT FILE BX6 X1 SA6 OI+TPVT * SWAP PARAMETERS IF COPYL RCE29 SA1 OCOPYL+TPVT ZR X1,RCE30 IF NOT COPYL SA1 =0L"XFILE" TEMPORARY BINARY FILE BX6 X1 SA6 OCB+TPVT * PROCESS MAP=SHORT RCE30 SA1 OMAP+TPVT ZR X1,RCE31 IF NO MAP SA2 =5LSHORT IX0 X1-X2 NZ X0,RCE31 IF NOT SHORT BX6 X6-X6 ZERO MAP SA6 A1 SA1 =0L"SFILE" BX6 X1 SA6 OSHORT+TPVT RCE31 BSS 0 SPACE 2,5 * IF SYSTEM SCOPE, GO PROCESS SCOPE. OTHERWISE, * WE ASSEMBLE THE CONTROL CARDS FROM THE CONTROL CARD * SKELETONS AND EXECUTE THEM. RJ CPD CHECK POINT DUMP IF DEF,SSCO SA1 RCED CHECK SYSTEM SX0 X1-SSCO ZR X0,RCE33 IF SCOPE, RUN SCOPE FILE. ENDIF SA1 RCED GET THE ADDR OF THE SKELETONS SA2 X1+TSST LX2 6+18 SA1 RCEG SB7 X1 LX2 B7 POSITION ADDRESS SB7 X2 RJ ACS ASSEMBLE CONTROL STATEMENTS SX0 B7-CSB+1-NCSB-1 PL X0,RCE32 IF TOO MANY WORDS IN BUFFER ECS CSB,B7+1 RCE32 PRINT (TOO MANY OPTIONS SELECTED) EQ CCCX EXIT SPACE 2,5 IF DEF,SSCO * RUN/EXECUTE IN SYSTEM SCOPE * * READ THE FILE (OI+TPVT) IN, ADD OUR RESTART CONTROL CARDS, * AND EXECUTE THE BUNCH. AN ERROR MESSAGE IS ISSUED IF THE * FILE IS TOO LONG TO FIT IN THE BUFFER. RCE33 SA1 OI+TPVT SET UP THE FET SX0 B1 BX6 X1+X0 SA6 S REWIND S,R READ S READW S,CSB,RCEI-RCEJ+NCSB READ THE FILE ZR X1,RCE34 IF TOO LONG SX6 B6+RCEJ-RCEI SA6 RCEA SAVE THE NUMBER OF WORDS MOVE RCEJ-RCEI,RCEI,B6 MOVE THE RESTART CONTROL STATEMENTS SA5 RCEA ECS CSB,X5+1 EXECUTE CONTROL STATEMENTS * TOO MANY WORDS...TELL HIM HOW MANY IS TOO MANY. RCE34 READW S,CSB,NCSB NZ X1,RCE35 IF LESS THAN 64 WORDS TOO MANY PRINT (SCOPE FILE IS MUCH TOO LONG) EQ CCCX RCE35 SX1 B6-CSB HOW MANY TOO BIG RJ CDD CONVERT DECIMAL DIGITS LX6 7*6 MX0 3*6 BX6 X0*X6 SA1 RCEJ BX1 -X0*X1 BX6 X6+X1 FORM MESSAGE SA6 A1 WRITEC O,RCEJ * NN WORDS TOO LONG* EQ CCCX SCOEXE EQU *+400000B SCORUN EQU *+400000B ENDIF TITLE 3,0 OVERLAY - SUBROUTINES. ** ACS - ASSEMBLE CONTROL STATEMENTS. * * THIS ROUTINE ASSEMBLES ONE OR MORE CONTROL STATEMENTS * FROM SKELETONS AND PARAMETERS. * * ENTRY B7 = FWA OF SKELETONS * * EXIT CSB IS START OF CONTROL STATEMENTS * B7 _ END OF CONTROL STATEMENTS * * USES ALL * * CALLS PUT, PKS, WTS ACS7 SA1 OSHOW+TPVT ZR X1,ACS8 IF NO *SHOW* PRINT (--- END ---) PRINT ( ) KR IFNOS 1 WRITER O,R ACS8 SA1 ACSD BX6 X6-X6 SA6 X1 SB7 A6 ACS SUBR SX6 B7 SET SKELET-IN POINTER SA6 ACSA SA1 OSHOW+TPVT ZR X1,ACS0.5 IF NO SHOW PRINT (--- STATEMENTS GENERATED ---) ACS0.5 BX6 X6-X6 SA6 ACSB SET *USE* ADDR SX6 CSB SA6 ACSD PUTI X6 SET PUT FWA = *CSB* SB2 B1 INITIALIZE *STCOL* * PROCESS NEXT WORD ACS1 SA1 ACSA GET NEXT WORD SX6 X1+B1 SA6 A1 SA1 X1 MX0 -6 EXTRACT THE CODE AND SAVE IT BX6 -X0*X1 SA6 ACSC SX7 X6-72B ZR X7,ACS3 IF SKIP/USE SX7 X6-73B ZR X7,ACS6 IF END OF SKELETON * PUT THE TEXT INTO JN BX1 X0*X1 EXTRACT THE TEXT PART PUTF X1,,Z,B2 SB2 B6 NEXT *STCOL* SA1 ACSC CHECK FOR ORDINAL TO USE SX0 X1-70B ZR X0,ACS1 IF NULL ORDINAL SX0 X1-71B ZR X0,ACS2 IF END OF CONTROL STATEMENT * PACK THE CONTENTS OF THE GIVEN ORDINAL SA1 TPVT+X1 GET WORD PUTF X1,,Z,B2 SB2 B6 NEXT *STCOL* EQ ACS1 * PROCESS END OF CONTROL STATEMENT. ACS2 BSS 0 PUTZ PUT EOL SA5 ACSD (X5) = FWA OF THIS CONTROL STATEMENT SX6 A6+B1 SA6 A5 ADDRESS OF NEXT STATEMENT IN *CSB* PUTI X6 SET NEW PUT FWA SB2 B1 INITIALIZE *STCOL* SA1 OSHOW+TPVT ZR X1,ACS1 IF NO *SHOW* SX6 1R CARRIAGE CONTROL SB6 X5 SET FWA OF CODED LINE SB7 JN SET ADDRESS FOR SHIFTED LINE RJ SCL SHIFT CODED LINE PRINTC JN DISPLAY CONTROL STATEMENT SB2 B1 RE-INIT (B2) KILLED BY *WTC=* EQ ACS1 START ANEW * USE/SKIP CODE ACS3 AX1 6 ZR X1,*+400000B THERE MUST BE SOMETHING THERE SX2 X1 X2 = SKIP ORDINAL AX1 18 X1 = USE ADDRESS ZR X2,ACS5 IF NO SKIP ORDINAL, *USE* SA2 X2-100B+TPVT NZ X2,ACS5 IF PARAMETER IS THERE * WE MUST SKIP. IF *USE*, JUST IGNORE THE PRESENT * WORD. OTHERWISE, SKIP THE FOLLOWING CONTROL STATEMENT. NZ X1,ACS1 IF SKELETON, IT IS SKIPPED MX0 -6 SKIP OUT NEXT CONTROL STATEMENT SA1 ACSA ACS4 SA2 X1 BX2 -X0*X2 SX1 X1+B1 SX2 X2-71B NZ X2,ACS4 IF NOT END OF CARD BX6 X1 SA6 A1 EQ ACS1 NEXT CONTROL CARD * PROCESS *USE*, IF REQUESTED ACS5 ZR X1,ACS1 IF NO USE SA2 ACSB NZ X2,*+400000B IF *USE* IS 2 DEEP BX6 X1 SA1 ACSA SA6 A1 SET ACSA = USE ADDRESS BX6 X1 SAVE RETURN ADDRESS SA6 A2 EQ ACS1 * END OF SKELETON OR *USE* ACS6 SA1 ACSB ZR X1,ACS7 IF END OF IT ALL BX6 X1 SA6 ACSA RESTORE ACSA BX6 X6-X6 TURN OFF *USE* SA6 A1 EQ ACS1 ACSA BSS 1 _ CURRENT SKELETON WORD ACSB BSS 1 _ *USE* RETURN WORD OR ZERO ACSC BSS 1 HAS CURRENT CODE ACSD BSS 1 _ NEXT WORD IN CSB PAI SPACE 4,10 ** PHI - PRINT HELP INFORMATION. * * IF *HELP* WAS SPECIFIED, PRINT THE PERMITTED PARAMETERS * FOR THE SELECTED COMMAND/SYSTEM. * * ENTRY (RCEG) HAS (OPT3)*18 * (RCED) HAS SYSTEM ORDINAL * * USES ALL * * CALLS PUT, PRINTS PHI SUBR SA1 OHELP+TPVT ZR X1,PHIX IF NOT HELP, EXIT SA1 RCED GET PERMISSION BITS SA2 X1+TPPT SA1 RCEG POSITION THE BITS SB7 X1+6+18 LX6 X2,B7 PUT THEM IN THE L/O BITS SA6 PHIA SAVE PERMISSIONS BX6 X6-X6 CURRENT ORDINAL SA6 PHIB PRINT ( ) PUTI JN SET PUT FWA PUTT (ALLOWED: ),2 PHI1 SA1 PHIA CHECK NEXT PERMISSION SA2 PHIB GET ORDINAL TO CHECK SB7 X2 COMPUTE SHIFT SB7 -B7 SB7 59+B7 LX1 B7 POSITION THE BIT PL X1,PHI2 IF NOT ALLOWED SA3 X2+TPNL GET PARAMETER NAME MX0 42 BX1 X0*X3 PUTF X1,,Z,B6+B1 PUT THE PERMITTED PARAMETER SA2 PHIB PHI2 SX7 X2+B1 NEXT ORDINAL SA7 PHIB SX0 X7-18 NZ X0,PHI1 IF NONE PUTZ PRINTC JN PRINT ( ) EQ PHIX EXIT PHIA BSS 1 PERMISSION BITS PHIB BSS 1 CURRENT ORDINAL PURGMAC CSS,CSSDEF,CSSEND,CSSUSE PURGMAC CHK,PNL,RUN,COM,EXE,=A SPACE 4,10 USE LITERALS SPACE 2,5 QUAL * SPACE 2,5 END30 BSS 0 TITLE 4,0 OVERLAY. IDENT SEN40,READY,/EDIT/EDIT,04,00 ORG READY SPACE 2,4 COMMENT SENATOR VERSION "VER" - EDIT MODE OVERLAY SPACE 2,4 QUAL EDIT ** 4,0 OVERLAY - *EDIT* MODE. * * THIS OVERLAY PERFORMS ALL THE PROCESSING ASSOCIATED * WITH THE STRING EDITOR. EDIT SPACE 4,10 *** STRING/ELLIPSIS. * * IF A NON-ALPHANUMERIC, NON-DASH, NON-COMMA, NON-BLANK, OR * NON-SEMICOLON DELIMITER IS ENCOUNTERED, A STRING OR * ELLIPSIS IS ASSUMED TO FOLLOW. A STRING IS TERMINATED * BY A MATCHING DELIMITER. AN ELLIPSIS HAS A TERMINATING * DELIMITER, IMMEDIATELY FOLLOWED BY ANOTHER DELIMITER AND * THE SECOND PART OF THE ELLIPSIS, AGAIN FOLLOWED BY A * TRAILING MATCHING DELIMITER. FOR SOME COMMANDS, A SECOND * STRING/ELLIPSIS MAY IMMEDIATELY FOLLOW THE FIRST WITHOUT * INTERVENING DELIMITERS. NULL STRINGS ARE ILLEGAL. NULL * PARTS OF AN ELLIPSIS ARE LEGAL. A NULL FIRST PART OR * SECOND PART INDICATES BEGINNING-OF-LINE AND END-OF-LINE, * RESPECTIVELY. EXAMPLES (SLASH IS THE DELIMITER): * * /A/ THE STRING "A" * /A//B/ THE ELLIPSIS "A"..."B" * /A/B/ TWO STRINGS: "A" AND "B" * ///B/ THE ELLIPSIS ..."B" * /A//B/C//D/ TWO ELLIPSES: "A"..."B", "C"..."D" * // ONE NULL STRING...ILLEGAL * * NOTE - IF THERE IS NOTHING IMPORTANT FOLLOWING THE * STRING/ELLIPSIS, THE TRAILING DELIMITER MAY BE OMITTED. * * STRINGS/ELLIPSES MAY NOT BE NEGATED. * * TABLE OF DEFAULTABLE/NON-DEFAULTABLE PARAMETERS * * DEFAULTABLE: ALL, DISPLAY, OPTION, TOP, UNIT, VETO, ZONE * (ALL DEFAULT TO *OFF*) * * NON-DEFAULTABLE: COUNT, LIMIT, MARK, REMARK, STRING/ELLIPSIS TITLE 4,0 OVERLAY - EDIT MACROS. ** ERROR MACRO - PROCESS EDIT SYNTAX ERRORS. * * THIS MACRO IS CALLED WHEN A SYNTAX ERROR IS DETECTED. THE * MACRO DOES NOT PRINT THE ERROR, BUT SAVES THE ADDRESS OF * THE ERROR IN *LERR*. IT ALSO PERFORMS AN AUTOMATIC JUMP * TO HELP UNCLUTTER CODE CONTAINING MANY SUCH CALLS. * * ERROR P1,P2 * * P1 - THE ERROR MESSAGE * P2 - RETURN ADDRESS AFTER PROCESSING ERROR * (OPTIONAL - DEFAULTS TO PREVIOUSLY ENCOUNTERED *P2*) ERROR MACRO P1,P2 * .1 IFC NE,*P2**,1 '?ERRRET MICRO 1,, P2 * IFNOSBE R= X6,=C= _P1_= ELSE 1 R= X6,=C=_P1_= RJ PER PRINT ERROR REPORT * .1 IF -MIC,'?ERRRET,1 ERR ERROR - RETURN ADDRESS NEEDED ON THIS ERROR CALL * EQ "'?ERRRET" ENDM SPACE 4,10 DUMP MACRO P1 .1 IFC NE,*P1** .A MICRO 1,10,*P1* .1 ELSE 1 .A MICRO 1,6,*"SEQUENCE"* SNAP REG,(HDR=".A") ENDM TITLE 4,0 OVERLAY - EDITING DATA FLAGS, ETC. ** EDITING DATA WORDS. * * THE FOLLOWING DATA WORDS ARE USED BY THE EDIT COMMAND * PROCESSOR. THE ARE TWO GENERAL TYPES OF DATA HERE - * DEFAULTABLE AND NON-DEFAULTABLE. THE FORMER HAS * USER DEFINABLE DEFAULTS, WHICH ARE STORED IN THE * CHECKPOINT PACKAGE. THE LATTER TYPE ARE DATA WORDS * IMPLICITLY OR EXPLICITLY SUPPLIED BY THE USER. THESE * ARE NOT DEFAULTABLE AND DO NOT THEREFORE HAVE DEFAULTS * IN THE CHECKPOINT PACKAGE. * * THE *BSSS* MACRO DEFINES THE DEFAULTABLE DATA WORDS * AND GENERATES THE *RMT* BLOCK *EDITDEF* TO BE ENTERED * IN THE CHECKPOINT PACKAGE. THE PRECEDING *E* IS RE- * MOVED FROM THE DATA WORD AND REPLACED BY A *D* (FOR * DEFAULT) WHEN DEFINED IN THE CHECKPOINT AREA. THE * TWO DATA WORDS *ESTART* AND *EEND* ARE USED TO DELIMIT * THE DEFAULTABLE AREA SO THE *MOVE* MACRO MAY BE USED * TO SET UP THE DEFAULTS IN THE WORKING AREA HERE. * * EDITING FLAGS TAKE ON TWO DIFFERENT MEANINGS DEPENDING * ON WHETHER THEY ARE DEFAULTABLE OR NOT. DEFAULTABLE * FLAGS MAY BE ON OR OFF (1 OR 0). NON-DEFAULTABLE FLAGS * HAVE THREE VALUES * * 1 - ON, ENABLED * 0 - NOT ENABLED * -1- COMPLEMENT ENABLED ** BSSS MACRO - SEE ABOVE. * * CALLED LIKE *BSS* MACRO BSSS,P1,P2 P1 BSS P2 * EDITDEF RMT .A MICRO 2,,*P1* D_".A" BSSR P2 EDITDEF RMT ENDM SPACE 4,10 SPACE 2,4 **** EDIT ASSEMBLY VARIABLES. N.COLS EQU 10D MAX DISPLAY/ZONE RANGES N.STR EQU N.LINE MAXIMUM LENGTH OF STRING VARAIBLES N.CDW EQU 32D MAX COMMAND DESCRIPTION WORDS N.MDA EQU 60D LENGTH OF MACRO DEFINITION AREA EPC MICRO 1,,/*/ **** **** DEFAULTABLE EDITING FLAGS AND VALUES. ESTART BSSS 0 START OF DEFAULTABLE VALUES EALL BSSS 1 ALL FLAG ETOP BSSS 1 TOP FLAG EUNIT BSSS 1 UNIT FLAG EVETO BSSS 1 VETO FLAG/INFORMATION: ENDIS BSSS 1 DISPLAY FLAG 0 - NO DISPLAY >0 - NUMBER OF COLUMN RANGES TO DISPLAY EDIS BSSS /EDIT/N.COLS DISPLAY COLUMN RANGES ENZONE BSSS 1 NUMBER OF ZONE RANGES EZONE BSSS /EDIT/N.COLS ZONE RANGES EEND BSSS 0 PURGMAC BSSS **** **** NON-DEFAULTABLE FLAGS AND DATA. ECOUNT BSS 1 EDIT COMMAND COUNT ELIM BSS 1 LIMIT-TO-MARKED-LINES FLAG EMARK BSS 1 MARK FLAG EREMARK BSS 1 RE-MARK FLAG ECOMMAND BSS 1 ORDINAL OF CURRENT COMMAND EMACRO BSS 1 NZ IF CURRENT COMMAND A MACRO CALL ESUBJECT BSS 1 SUBJECT OF CURRENT COMMAND EECI BSS 1 TECI WORD FOR THIS COMMAND ENVETO BSS 1 VETO YES/NO COUNT ESTSRCH BSS 1 NZ IF STRING SEARCH REQUIRED ETPNT BSS 1 TEMPORARY EDIT POINTER EPROMPT DATA 0 IF PROMPTY ISSUED FOR COMMAND ESN BSS 1 NUMBER OF STRINGS GIVEN S12P CON S1 CON S2 S1LA BSS 1 LENGTH OF ELLIPSIS S1C BSS 1 COLUMN POINTER S1L BSS 1 LENGTH OF STRING S1CC DATA 1R CARRIABLE CONTROL S1 BSS N.STR S2LA BSS 1 LENGTH OF ELLIPSIS (OR -1) S2C BSS 1 S2L BSS 1 S2CC DATA 1R S2 BSS N.STR LLL BSS 1 LAST COLUMN LL BSS N.LINE LERR DATA 0 _ LAST ERROR MESSAGE **** ** TICI - TABLE OF INPUT COMMAND INFORMATION. * * THIS TABLE CONTAINS THE CRACKED INPUT COMMAND DESCRIPTION * CODE (CDC). ITS LENGTH IS FIXED, PLACING AN UPPER LIMIT * ON THE INFORMATION THAT MAY BE GIVEN ON AN INPUT LINE. TICI BSS N.CDW TEPN SPACE 2,4 ** TEPN - EDIT PARAMETER NAMES. * * THIS TABLE CONTAINS A LIST OF EACH OF THE NORMAL EDIT * COMMAND PARAMETERS PLUS DUMMY ENTRIES FOR THE NON-ALPHABETIC * PARAMETERS. THE ORDINAL OF THE PARAMETER IN THE TABLE IS * THE SAME ORDINAL USED IN *CDC* FORMAT (SEE BELOW). THE * ORDINAL NAME IS THE FIRST THREE CHARACTERS OF THE PARAMETER * NAME PRECEDED BY A *P*. EPN SPACE 2,4 ** EPN MACRO - DEFINE THE EPN. * * P1 EPN P2 * * P1 - PARAMETER NAME * P2 - GENERATE A ZERO WORD IF P2 NON-BLANK MACRO EPN,P1,P2 .A MICRO 1,3,*P1* P_".A" BSS 0 B_P1 EQU 59-* .1 IFC EQ,*P2** DATA 0L_P1 .1 ELSE 1 BSSZ 1 ENDM TEPN BSS 0 LOC 0 **** TEPN. ALL EPN DISPLAY EPN LIMIT EPN MARK EPN REMARK EPN TOP EPN UNIT EPN VETO EPN ZONE EPN COUNT EPN NO STRING EPN NO ELLIPS EPN NO TEPNL BSS 0 **** LOC *O ORG *-2 TEPI SPACE 4,10 ** TEPI EDIT PARAMETER INFORMATION. * * THIS TABLE CONTAINS INFORMATION CONCERNING THE COMMAND * PARAMETERS. FIRST WE DEFINE THE BIT POSITIONS. TEPI BSSZ TEPNL LOC 0 **** TEPI BIT POSITIONS. BSS 18 ADDRESS OF THE PARAMETER IMINUS BSS 1 MINUS PERMITTED ISPECIAL BSS 1 SPECIAL *SEI* PROCESSING IDEFAULT BSS 1 IF THIS IS A DEFUALTABLE PARAMETER **** LOC *O ORG TEPI ** EPI MACRO - SET UP TEPI. * * P1 EPI P2,(P3) * * P1 - PARAMETER NAME * P2 - PARAMETER ADDRESS * P3 - LIST OF BITS (SEE ABOVE) TO SET MACRO EPI,P1,P2,P3 * .A MICRO 1,3,*P1* ORG TEPI+P_".A" * + VFD $/0 .1 IRP P3 POS P3+1 VFD 1/1 .1 IRP * POS 18 VFD 18/P2 ENDM **** TEPI. ALL EPI EALL,(IMINUS,IDEFAULT) DISPLAY EPI 0,(ISPECIAL,IMINUS) LIMIT EPI ELIM,(IMINUS) MARK EPI EMARK,(IMINUS) REMARK EPI EREMARK TOP EPI ETOP,(IMINUS,IDEFAULT) UNIT EPI EUNIT,(IMINUS,IDEFAULT) VETO EPI EVETO,(IMINUS,IDEFAULT) ZONE EPI 0,(ISPECIAL,IMINUS,IDEFAULT) COUNT EPI 0,(ISPECIAL) STRING EPI 0,(ISPECIAL) ELLIPS EPI 0,(ISPECIAL) **** PURGMAC EPI ORG TEPI+TEPNL SPACE 2,4 ** TECN - EDIT COMMAND NAMES. * * THIS TABLE CONTAINS THE NAME OF EACH OF THE EDITING * COMMANDS AND THE MINIMUM NUMBER OF CHARACTERS REQUIRED * TO RECOGNIZE THE COMMAND. THE *ECN* MACRO ALSO DE- * FINES AN ORDINAL: * * C_COM * * WHERE *COM* IS THE FIRST THREE CHARACTERS OF THE * COMMAND NAME. THIS COMMAND ALSO SETS UP HELP IN- * FORMATION IN THE REMOTE BLOCK *ECN*. MACRO ECN,P1,P2,P3,P4 .1 IFC EQ,*P4*DEBUG*,1 .2 IFGE DEBUG,1 * .A MICRO 1,3,*P1* * C_".A" BSS 0 VFD 42/0L_P1,18/P2 .2 ENDIF ENDM SPACE 2,4 **** TECN - EDIT COMMAND NAMES. TECN BSS 0 LOC 0 AGAIN ECN 1,(DO LAST REPEATABLE COMMAND AGAIN) BLANK ECN 2,(BLANK OUT STRINGS) BOTTOM ECN 1,(SET POINTER TO LAST LINE OF RANGE) CCF ECN 3,(CHECK CURRENT FILE),DEBUG CHANGE ECN 1,(CHANGE ONE STRING TO ANOTHER) CLEAR ECN 3,(CLEAR MARKS) DEFAULT ECN 2,(SET DEFAULT EDIT PARAMETERS) DMP ECN 3,(DUMP SENATOR CORE),DEBUG DOWN ECN 1,(MOVE THE POINTER TOWARDS EOF) EDIT ECN 3,(ENTER *EDIT* MODE) END ECN 3,(EXIT FROM SENATOR) ERASE ECN 3,(DELETE LINES FROM THE FILE) FIND ECN 1,(FIND STRINGS IN THE FILE) GOTO ECN 1,(MOVE THE POINTER TO A GIVEN LINE) HELP ECN 3,(LIST EDIT COMMANDS AND THEIR FUNCTION) INSERT ECN 1,(INSERT TEXT AT A GIVEN COLUMN) JMP ECN 3,(SET DEBUG JUMPS),DEBUG MACRO ECN 3,(DEFINE A MACRO OR END A MACRO DEFINITION),N MARK ECN 3,(MARK LINES) OVERLAY ECN 1,(OVERLAY TEXT ON A GIVEN COLUMN) PRINT ECN 1,(PRINT TEXT LINES) RANGE ECN 2,(DEFINE THE EDITING RANGE) READY ECN 3,(ENTER *READY* MODE) REMOVE ECN 1,(REMOVE STRINGS/ELLIPSES) SCOPE ECN 3,(ENTER *SCOPE* MODE) SCP ECN 3,(ENTER *SCP* MODE) SET ECN 3,(CHANGE SENATOR CORE),DEBUG STATUS ECN 3,(SHOW CURRENT STATUS) SUFFIX ECN 1,(ADD TEXT TO THE END OF THE LINE) TOP ECN 1,(SET POINTER TO FIRST LINE OF THE FILE) UP ECN 1,(MOVE THE POINTER TOWARDS THE TOP) X ECN 1,(MACRO CALL),N ZONE ECN 1,(PRINT ZONE RANGE OF A STRING) TECNL BSS 0 LENGTH OF TECN DATA 0 LOC *O **** SPACE 2,4 ** TECI - EDIT COMMAND INFORMATION. * * THIS TABLE CONTAINS INFORMATION USED IN THE SYNTAX * PROCESSING AND EXECUTION OF EACH EDIT COMMAND. * **T 42/FLAGS AND STUFF,17/ADDR,1/0 * * ADDR - COMMAND PROCESSING ADDRESS TECI BSS 0 LOC 0 **** BIT ALLOCATIONS AND NAMES IN TECI. BSS 1 BSS 18 PROCESSING ADDRESS * PROCESSING FLAGS BREP BSS 1 COMMAND REPEATABLE BMOD BSS 1 COMMAND CHANGES A LINE (*ATL* REQUIRED) BREMOD BSS 1 COMMAND MAY CHANGE A LINE MORE THAN ONCE BSTSRCH BSS 1 STRING SEARCH REQUIRED BOSTSRCH BSS 1 STRING SEARCH RQD IFF STRING GIVEN BNOLOOP BSS 1 NO SEARCH LOOP NEEDED BMTOK BSS 1 COMMAND OK IF RANGE IS EMPTY BDEND BSS 1 DISPLAY LINE ONLY AFTER COMMAND IS DONE BNMVPTR BSS 1 DO NOT MOVE EDIT POINTER ON SUCCESS BNPRMPT BSS 1 IF NO NUMBERED PROMPT USED BNVETO BSS 1 IF NO VETO REQUESTS FOR THIS COMMAND * SYNTAX FLAGS, ETC. * * NOTE: THE TOP BITS OF THIS AREA HAVE ALREADY BEEN ASSIGNED * BY THE EPN MACRO. BNST BSS 2 NUMBER OF STRINGS (MAX) BMST BSS 2 MIN. NUMBER OF STRINGS BELLIP BSS 1 ELLIPSES ALLOWED BSVOK BSS 1 SUBJECT STRING PERMITTED BRZONE BSS 1 ZONES REQUIRED BSPECIAL BSS 1 SPECIAL PARAMETER PROCESSING BMACOK BSS 1 OK TO BE CALLED IN A MACRO BMACRO BSS 1 IS A MACRO BNEXT BSS 1 COMMAND STARTS ON NEXT LINE ERRPL BSPECIAL-BSTRING TOO MANY BITS USED **** LOC *O ORG TECI TECI BSSZ TECNL SPACE 2,4 ** ECI MACRO - SET UP TECI. * * THIS MACRO SETS UP *TECI*. THERE ARE TWO * CALLS - ONE STARTS DEFINING A NEW COMMAND AND * THE SECOND CONTINUES THE DEFINITION. * * COMMAND ECI MIN,MAX * ECI (PARAMS) * ECI (PARAMS) * * THE FIRST CALL GIVES THE COMMANDS NAME (AND HENCE * THE ORDINAL IN THE TABLE) AND THE MINIMUM AND MAXIMUM * NUMBER OF STRINGS ALLOWED. *PARAMS* IS A LIST OF * PERMISSION AND REQUIRED BITS TO BE SET, WITHOUT THE * *B* PREFIX. EACH COMMAND MAY HAVE ZERO OR MORE CALLS * WITH BIT LISTS. MACRO ECI,P1,P2,P3 .1 IFC NE,*P1** * NEW COMMAND CALL .A MICRO 1,4,*C_P1* ORG ".A"+TECI + VFD $/P1 * DEFINE MIN AND MAX POS BNST+1+1 VFD 2/P2 POS BMST+1+1 VFD 2/P3 .1 ELSE .2 IRP P2 POS B_P2+1 VFD 1/1 .2 IRP VFD $/0 .1 ENDIF ENDM SPACE 2,4 **** TECI - EDIT COMMAND INFORMATION. AGAIN ECI 0 ECI (SPECIAL) BLANK ECI 0,1 ECI (REP,MOD,REMOD,OSTSRCH,ELLIP,SVOK) ECI (MACOK) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK,TOP,UNIT,VETO) ECI (ZONE,COUNT,STRING) BOTTOM ECI 0 ECI (NOLOOP,MACOK,DISPLAY,MARK) ECI (NPRMPT) CHANGE ECI 2,2 ECI (REP,MOD,REMOD,STSRCH,ELLIP,SVOK,MACOK) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK,TOP) ECI (UNIT,VETO,ZONE,COUNT,STRING) CLEAR ECI 0,1 ECI (REP,MACOK,OSTSRCH,NMVPTR,ELLIP) ECI (ALL,DISPLAY,LIMIT,REMARK,TOP,UNIT) ECI (VETO,ZONE,COUNT,STRING) DEFAULT ECI 0 ECI (NOLOOP,MACOK) ECI (ALL,TOP,UNIT,VETO,DISPLAY,ZONE) ECI (MTOK) ECI (NPRMPT) DOWN ECI 0,1 ECI (REP,OSTSRCH,ELLIP,MACOK,NEXT) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK,TOP) ECI (UNIT,ZONE,COUNT,STRING,NVETO) ECI (DEND) EDIT ECI 0 ECI (SPECIAL) END ECI 0 ECI (SPECIAL) ERASE ECI 0,1 ECI (REP,OSTSRCH,ELLIP,MACOK,ALL,DISPLAY) ECI (LIMIT,MARK,REMARK,TOP,UNIT,VETO,ZONE) ECI (COUNT,STRING) NOTYETE SKIP EXTRACT ECI 1,1 ECI (REP,MOD,OSTSRCH,ELLIP,SVOK,MACOK) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK,TOP,UNIT) ECI (VETO,ZONE,COUNT,STRING) NOTYETE ENDIF FIND ECI 1,1 ECI (REP,STSRCH,ELLIP,MACOK,NEXT) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK,TOP,UNIT) ECI (VETO,ZONE,COUNT,STRING) GOTO ECI 0 ECI (SPECIAL) HELP ECI 0 ECI (SPECIAL) INSERT ECI 1,1 ECI (REP,MOD,SVOK,RZONE,MACOK) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK) ECI (TOP,UNIT,VETO,ZONE,COUNT,STRING) NOTYETL SKIP LIST ECI 0 ECI (SPECIAL) NOTYETL ENDIF MACRO ECI 0 MARK ECI 0,1 ECI (REP,MACOK,OSTSRCH,NMVPTR,ELLIP) ECI (ALL,DISPLAY,LIMIT,REMARK,TOP,UNIT) ECI (VETO,ZONE,COUNT,STRING) OVERLAY ECI 1,1 ECI (REP,MOD,SVOK,RZONE,MACOK) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK) ECI (TOP,UNIT,VETO,ZONE,COUNT,STRING) PRINT ECI 0 ECI (SVOK,MACOK,ALL,DISPLAY,LIMIT) ECI (MARK,REMARK,TOP,COUNT) ECI (NMVPTR,NPRMPT,NVETO) RANGE ECI 0 ECI (SPECIAL) READY ECI 0 ECI (SPECIAL) REMOVE ECI 0,1 ECI (REP,MOD,REMOD,OSTSRCH,ELLIP,SVOK) ECI (MACOK,ALL,DISPLAY,LIMIT,MARK,REMARK) ECI (TOP,UNIT,VETO,ZONE,COUNT,STRING) SCOPE ECI 0 ECI (SPECIAL) SCP ECI 0 ECI (SPECIAL) STATUS ECI 0 ECI (SPECIAL) SUFFIX ECI 1,1 ECI (REP,MOD,SVOK,MACOK,ALL,DISPLAY) ECI (LIMIT,MARK,REMARK,TOP,VETO) ECI (COUNT,STRING) TOP ECI 0 ECI (NOLOOP,MACOK,DISPLAY,MARK) ECI (NPRMPT) UP ECI 0,1 ECI (REP,OSTSRCH,ELLIP,MACOK,NEXT) ECI (ALL,DISPLAY,LIMIT,MARK,REMARK,TOP) ECI (UNIT,ZONE,COUNT,STRING,NVETO) ECI (DEND) X ECI 0,2 ECI (REP,SVOK,MACRO) ECI (ALL,COUNT) ZONE ECI 1,1 ECI (REMOD,NMVPTR,UNIT,NVETO,MACOK) ECI (DISPLAY,ZONE,STRING,ELLIP,STSRCH) SPACE 2,4 .11 IFGE DEBUG,1 CCF ECI 0 ECI (SPECIAL) DMP ECI 0 ECI (SPECIAL) JMP ECI 0 ECI (SPECIAL) SET ECI 0 ECI (SPECIAL) .11 ENDIF **** ORG TECI+TECNL SPACE 2,4 MACRO EQU *+400000B X EQU *+400000B SPACE 2,4 ** COMMAND DESCRIPTION CODE. * * THIS CODE DESCRIBES A COMMAND AND ITS PARAMETERS. INPUT * IS TRANSLATED INTO THIS CODE AND COMMANDS IN A MACRO ARE * STORED IN THIS FORM. THE ROUTINE *SEI* BREAKS THIS CODE * INTO THE VARIOUS FLAGS THE COMMAND PROCESSOR USES. * * AN ENTRY IN CDC FORM HAS A HEADER WORD AND ZERO OR * MORE PARAMETER DESCRIPTIONS FOLLOWING IT. EACH PARAMETER * HAS A HEADER WORD AND ZERO OR MORE SUPPLIMENTARY WORDS. * * HEADER WORD * **T 6/SS,18/,18/LEN,18/CO * * WHERE SS - SUBJECT STRING * 0 - CURRENT RANGE * 1-26 - THE STRING VARIABLE * LEN - LENGTH OF THIS COMMAND (AT LEAST 1) * CO - COMMAND ORDINAL (SEE *TECN*) * * PARAMETER HEADER WORD * **T 1/N,5/LP,18/F2,18/F1,18/PO * * WHERE N - SET IF PARAMETER PRECEDED BY A MINUS SIGN * LP - LENGTH OF THIS PARAMETER DECRIPTION (AT LEAST 1) * F1,F2 - SUPPLIMENTARY INFORMATION, DEPENDS ON THE * PARAMETER INVOLVED (SEE BELOW) * PO - PARAMETER ORDINAL * * USE OF F1, F2 AND FOLLOWING WORDS FOR SPECIFIC PARAMETERS. * PARAMETERS NOT MENTIONED BELOW DO NOT NEED SUPPLIMENTARY * INFORMATION. * * DISPLAY, ZONE: F1 = NUMBER OF COLUMN RANGES * WORD 1 - WORD N - RANGES IN TLNR FORMAT * COUNT: F1 = COUNT * STRING: WORD 1 ... STRINGS IN STRING FORMAT TITLE 4,0 OVERLAY - EDIT MAIN LOOP. EDIT RJ GEC GET EDIT COMMAND SX1 TICI RJ SEI SETUP EDIT INPUT RJ CEC CALL EDIT COMMAND EQ EDIT SPECIAL SPACE 4,10 *** SPECIAL *EDIT* COMMANDS. * END BSS 0 RJ FCL FLAG CURRENT LINE RJ CPD IFNOS 1 MESSAGE (=C* *),1 CLEAR *B* DISPLAY FOR 1RO ENDRUN READY BSS 0 RJ FCL FLAG CURRENT LINE RJ CPD LOAD 1 SCOPE BSS 0 RJ FCL FLAG CURRENT LINE SX6 /CCC/VSOT SA6 COMMON LOAD 3 SCP BSS 0 RJ FCL FLAG CURRENT LINE SX6 /CCC/VSCT SA6 COMMON LOAD 3 STATUS BSS 0 RJ FCL FLAG CURRENT LINE SX6 /UTL/VEST SA6 COMMON LOAD 2 GOTO SPACE 4,10 *** GOTO - EXPLICITLY POSITION THE EDIT POINTER. * GOTO SB7 B0 A,Z ALLOWED RJ GLN GET LINE NUMBER ZR B7,GOT2 IF LINE NUMBER OK NE B7,B1,GOT1 IF ILLEGAL SX0 X6-1R ZR X0,GOTO IF BLANK, SKIP SX0 X6-1R, ZR X0,GOTO IF COMMA, SKIP GOT1 ERROR (ILLEGAL LINE NUMBER),GEI3 GOT2 BX1 X6 RJ LTP LOCATE TEXT POINTER NZ B7,GOT3 IF NOT EXACTLY FOUND SA6 EPNT EQ GEI32 GOT3 ERROR (GIVEN LINE DOES NOT EXIST) HELP SPACE 4,10 *** HELP - DOCUMENT *EDIT* MODE. * HELP BSS 0 RJ FCL FLAG CURRENT LINE LOAD 5,/HELP/INI RANGE SPACE 4,10 *** RANGE - SPECIFY AN EDIT RANGE. * RANGE RJ GLR GET LINE RANGE NZ B7,RAN1 IF NULL RANGE NG X6,RAN2 IF BACKWARDS RANGE SA6 RANB SAVE THE RANGE FOR A MOMMENT RJ GLR TRY FOR ANOTHER RANGE ZR B7,RAN4 ONLY ONE RANGE ALLOWED SA1 RANB BX6 X1 MX0 -21 BX7 -X0*X6 SA7 ERANGE+1 END OF RANGE AX6 24 BX6 -X0*X6 SA6 A7-B1 BEGINNING OF RANGE * CHECK THE EDIT POINTER SA1 EPNT SA5 X1+TTPT ZR X5,RAN3 IF NO LINE THERE MX0 -21 BX5 -X0*X5 IX0 X5-X6 NG X0,RAN3 IF _ BEFORE START IX0 X7-X5 NG X0,RAN3 IF AFTER END OF RANGE EQ EDIT EXIT RAN1 BX6 X6-X6 USE A-Z BX6 X6-X6 SA6 ERANGE SA1 =999999D BX6 X1 SA6 A6+B1 EQ GEI32 RAN2 ERROR (BACKWARDS RANGE IS ILLEGAL),GEI3 * *TOP* NEEDED, CALL THE TOP COMMAND RAN3 SX1 RANA RJ SEI SETUP EDIT INFORMATION RJ SEC SEARCH AND EXECUTE EDIT COMMAND EQ GEI32 * TOO MANY RANGES RAN4 ERROR (ONLY ONE RANGE ALLOWED) RANA VFD 6/,18/,18/1,18/CTOP RANB BSS 1 SCRATCH SPACE 4,10 .1 IFGE DEBUG,1 SPACE 2,5 ** DEBUGGING COMMANDS (SAME AS READY, ETC.). CCF RJ //CCF CHECK CURRENT FILE EQ EDIT DMP RJ //DMP EQ EDIT JMP RJ //JMP EQ EDIT SET RJ //SET EQ EDIT .1 ENDIF LINE SPACE 4,10 ** LNI - PROCESS LINE-NUMBERED INPUT. * LNI BX5 X6 SB7 B1 RJ DXB CONVERT TO BINARY SA2 =999999D IX0 X2-X6 NG X0,LNI1 IF ILLEGAL SA6 LN STORE THE LINE NUMBER SA1 INC SA2 INL IX0 X2-X1 NG X0,LNI2 IF NULL, DELETE LINE BX1 X1-X1 NOT INPUT MODE RJ RTL REFORMAT TEXT LINE NZ B7,LNI3 IF ERROR * ADD THE LINE BX6 X6-X6 NO SQUEEZE SA6 ATLA BX1 X1-X1 ZERO FREE FIELD SB7 IN SA2 INL RJ ATL ADD TEXT LINE SA1 ATLC SET EDIT _ BX6 X1 SA6 EPNT EQ LNI3 LNI1 ERROR (LINE NUMBER GREATER THAN 999999),GEI3 * DELETE THE LINE LNI2 SA1 LN FIND THE LINE RJ LTP LOCATE TEXT POINTER NZ B7,LNI3 IF NOT THERE BX1 X6 SA6 EPNT RJ DEL DELETE LINE SA1 EPNT ADJUST THE POINTER RJ DOL DOWN ONE LINE SA1 EPNT SA6 A1 ZR B7,LNI3 IF THERE IS A LOWER LINE RJ UOL UP TO PREVIOUS LINE SA6 EPNT LNI3 BX6 X6-X6 SA6 LLL NOTHING REMAINING ON CURRENT LINE SA6 TICI CLEAR COMMAND INFORMATION EQ GEIX BYPASS END OF COMMAND PROCESSING EJECT *** EDIT OPERATION. * * THE FOLLOWING IS AN OUTLINE OF THE GENERAL PROCEDURE * USED WHEN PROCESSING THE PRINCIPAL EDIT COMMANDS DESCRIBED * LATER. * * 1. IF (TOP) IS SPECIFIED OR THE CURRENT POINTER POSITION * IS NOT IN THE EDITING RANGE, THE POINTER IS MOVED TO * THE TOP OF THE CURRENT RANGE. IF THE COMMAND IS * (FIND), (DOWN), OR (UP), AND (TOP) IS NOT SPECIFIED, * THE NEXT LINE FLAG IS SET. * * 2. IF THE NEXT LINE FLAG IS SET, THE POINTER IS MOVED * DOWN THE FILE ONE LINE. IF THE END OF THE FILE IS * REACHED OR THE POINTER IS NOW OUTSIDE OF THE EDITING * RANGE, THE PROCEDURE TERMINATES. IF THE COMMAND IS * (UP), THE POINTER IS MOVED UP THE FILE INSTEAD OF * DOWN. THE NEXT LINE FLAG IS CLEARED. * * 3. THE (LIMIT) CONDITION IS CHECKED. IF (LIMIT) IS * SPECIFIED, THE LINE IS REJECTED IF THE MARK FLAG IS * NOT SET FOR THE LINE. IF (-LIMIT), IT IS REJECTED * IF THE MARK FLAG IS SET. IF NO LIMIT PARAMETER * IS GIVEN, NO TEST IS MADE AT THIS POINT. IF THE * LINE IS REJECTED, GO TO STEP 12. * * 4. IF NO STRING OR ELLIPSIS HAS BEEN GIVEN, GO TO * STEP 7. AN INTERNAL STRING SEARCH POINTER IS SET TO THE * FIRST COLUMN OF THE FIRST ZONE RANGE. IF NO ZONES * ARE SPECIFIED, THE DEFAULT ZONE OF THE ENTIRE LINE * (Z1-160) IS USED. THE NEXT COLUMN FLAG IS CLEARED. * * 5. IF THE NEXT COLUMN FLAG IS SET, THE STRING SEARCH * POINTER IS INCREMENTED AND THE NEXT COLUMN FLAG IS * CLEARED. IF THE POINTER IS NOW OUTSIDE THE CURRENT * ZONE, THE POINTER IS SET TO THE FIRST COLUMN OF THE * NEXT ZONE. IF THE POINTER IS PAST THE END OF THE * LAST ZONE, GO TO STEP 12. * * 6. BEGINNING AT THE CURRENT COLUMN POSITION OF THE STRING * SEARCH POINTER, A MATCH IS SOUGHT FOR THE STRING OR * ELLIPSIS. IF NO MATCH IS FOUND, SET THE NEXT COLUMN * FLAG AND GO TO STEP 5. * * 7. THE LINE HAS NOW PASSED ALL APPROVALS EXCEPT VETO. * IF VETO IS NOT IN EFFECT, GO TO STEP 8. * THE LINE IS DISPLAYED (AS MODIFIED BY THE COMMAND). * IF THE RESPONSE IS (YES), GO TO STEP 8. * IF THE RESPONSE IS (NO), GO TO STEP 11. * IF THE RESPONSE IS (QUIT), GO TO STEP 12. * IF THE RESPONSE IS (CONTINUE), THE LINE IS ACCEPTED AND * VETO IS TURNED OFF FOR THE REMAINDER OF THE COMMAND. * IF (YES,NN) OR (NO,NN) IS ENTERED, THE LINE IS EITHER * ACCEPTED OR REJECTED, AND THE NEXT NN-1 APPROVALS * FOR THE COMMAND WILL BE ACCEPTED OR REJECTED WITHOUT * FURTHER INTERVENTION. * * 8. ALL TESTS HAVE BEEN PASSED. IF THE COMMAND HAS NOT * ALREADY BEEN PERFORMED FOR VETO CONSIDERATION, IT IS * NOW PERFORMED. IF THE COMMAND IS NOT (CLEAR), (MARK), * OR (PRINT), THE EDIT POINTER IS SET TO THE CURRENT * LINE. THE COUNT OF COMMANDS PERFORMED IS INCREMENTED. * IF THE COMMAND IS NOT (CHANGE), (REMOVE), OR (BLANK), * OF IF THE COMMAND COUNT HAS RUN OUT, GO TO STEP 10. * * 9. THE CURRENT LINE IS TO BE SEARCHED AGAIN. THE SEARCH * POINTER IS SET TO THE COLUMN FOLLOWING THE LAST * COLUMN MATCHED BY THE STRING SEARCH AND ANY CHANGE * IN THE LENGTH OF THE LINE IS USED TO BIAS THE POINTER * AND ZONE RANGES. THE SEARCH IS THEN CONTINUED BY * PROCEEDING TO STEP 5. * * 10. A LINE HAS BEEN MODIFIED. IF (DISPLAY) IS SELECTED, * THE LINE IS NOW DISPLAYED IF NOT ALREADY DONE SO FOR * VETO CONSIDERATION. IF (MARK) OR (REMARK) IS SELECTED, * THE MARK FLAG IS SET FOR THIS LINE. IF (-MARK), THE * MARK FLAG IS CLEARED. IF THE COMMAND COUNT HAS RUN * OUT OR THE VETO RESPONSE (QUIT) HAS BEEN GIVEN, * TERMINATE, OTHERWISE THE NEXT LINE FLAG IS SET AND THE * PROCESS IS REPEATED BEGINNING AT STEP 2. * * 11. THE VETO RESPONSE IS (NO). IF THE COMMMAND IS * (CHANGE), (REMOVE), OR (BLANK), SET THE NEXT COLUMN FLAG, * AND GO TO STEP 5. * * 12. A LINE HAS FAILED TO PASS SOME SELECTION CRITERION. * IF THE COMMAND IS (CHANGE), (REMOVE), OR (BLANK), AN * EARLIER MODIFICATION TO THE LINE MAY HAVE PASSED ALL * APPROVALS. IF SO, GO TO STEP 10. IF THE VETO RESPONSE * (QUIT) HAS BEEN GIVEN, TERMINATE, OTHERWISE CLEAR THE * MARK FLAG FOR THIS LINE IF (REMARK) IS SPECIFIED, SET * THE NEXT LINE FLAG, AND GO TO STEP 2. TITLE 4,0 OVERLAY - EDIT COMMANDS. *** PROCESS *EDIT* COMMANDS. * * NOTE: MOST OF THESE COMMANDS ARE ACTUALLY PART OF * THE ROUTINE *DEC* (SEE *DEC*). THEY SHOULD JUMP TO * *EXIT* WHEN THEY ARE COMPLETED. SOME COMMANDS ARE * ACTUALLY PROCESSED AS SPECIAL COMMANDS, BUT DO NOT * APPEAR TO BE SPECIAL TO THE USER. SUCH COMMANDS * ARE DOCUMENTED BELOW, NOT IN THE SPECIAL COMMANDS * SECTION. AGAIN SPACE 4,10 *** AGAIN - DO LAST REPEATABLE COMMAND AGAIN. * AGAIN SA1 TLCI AX1 18 SX6 X1 SA6 GEIC ZR X6,AGA1 IF NO LAST COMMAND MOVE X6,TLCI,TICI SA1 TICI SETUP GEI FLAGS SX6 X1 SA6 GEIB COMMAND ORDINAL SA1 TECI+X6 BX6 X1 SA6 GEID TECI ENTRY BX6 X6-X6 SA6 GEIE EQ GEI15 AGA1 ERROR (NO COMMAND TO *AGAIN*) EQ EDIT BLANK SPACE 4,10 *** BLANK - BLANK OUT A STRING. * BLANK SA1 EVETO SB2 HN-1 SB3 HNL (B3) = ADDRESS OF LENGTH OF STRING IN *HN* ZR X1,BLA1 IF NOT VETO SA5 HNL MOVE LINE INTO KN BX6 X5 SA6 KNL SX6 B1 SA6 SECK MOVE X5,HN,KN SB2 KN-1 SB3 KNL (B3) = ADDRESS OF LENGTH OF STRING IN *KN* BLA1 SA5 SESF NUMBER OF COLUMNS TO BLANK SX6 1R THE BLANK SA4 ESN ZR X4,BLA3 IF NO STRING SPECIFIED SA4 SESD STARTING COLUMN IX7 X4+X5 WHERE TO RESUME SEARCH SA7 DECA SX1 1+ (X1) = 1 (ONLY 1 ZONE TO BLANK) BLA2 SA6 B2+X4 SX4 X4+B1 SX5 X5-1 NZ X5,BLA2 IF MORE TO BLANK SX1 X1-1 DECREMENT COUNT OF ZONE RANGES TO BLANK ZR X1,EXIT IF DONE EQ BLA4 GET NEXT ZONE RANGE TO BLANK BLA3 BSS 0 HERE IF BLANKING ZONES, NOT A STRING SA1 EZONE SX1 X1 ZR X1,GEI51 IF ZONE = ZERO SA1 ENZONE SA3 B3 ZR X1,GEI51 IF NO ZONES GIVEN EITHER SA2 EECI MX7 1 LX7 BREMOD-59 BX7 -X7*X2 SA7 A2 CLEAR REMOD FLAG BLA4 BSS 0 SA2 EZONE+X1-1 READ NEXT ZONE RANGE SX4 X2 (X4) = STARTING ZONE AX2 30 (X2) = ENDING ZONE SX2 X2+B1 IX0 X3-X2 MI X0,BLA5 IF LINE NEEDS LENGTHENING IX5 X2-X4 NUMBER OF COLUMNS TO BLANK EQ BLA2 BLANK THOSE ZONES BLA5 BSS 0 SX4 X4-1 MX7 X3-X4 MIN(LINE LENGTH, START ZONE - 1) SX1 X1-1 NEXT ZONE SA7 A3 UPDATE LINE LENGTH BX3 X7 NZ X1,BLA4 IF MORE ZONES EQ EXIT DONE BOTTOM SPACE 4,10 *** BOTTOM - SET THE EDIT POINTER TO BOTTOM. * BOTTOM SA1 ETOP SEE IF *TOP* IS ON NZ X1,BOT3 IF *TOP* IS ON SA1 ERANGE+1 FIND END-OF-RANGE RJ LTP LOCATE TEXT POINTER NG B7,BOT1 IF BETWEEN LINES EQ B7,B1,BOT2 IF RANGE EMPTY SA6 EPNT EQ EXIT * BETWEEN LINES, MOVE UP ONE AND SEE WHAT HAPPENS. BOT1 BX1 X6 RJ UOL UP ONE LINE NZ B7,BOT2 IF TOP OF FOLE SA1 X6+TTPT CHECK LINE NUMBER MX0 -21 BX2 -X0*X1 (X2) = LINE NUMBER SA1 ERANGE CHECK TOP OF RANGE IX0 X2-X1 NG X0,BOT2 IF RANGE EMPTY SA6 EPNT EQ EXIT OK, DONE * RANGE EMPTY BOT2 PRINT (RANGE EMPTY) EQ EXIT BOT3 PRINT (*TOP* IS ON, *BOTTOM* IGNORED) EQ EXIT CHANGE SPACE 4,10 *** CHANGE - CHANGE A STRING. * CHANGE SA1 S2LA SX6 B1 SA6 SECK PL X1,CHA1 IF SECOND IS ELLIPSIS SA5 S2L SA4 SESF IX6 X5-X4 CHANGE IN LINE LENGTH SA1 SECM IX7 X1+X6 NEW ZONE BIAS SA7 DECB SA1 HNL IX7 X1+X6 NEW LINE LENGTH SX0 X7-N.LINE-1 PL X0,EXIT1 IF LINE TOO LONG SA7 KNL SA4 SESD IX6 X4+X5 NEW SEARCH COLUMN SA6 DECA MOVE X4-1,HN,KN SA5 SESD SA4 S2L MOVE X4,S2,KN+X5-1 MOVE IN THE CHANGE SA5 SESD SA4 SESF SA3 S2L IX6 X4+X5 IX3 X5+X3 SA4 HNL IX4 X4-X6 MOVE X4+1,HN+X6-1,KN+X3-1 EQ EXIT DONE * CHANGE ONE ELLIPSIS TO ANOTHER CHA1 SA1 S1LA NG X1,CHA2 IF STRING TO ELLIPSIS SA5 S2LA SA4 S2L SA3 S1L SA2 S1LA IX6 X4+X5 COMPUTE NEW COLUMN BIAS IX6 X6-X2 IX6 X6-X3 CHANGE IN LINE LENGTH SA1 SECM IX7 X1+X6 SA7 DECB SA1 HNL IX7 X1+X6 NEW LINE LENGTH SX0 X7-N.LINE-1 PL X0,EXIT1 IF LINE TOO LONG SA7 KNL SA1 SESE NEW SEARCH COLUMN IX6 X1+X5 SA6 DECA SA1 SESD MOVE X1-1,HN,KN MOVE PART BEFORE FIRST SA5 SESD SA4 S2L MOVE X4,S2,KN+X5-1 MOVE FIRST PART SA5 SESD SA4 S2L IX4 X4+X5 SA3 SESE SA2 S1L IX7 X5+X2 IX1 X3-X7 IX6 X4+X1 SA6 CHAA MOVE X1,HN+X7-1,KN+X4-1 SA1 S2LA SA2 S2L SA3 CHAA MOVE X1,S2+X2,KN+X3-1 SA5 SESE SA4 S1LA IX6 X5+X4 SA3 HNL IX1 X3-X6 SA3 CHAA SA4 S2LA IX4 X3+X4 MOVE X1+1,HN+X6-1,KN+X4-1 EQ EXIT CHA2 PRINT (ATTEMPT TO CHANGE A STRING TO AN ELLIPSIS) EQ EDIT CHAA BSS 1 CLEAR SPACE 4,10 *** CLEAR - CLEAR MARK INDICATORS. * CLEAR SA1 ETPNT CLEAR THE MARK SA5 X1+TTPT MX0 -1 LX0 21-0 BX6 X0*X5 CLEAR MARK BIT SA6 A5 EQ EXIT ALL DONE DEFAULT SPACE 4,10 *** DEFAULT - SET DEFAULT EDIT PARAMETERS. * DEFAULT MOVE EEND-ESTART,ESTART,DSTART EQ CECX (DEFAULT IS CALLED FROM *CEC*) DOWN SPACE 4,10 *** DOWN - MOVE THE EDIT POINTER DOWN. * DOWN EQ EXIT (*SEC* DOES ALL THE WORK) ERASE SPACE 4,10 *** ERASE - DELETE LINES FROM THE CURRENT FILE. * ERASE SA1 ENDIS ZR X1,ERA1 IF NO DISPLAY SA1 SECF (WE HAVE TO READ THE LINE IN NOW... NZ X1,ERA1 IF LINE ALREADY DISPLAYED RJ ELC (...BECAUSE IT WON-T BE AROUND LATER) RJ DLN DISPLAY LINE WHILE ITS STILL AROUND SX6 B1 FLAG LINE DISPLAYED SA6 SECF ERA1 SA1 ETPNT RJ DEL DELETE LINE EQ EXIT FIND SPACE 4,10 *** FIND - FIND A STRING. * FIND EQ EXIT (*SEC* DOES ALL THE WORK) INSERT SPACE 4,10 *** INSERT - INSERT A STRING AT A SPECIFIC COLUMN. * INSERT SB2 HN-1 SB3 HNL SA1 EVETO ZR X1,INS1 IF NOT VETO SB2 KN-1 SB3 KNL SX6 B1 SA6 SECK NOTE IN *KN* INS1 SA5 HNL SA4 S1L IX6 X5+X4 SX0 X6-N.LINE-1 PL X0,EXIT1 IF LINE TOO LONG SA1 EZONE SX3 X1 IX4 X4+X3 IX7 X5-X3 NG X7,OVERLAY IF BEYOND EOL, SAME AS *OVERLAY* SA6 B3 STORE NEW LENGTH MOVE X7+1,HN+X3-1,B2+X4 SA1 EZONE SX3 X1 SA5 S1L MOVE X5,S1,B2+X3 SX0 B2+1-HN ZR X0,EXIT IF LAST MOVE NOT NEEDED SA1 EZONE SX3 X1-1 MOVE X3,HN,B2+B1 EQ EXIT DONE MARK SPACE 4,10 *** MARK - SET MARK INDICATORS. * MARK SA1 ETPNT SA5 X1+TTPT MX0 -1 LX0 21-0 BX6 -X0+X5 SET MARK BIT SA6 A5 EQ EXIT EXIT PRINT SPACE 4,10 *** PRINT - PRINT LINES IN THE CURRENT FILE. * PRINT EQ EXIT (*SEC* DOES ALL THE WORK) OVERLAY SPACE 4,10 *** OVERLAY - OVERLAY A STRING AT A PRECISE COLUMN. * OVERLAY SA1 EVETO SB2 HN-1 SB3 HNL ZR X1,OVE1 IF NOT VETO SA1 HNL MOVE THE LINE TO KN BX6 X1 SA6 KNL MOVE X6,HN,KN SX6 B1 SA6 SECK SB2 KN-1 SB3 KNL OVE1 SA5 S1L LENGTH OF STRING SA4 EZONE SX4 X4 IX7 X4+X5 LAST COLUMN SX7 X7-1 SX0 X7-N.LINE-1 PL X0,EXIT1 IF LINE TOO LONG SA3 B3 BLANK FILL, IF NEEDED SX6 1R OVE2 IX0 X3-X4 BLANK FILL LOOP PL X0,OVE3 IF DONE FOLLING SX3 X3+B1 SA6 B2+X3 EQ OVE2 LOOP AGAIN OVE3 SX3 X3-1 IX0 X3-X7 PL X0,OVE4 IF LINE ISN-T EXTENDED SA7 B3 OVE4 MOVE X5,S1,B2+X4 OVERLAY EQ EXIT REMOVE SPACE 4,10 *** REMOVE - REMOVE A STRING. * REMOVE BSS 0 SA4 EVETO SB2 HN-1 SB3 HNL SA5 ESN FETCH STRING COUNT ZR X4,REM2 IF VETO NOT REQUIRED SA4 SESD START OF STRING NZ X5,REM1 IF STRING EXISTS SA4 B3 MOVE ENTIRE LINE SX4 X4+B1 REM1 BSS 0 MOVE X4-1,HN,KN MOVE UNAFFECTED PART OF LINE SX6 B1 SA6 SECK SB2 KN-1 SB3 KNL REM2 BSS 0 ZR X5,REM4 IF NO STRING REM3 BSS 0 SA5 SESF SA1 SECM IX6 X1-X5 COLUMN BIAS SA6 A1 SA1 HNL IX6 X1-X5 NEW LINE LENGTH SA6 B3 SA4 SESD IX6 X4+X5 IX1 X1-X6 MOVE X1+B1,HN+X6-1,B2+X4 EQ EXIT REM4 BSS 0 HERE IF REMOVING ZONE RANGES NOT A STRING SA5 EZONE SX5 X5 ZR X5,GEI51 IF ZONE = ZERO SA5 ENZONE SA1 HNL BX6 X1 SA6 B3 STORE LINE LENGTH SB2 B2+B1 ZR X5,GEI51 IF NO ZONES GIVEN EITHER SA2 EECI MX7 1 LX7 BREMOD-59 BX7 -X7*X2 SA7 A2 CLEAR REMOD FLAG REM5 BSS 0 SA2 EZONE+X5-1 SA4 B3 LINE LENGTH SX3 X2-1 START ZONE - 1 AX2 30 END OF ZONE RANGE IX1 X4-X2 MOVE LENGTH MI X1,REM6 IF NOTHING TO REMOVE IX6 X1+X3 NEW LENGTH SA6 A4 RESET LINE LENGTH MOVE X1,B2+X2,B2+X3 SX5 X5-1 NEXT ZONE RANGE NZ X5,REM5 IF MORE TO DO EQ EXIT DONE REM6 BSS 0 MX7 X4-X3 MIN(LINE LENGTH, START ZONE - 1) SX5 X5-1 NEXT ZONE SA7 A4 UPDATE LINE LENGTH NZ X5,REM5 IF MORE ZONE RANGES EQ EXIT DONE SUFFIX SPACE 4,10 *** SUFFIX - ADD A STRING TO THE END OF THE LINE. * SUFFIX SA5 HNL SB2 HN SB3 HNL SA1 EVETO ZR X1,SUF1 IF NOT VETO MOVE X5,HN,KN SA5 HNL SB2 KN SB3 KNL SX6 B1 SA6 SECK SUF1 SA4 S1L LENGTH OF SUFFIX STUFF IX6 X5+X4 LENGTH OF NEW LINE SA6 B3 SX0 X6-N.LINE-1 PL X0,EXIT1 IF LINE MUCH TOO LONG MOVE X4,S1,B2+X5 SUFFIX IT EQ EXIT ALL DONE TOP SPACE 4,10 *** TOP - SET THE EDIT POINTER TO TOP. * TOP EQ EXIT (*SEC* DOES THE WORK) UP SPACE 4,10 *** UP - MOVE THE EDIT POINTER UP. * UP EQ EXIT (*SEC* DOES ALL THE WORK) ZONE SPACE 4,8 *** ZONE - PRINT ZONE RANGE OF A STRING. * ZONE BSS 0 * CHECK FOR INITIAL ENTRY. SA1 ECOUNT MX0 1 BX0 -X0 (X0) = A COUNT OF *ALL* (SEE SEI16) IX0 X0-X1 NZ X0,ZON1 IF NOT FIRST TIME SX0 B1 IX6 X1-X0 DECREMENT COUNT SA6 A1 MARK FIRST TIME HERE (FOR THIS LINE) PUTI KN SET *PUT* FWA PUTT ( Z),B6 ZON1 BSS 0 * UPDATE STRING-SEARCH RELATED INFORMATION. SA1 SECM COLUMN BIAS FOR ZONE SA2 SESF STRING LENGTH BX6 X1 SA5 SESD START COLUMN OF STRING IX7 X2+X5 NEW START COLUMN FOR SEARCH SA6 DECB SA7 DECA * PUT THE ZONE RANGE. SETTING *SECH* ALLOWS *SEC* * TO FIND MULTIPLE OCCURRENCES OF THE ZONE STRING. PUTT (,) PUTD X5,,,B6 PUT ZONE START SA1 SESF (X1) = LENGTH OF STRING SX1 X1-1 ZR X1,ZON2 IF STRING IS 1 CHARACTER LONG IX5 X1+X5 (X5) = LAST ZONE OF STRING PUTT (-),B6 PUTD X5,,,B6 PUT ZONE END ZON2 BSS 0 SX6 B1+ SA6 SECH SET LINE CHANGED TO FAKE *SEC* EQ EXIT DONE TITLE 4,0 OVERLAY - EDIT PRIMARY SUBROUTINES. ** GEC - GET EDIT COMMAND. * * THIS ROUTINE FETCHES THE NEXT EDIT COMMAND AND SETS ALL THE * PROCESSING VALUES. IF A MACRO IS EXECUTED, WE UNPACK THE NEXT * COMMAND IN THE MACRO. IF NOT, WE GET THE NEXT COMMAND FROM * INPUT. * * CERTAIN COMMANDS ARE PROCESSED BY THIS ROUTINE. IT HANDLES * DEFINITIONS. THE REPEAT COMMAND IS PROCESSED HERE. * * EXIT ALL COMMAND INFORMATION IS SET UP * * USES ALL * * CALLS GEC SUBR BX6 X6-X6 SA6 GECA UNSET MACRO DEFINITION FLAG GEC1 RJ GEI GET EDIT INPUT SA1 TICI ZR X1,GEC1 IF NOTHING THERE * CHECK THE COMMAND SA1 TICI SX0 X1-CMAC NZ X0,GEC2 IF NOT A MACRO COMMAND SA1 GECA TOGGLE DEFINITION FLAG BX6 -X1 SA6 A1 PL X6,GEC1 IF END OF MACRO BX6 X6-X6 ZERO MACRO DEFINITION SA6 MDFP SA6 MDAL EQ GEC1 * NOT THE *MACRO* COMMAND GEC2 SA1 GECA PL X1,GECX IF NOT A MACRO DEFINITION, EXIT SA1 TICI SA1 X1+TECI INDEX INTO SYNTAX TABLE LX1 59-BMACOK MI X1,GEC3 IF OKAY WITHIN A MACRO ERROR (COMMAND NOT ALLOWED WITHIN A MACRO),GEC1 GEC3 BSS 0 RJ ACM ADD COMMAND TO MACRO ZR B7,GEC1 IF NOT TOO LONG ERROR (MACRO TOO LONG, LAST LINE IGNORED),GEC1 GECA BSS 1 MACRO DEFINITION FLAG (NG IF MACRO) GEI SPACE 4,10 ** GEI - GET EDIT INPUT. * * THIS ROUTINE READS AND CRACKS A COMMAND FROM THE * TERMINAL. THE CRACKED INFORMATION (CDC FORMAT) IS * PLACED IN TICI. IF THERE ARE FURTHER COMMANDS ON * THE INPUT LINE (SEPARATED BY SEMICOLONS), SHOVE * THE REMAINING CHARACTERS INTO *LL* FOR PROCESSING * ON OUR NEXT CALL. * * ENTRY (LL) SET UP OR EMPTY * * EXIT (LL) CONTAINS REST OF LINE (IF ANY) * (TICI) HAS COMMAND IN CDC FORMAT * * USES ALL * * CALLS XXX GEI SUBR SA1 LLL LAST LINE LENGTH ZR X1,GEI1 IF NO LAST LINE INFORMATION SA5 LLL BX6 X5 SA6 INL NUMBER OF CHARACTERS REMAINING IN LINE MOVE X5,LL,IN SX6 B1 LINE WAS LEFT-JUSTIFIED WHEN SAVED SA6 INC SO STARTING COLUMN EQUALS ONE EQ GEI4 GEI1 RJ CCT CHECK CURRENT TIME SA1 BRIEF NZ X1,GEI3 IF BRIEF GEI2 SA1 EPROMPT NZ X1,GEI3 IF ALREADY PROMPTED PRINT ("EPC"),ES GEI3 TREAD ZR X1,GEI4 IF NOT STATUS SX6 /UTL/VEST EDIT STATUS SA6 COMMON LOAD 2 EQ GEI1 * *IN* CONTAINS THE INPUT LINE. INITIALIZE OUR FLAGS GEI4 BX6 X6-X6 SA6 GEIA SET DEFAULT SUBJECT STRING SA6 EPROMPT * START SCANNING THE INPUT LINE GEI5 GNA NUM,AO ZR B7,GEI1 IF EOL EQ B7,B1,GEI11 IF COMMAND SX0 B7-2 ZR X0,LNI IF LINE NUMBERED INPUTTING SX0 B7-3 NZ X0,GEI6 IF NOT DELIMITER, DEFINATELY ILLEGAL * DELIMITER ENCOUNTERED BEFORE COMMAND. POSSIBILITIES: * * BLANK, COMMA SKIP * PERIOD TOGGLE BRIEF * SEMICOLON END OF LINE * DOLLAR SIGN STRING VARIABLE NAME * QUESTION MARK ELABORATE LAST COMMAND * OTHER ILLEGAL SX0 X6-1R ZR X0,GEI5 BLANK, SKIP SX0 X6-1R, ZR X0,GEI5 COMMA, SKIP SX0 X6-1R; ZR X0,GEI4 SEMICOLON, START OF NEW COMMAND SX0 X6-1R. ZR X0,GEI7 PERIOD, TOGGLE BRIEF SX0 X6-1R"QM" ZR X0,GEI8 QUESTION MARK, SHOW LAST ERROR SX0 X6-1R$ ZR X0,GEI9 DOLLAR SIGN, STRING VARIABLE SX0 X6-1R"EP" NZ X0,GEI6 IF NOT BANG CHARACTER, ERROR SX6 /CCC/VBAT SA6 COMMON RJ FCL FLAG CURRENT EDIT LINE LOAD 3 GEI6 ERROR (UNEXPECTED CHARACTER BEFORE COMMAND),GEI3 GEI7 SA1 BRIEF SX0 B1 IX6 X0-X1 SA6 A1 EQ GEI5 GEI8 SA1 LERR PRINT ELABORATION OF LAST ERROR ZR X1,GEI2 IF NO LAST ERROR WRITEC O,X1 BX6 X6-X6 CLEAR ERROR SA6 LERR EQ GEI2 * DOLLAR SIGN, GET STRING VARIABLE GEI9 SA1 GEIA NZ X1,GEI10 IF WE ALREADY HAVE ONE SA1 INC SA2 INL IX0 X2-X1 NG X0,GEI10 IF EOL SX6 X1+B1 INCR INC SA6 A1 SA1 X1+IN-1 GET THE TRAILING CHARACTER ZR X1,GEI10 IF ZERO CHAR SX0 X1-1R0 PL X0,GEI10 IF NOT A-Z BX6 X1 SA6 GEIA EQ GEI5 GEI10 ERROR (ILLEGAL STRING VARIABLE) * COMMAND FOUND. SEARCH FOR IT. (GNA-S RESULTS ARE STILL * AROUND). GEI11 SB7 B6+B6 *2 (FORM MASK) SB7 B7+B6 *3 SB7 B7+B7 *6 SB7 B7-B1 *6-1 MX0 1 AX0 B7 MAKE THE MASK BX1 X0*X6 SB7 B0 SX2 B6 GEI12 SA5 B7+TECN ZR X5,GEI37 IF COMMAND UNKNOWN SB7 B7+B1 SX3 X5 IX3 X2-X3 NG X3,GEI12 IF TOO SHORT BX5 X0*X5 IX6 X5-X1 NZ X6,GEI12 IF NO MATCH * FOUND THE COMMAND. GET SYNTAX PROCESSING INFO. SX6 B7-B1 SAVE COMMAND ORDINAL SA6 GEIB SA1 TECI+X6 GET TECI WORD ZR X1,*+400000B IF MISSING SX6 B1 SA6 GEIC BX6 X1 SA6 GEID SAVE IT BX5 X6 * VERIFY STRING VARIABLE OK SA1 GEIA ZR X1,GEI13 NO STRING GIVEN LX6 59-BSVOK NG X6,GEI13 STRING WAS OK ERROR (STRING VARIABLE ILLEGAL WITH THIS COMMAND) * PROCESS SPECIAL-PROCESSING-JUMP GEI13 LX5 59-BSPECIAL PL X5,GEI14 IF NOT SPECIAL SA1 GECA SEE IF DEFINING A MACRO MI X1,GEI50 SPECIAL COMMANDS ILLEGAL IN A MACRO SA1 GEID SPECIAL, GO TO THE COMMAND AX1 1 SB7 X1 JP B7 JUMP TO COMMAND * PARAMETER PROCESSING GEI14 BX6 X6-X6 CLEAR MINUS INDICATOR SA6 GEIE GEI15 GNA NUM,AO ZR B7,GEI32 IF EOL SX0 X6-1R; ZR X0,GEI32 IF SEMICOLON, END SX0 X6-1R ZR X0,GEI15 IF BLANK, SKIP SX0 X6-1R, ZR X0,GEI15 IF COMMA, SKIP SX0 X6-1R- NZ X0,GEI16 IF NOT DASH SX6 B1 SET DASH FLAG SA6 GEIE EQ GEI15 GEI16 NG B7,GEI38 IF PARAMETER TOO LONG SX0 B7-2 ZR X0,GEI17 IF NUMERIC, COUNT NE B7,B1,GEI18 IF DELIMITER FOR A STRING * ALPHABETIC PARAMETER ... FIND IT IN OUR TABLE SB7 B6+B6 *2 SB7 B7+B6 *3 SB7 B7+B7 *6 SB7 B7-B1 *6-1 MX0 1 AX0 B7 MAKE THE MASK BX1 X0*X6 SB7 TEPN RJ SLS SEARCH LIST ZR X6,GEI39 IF PARAMETER UNKNOWN * GET SUBSEQUENT PARAMETER, IF ANY SX7 B7-TEPN GET PARAMETER ORDINAL SA7 GEIF BX6 X6-X6 SA6 GEIG ZERO F1 SA6 GEIH ZERO F2 EQ GEI19 GO ENTER THE PARAMETER IN TICI * NUMERIC PARAMETER - DECODE IT GEI17 BX5 X6 RJ DXB DEIMAL TO BINARY SA6 GEIG SET F1 BX6 X6-X6 SA6 GEIH SET F2 SX6 PCOU SA6 GEIF SET COUNT FLAG EQ GEI19 * STRING - SET UP TO ENTER FIRST CDC WORD GEI18 SA6 GEII SAVE DELIMITER BX6 X6-X6 SA6 GEIH ZERO F1 , F2 SA6 GEIG SA1 GEIE NZ X1,GEI40 IF DASH BEFORE STRING SX6 PSTR SA6 GEIF * GENERATE THE FIRST (AND USUALLY ONLY) WORD OF THE CDC-FORM * OF THIS PARAMETER. A SYNTAX CHECK IS IN ORDER AT THIS POINT * * NOTE: GEIG = F1 * GEIH = F2 * GEIE = DASH FLAG * GEIF = PARAMETER ORDINAL GEI19 SA1 GEIF CHECK FOR LEGAL PARAMETER SA2 GEID SB7 X1 LX2 B7 PL X2,GEI41 IF ILLEGAL FOR THIS COMMAND SA2 GEIE CHECK MINUS IS LEGAL ZR X2,GEI20 IF NO MINUS SA2 TEPI+X1 LX2 59-IMINUS NG X2,GEI20 IF MINUS IS OK ERROR (ILLEGAL MINUS) * SEARCH FOR AND DELETE ANY PREVIOUSLY PROCESSED PARAMETER * OF THIS TYPE. GEI20 SX6 TICI+1 SA6 SCDA SA1 GEIC SX6 TICI+X1 SA6 SCDB LWA+1 OF SEARCH GEI21 SA1 GEIF PARAMETER ORDINAL TO SEARCH FOR BX2 X2-X2 DON-T ADVANCE RJ SCD SEARCH CDC TABLE MI X6,GEI22 IF END OF TABLE ENCOUNTERED IX2 X6+X7 FWA OF SOURCE SA1 GEIC IX7 X1-X7 DECREMENT POINTER SA7 A1 SX7 TICI+X7 SA7 SCDB UPDATE LWA+1 FOR SEARCH SX1 TICI+X1 IX1 X1-X2 NUMBER OF WORDS TO MOVE DOWN ZR X1,GEI21 IF NO WORDS TO MOVE MI X1,*+400000B WOOPS MOVE X1,X2,X6 EQ GEI21 CHECK FOR MORE PARAMETERS GEI22 SA1 GEIF SA2 GEIG SA3 GEIH LX2 18 LX3 2*18 SA4 GEIE LX4 59-0 BX6 X2+X3 BX6 X6+X4 BX6 X6+X1 SX0 B1 LENGTH = 1 LX0 3*18 BX6 X6+X0 SA1 GEIC MAKE SURE THERE IS ROOM SX0 X1-N.CDW PL X0,GEI42 IF TICI OVERFLOW SA6 X1+TICI STORE PARAMETER WORD SX6 X1+B1 UPDATE GEIC SA6 A1 BX6 X6-X6 CLEAR DASH FLAG SA6 GEIE * PROCESS POST PARAMETER-NAME INFO SA1 GEIF SX0 X1-PDIS ZR X0,GEI28 IF DISPLAY SX0 X1-PZON ZR X0,GEI28 IF ZONE SX0 X1-PSTR NZ X0,GEI15 IF NOT STRING * PROCESS THE REST OF THE STRING. (GEII) HAS THE DELIMITER * AND (GEID) HAS THE TECI WORD FOR THIS COMMAND. SA1 GEID GET MAX STRINGS LX1 0-BMST MX0 -2 BX6 -X0*X1 SA6 GEIJ ZR X6,GEI43 IF NO STRINGS ALLOWED SA1 GEIC SX6 X1-1 SA6 GEIM BX6 X6-X6 SA6 GEIK SA6 GEIL * GENERATE HEADER FOR NEW STRING GEI23 SA1 GEIK CHECK COUNT SA2 GEIJ IX0 X2-X1 ZR X0,GEI27 IF ALL DONE SX6 X1+B1 COUNT NEXT STRING/ELLIPSIS SA6 A1 SA1 GEIM STRING HEADER _ BX6 X1 SA6 GEIP SX7 PSTR CDC HEADER SX0 B1 LX0 54-0 BX7 X7+X0 SA7 X6+TICI SX6 X6+B1 SA6 A1 INCR STRING _ * FIND NEXT DELIMITER GEI24 SA2 INC BX7 X2 X7 _ START OF STRING SA7 GEIN SA3 INL SA4 GEII OUR DELIMITER GEI25 IX0 X3-X2 NG X0,GEI26 IF EOL SA1 X2+IN-1 IX0 X1-X4 ZR X0,GEI26 IF DELIMITER SX2 X2+B1 EQ GEI25 * X2 _ END OF STRING + 1 * X7 _ START OF STRING GEI26 SX6 X2+B1 SA6 INC IX6 X2-X7 SA6 GEIO STRLEN X6 CHECK FOR A FIT SA5 GEIM IX7 X6+X5 SX0 X7-N.CDW+1 PL X0,GEI42 IF NO ROOM FOR IT IN TICI SA7 A5 SA1 GEIP UPDATE LENGTH IN HEADER WORD SA1 X1+TICI LX6 54 IX6 X6+X1 ADD NEW LENGTH SA6 A1 SA1 GEIO BX6 X1 SB2 X5+TICI SA1 GEIN SA1 X1+IN-1-1 RJ PKS PACK STRING SA1 GEIL BX6 X6-X6 CLEAR SA6 A1 ELLIPSIS FLAG NZ X1,GEI23 IF IT WAS ELLIPSIS, NEXT * JUST FOUND A STRING. SEE IF IT IS REALLY AN ELLIPSIS, AND * IF ELLIPSES ARE ALLOWED. SA2 INC CHECK NEXT CHARACTER ON INPUT SA3 INL IX0 X3-X2 NG X0,GEI27 IF EOL NOT AN ELLIPSIS SA4 GEII SA1 X2+IN-1 IX0 X1-X4 NZ X0,GEI23 IF NOT DOUBLE DELIMITER SX6 X2+B1 MOVE PAST THE SECOND DELIM. SA6 A2 UPDATE *INC* SA1 GEID LX1 59-BELLIP PL X1,GEI44 IF ELLIPSES ARE ILLEGAL SA1 GEIP CHECK HEADER WORD SA2 X1+TICI MX0 -18 BX6 X0*X2 CLEAR *STRING* INDICATION SX0 PELL BX6 X0+X6 ADD ELLIPSIS SA6 A2 SA6 GEIL SET ELLIPSIS PARAMETER EQ GEI24 GET REST OF ELLIPSIS * END OF STRING PROCESSING, FINISH UP GEI27 SA1 GEIM UPDATE POINTER BX6 X1 SA6 GEIC EQ GEI15 * ZONE AND DISPLAY COLUMNS GEI28 SA1 GEIC SX6 X1-1 SA6 GEIP SA1 X6+TICI NG X1,GEI15 IF MINUS, NOTHING FOLLOWS BX6 X6-X6 SA6 GEIL COUNT OF COLUMNS GIVEN SA1 GEIF GEI29 BX6 X6-X6 GET A RANGE (ASSUME 0-EOL) SA6 GEIG SX6 N.LINE SA6 GEIH RJ GCN GET COLUMN NUMBER GT B7,B1,GEI15 IF NOT OUR MAN SA1 GEIL SX7 X1+B1 SA7 A1 SX1 X7-N.COLS-1 PL X1,GEI49 IF TOO MANY COLUMNS EQ B7,B1,GEI30 IF DASH OR = SA6 GEIG SET FIRST AND LAST SA6 GEIH RJ GCN GET COLUMN NUMBER NE B7,B1,GEI31 IF NOT A DASH - JUST 1 NUMBER GEI30 SX6 N.LINE SA6 GEIH RJ GCN GET COLUMN NUMBER GT B7,B1,GEI31 IF SECOND COLUMN ASSUMED EQ B7,B1,GEI45 IF TWO DASHES, ERROR SA6 GEIH GEI31 SA4 GEIG CHECK AND ASSEMBLE COLUMN RANGE SA5 GEIH IX0 X5-X4 NG X0,GEI46 IF RANGE BACKWARDS SA1 GEIC SX6 X1+B1 SX0 X1-N.CDW PL X0,GEI42 IF NO ROOM SA6 A1 LX5 30 FORM ENTRY BX6 X5+X4 SA6 X1+TICI STORE IT SA1 GEIP UPDATE LENGTH OF PARAMETER SA2 X1+TICI SX0 B1 LX0 18 IX6 X0+X2 LX0 2*18 IX6 X0+X6 UPDATE LENGTH SA6 A2 RJ GCN GET COLUMN NUMBER SX0 X6-1R, NZ X0,GEI15 IF NOT COMMA, END SA1 INC MOVE _ OVER THE COMMA SX6 X1+B1 SA6 A1 EQ GEI29 GET MAYBE NEW COLUMNS * COUNT THE NUMBER OF STRINGS IN OUR COMMAND * WE SEARCH THE CDC JUST GENERATED AND VERIFY THAT * THE STRING COUNT IS IN RANGE GEI32 SX6 TICI+1 FWA OF SEARCH SA6 SCDA SA1 GEIC SX6 TICI+X1 SA6 SCDB LWA+1 OF SEARCH BX2 X2-X2 FLAG NO ADVANCE FIRST TIME BX7 X7-X7 GEI33 SA7 GEIK STORE COUNTER SX1 PSTR RJ SCD SEARCH CDC TABLE MI X6,GEI34 IF END OF TABLE REACHED SA2 GEIK SX7 X2+B1 SX2 B1 FLAG ADVANCE EQ GEI33 GEI34 SA5 GEID BX4 X5 LX4 0-BNST MX6 -2 BX4 -X6*X4 SA1 GEIK NUMBER OF STRINGS RECIEVED IX0 X1-X4 NG X0,GEI47 IF NOT ENOUGH BX4 X5 LX4 0-BMST BX4 -X6*X4 IX0 X4-X1 MI X0,GEI48 SA1 GEIB SA2 GEIC LENGTH SA4 GEIA SUBJECT STRING LX2 18 BX6 X1+X2 LX4 -6 SUBJECT STRING TO BITS 59-54 BX6 X6+X4 SA6 TICI BX6 X6-X6 SA6 LLL SA1 INL SA2 INC IX0 X1-X2 SB7 B0 NG X0,GEI35 IF EOL SX6 X0+B1 SA6 LLL MOVE X6,X2+IN-1,LL * PROCESS REPEATABLE COMMANDS GEI35 SA1 GEID LX1 59-BREP PL X1,GEI36 IF NOT REPEATABLE SA5 GEIC MOVE X5,TICI,TLCI MOVE INTO LAST COMMAND AREA GEI36 SA1 GEID LX1 59-BSPECIAL PL X1,GEIX IF NOT SPECIAL, EXIT BX6 X6-X6 CLEAR COMMAND INFORMATION SA6 TICI SINCE IT HAS ALREADY BEEN EXECUTED EQ GEIX EXIT * ERRORS GEI37 BSS 0 RJ PRC PROCESS READY COMMAND ERROR (UNKNOWN COMMAND) GEI38 ERROR (PARAMETER NAME TOO LONG) GEI39 ERROR (UNKNOWN PARAMETER) GEI40 ERROR (ILLEGAL DASH) GEI41 ERROR (PARAMETER/COMMAND MIS-MATCH) GEI42 ERROR (PARAMETERS ARE TOO MANY OR TOO LONG) GEI43 ERROR (STRINGS ARE ILLEGAL WITH THIS COMMAND) GEI44 ERROR (ELLIPSIS ILLEGAL WITH THIS COMMAND) GEI45 ERROR (TWO DASHES IN *ZONE* OR *DISPLAY*) GEI46 ERROR (*ZONE* OR *DISPLAY* COLUMNS BACKWARDS) GEI47 ERROR (NOT ENOUGH STRINGS) GEI48 ERROR (TOO MANY STRINGS) GEI49 ERROR (TOO MANY COLUMN RANGES) GEI50 ERROR (SPECIAL COMMANDS ILLEGAL IN A MACRO) GEI51 ERROR (REQUIRED ZONES ARE MISSING OR ZERO) GEIA BSS 1 SUBJECT STRING (1-26) OR ZERO GEIB BSS 1 COMMAND ORDINAL GEIC BSS 1 TICI POINTER (NEXT WORD, ORDINAL OF) GEID BSS 1 TECI WORD FOR THIS COMMAND GEIE BSS 1 NZ IF DASH ENCOUNTERED GEIF BSS 1 PARAMETER ORDINAL OF CURRENT PARAMETER GEIG BSS 1 F1 GEIH BSS 1 F2 GEII BSS 1 STRING DELIMITER GEIJ BSS 1 NUMBER OF STRINGS ANTICIPATED GEIK BSS 1 NUMBER OF STRING ENCOUNTERED GEIL BSS 1 NZ IF WORKING ON AN ELLIPSIS GEIM BSS 1 TEMP TICI _ (ORDINAL) GEIN BSS 1 START OF STRING GEIO BSS 1 LENGTH OF STRING GEIP BSS 1 _ STRING HEADER WORD SPACE 4,10 CEC SPACE 4,10 ** CEC - CALL EDIT COMMAND. * * THIS ROUTINE SETS UP AND CALLS *SEC* TO SETUP AND * EXECUTE AND EDIT COMMAND. THIS IS QUITE SIMPLE IN THE * CASE OF A NORMAL EDIT INPUT, BUT NOT SO FOR A MACRO * CALL, WHICH IS WHY THIS ROUTINE EXISTS. THE USER * MAY PUT A COUNT ON THE MACRO CALL, MEANING THAT WE * MUST EXECUTE THE MACRO THAT MANY TIMES, MEANING WE * HAVE TO LOOP THROUGH ALL THE COMMANDS IN THE MACRO * MORE THAN ONCE. * * SO, WE LOOP THROUGH THE MACRO UNTIL THE *TOP/EOF* * FLAG IS SET OR UNTIL THE COUNT RUNS OUT. * * THIS ROUTINE ALSO DISPLAYS THE POST-COMMAND INF- * FORMATION AND THE PROMPT CHARACTER. * * ENTRY EDITING FLAGS SET UP WITH THE LATEST EDIT * INPUT * * USES ALL * * CALLS SEC, IMC, NMC, BDL, CDD CEC SUBR SA1 ECOMMAND SX0 X1-CDEF ZR X0,DEFAULT IF DEFAULT COMMAND SA1 EMACRO NZ X1,CEC1 IF MACRO CALL RJ SEC SEARCH AND EXECUTE EDIT COMMAND SA1 SECB GET THE COUNT BX6 X1 SA6 CECB SA1 EECI LX1 59-BNPRMPT NG X1,CECX IF NO PROMPT NEEDED EQ CEC4 * MACRO - SET UP LOOP TO CALL *SEC*. CEC1 SA1 ECOUNT SET UP *SEC* CALL COUNT BX6 X1 SA6 CECA SX6 B0 SA6 CECB SA1 ECOMMAND BX6 X1 SA6 CECC SB7 B1 CEC2 SA1 CECC RJ NMC NEXT MACRO COMMAND NZ B7,CEC3 IF END OF MACRO BX1 X6 RJ SEI SETUP EDIT INFORMATION RJ SEC SEARCH AND EXECUTE EDIT COMMAND SA1 SECA GET TOP/EOF FLAG SB7 B0 ZR X1,CEC2 IF NO TOP/EOF HIT EQ CEC4 CEC3 SA1 CECB COUNT THE MACRO RUN SX6 X1+B1 SA6 A1 SA1 CECA IX0 X6-X1 SB7 B1 FOR A NEW RUN THROUGH MACRO NG X0,CEC2 IF MORE RUNS THROUGH MACRO * FINISH UP. PRINT TOP/EOF IF RELEVANT CEC4 SX6 B1 SA6 EPROMPT PUTI JN SB6 B1 SET *STCOL* IFNOSBE 1 SB6 B1+B1 SET *STCOL* FOR *NOS/BE* PUTD CECB,,,B6 PUT THE COUNT SB7 HN SA2 HNL SA1 SECA CHECK TOP/EOF ZR X1,CEC6 IF NO TOP/BOTTOM R= X2,2 IX0 X1+X2 ZR X0,CEC5 IF *BOT* IX0 X1-X2 NZ X0,CEC6 IF NOT *TOP* PUTT (TOP),B6+B1 EQ CEC6 CEC5 BSS 0 PUTT (BOT),B6+B1 CEC6 PUTT ("EPC"),B6 PUT EDIT PROMPT CHARACTER IFNOS SX1 B6 NEXT COLUMN TO PUT LX1 59-0 NG X1,CEC7 IF ODD COLUMN PUTT ('"ES"),B6 PAD WITH ZERO CHARACTER (CODE OTHER) EQ CEC8 CEC7 PUTT ("ES") CEC8 BSS 0 ENDIF PUTZ PRINTC JN EQ CECX EXIT CECA BSS 1 MAXIMUM MACRO CALLS CECB BSS 1 CURRENT MACRO COUNT CECC BSS 1 MACRO COMMAND NAME SPACE 4,10 SEI SPACE 4,10 ** SEI - SETUP EDIT INFORMATION. * * THIS ROUTINE TAKES A COMMAND IN *CDC* FORMAT AND SETS * UP ALL THE WORKING EDIT PARAMETERS USING THE CURRENT * DEFAULTS AS A REFERENCE. * * ENTRY X1 _ COMMAND IN *CDC* FORM * * EXIT WORKING FLAGS ARE SET UP * * USES ALL * * CALLS SEI16 SA1 EALL SET UP *ALL* ZR X1,SEI17 IF NOT *ALL* MX6 1 BX6 -X6 A VERY BIG INTEGER SA6 ECOUNT SEI17 SA2 EECI SA1 EZONE LX2 59-BRZONE ZONES REQUIRED FLAG PL X2,SEIX IF ZONES NOT REQUIRED SX1 X1 GET LEFTMOST ZONE NZ X1,SEIX IF FIRST ZONE NOT ZERO ERROR (REQUIRED ZONES ARE MISSING),EDIT SEI SUBR SX6 X1+B1 SA6 SEIA SAVE CDC ADDRESS MOVE DEND-DSTART,DSTART,ESTART MOVE IN DEFAULTS * INITIALIZE NON-DEFAULTABLE STUFF BX6 X6-X6 SA6 ELIM SA6 EMARK SA6 EREMARK SA6 ESN SA6 ESTSRCH SA6 EPROMPT SA6 ENVETO SA6 ECOUNT * SET UP COMMAND PARAMETERS. SEIA _ NEXT WORD TO * PROCESS. COMMAND HEADER WORD FIRST. SA4 SEIA SA5 X4-1 BX6 X5 LX6 0-18 SX6 X6-1 WORDS LEFT IN CDC ENTRY IX6 X6+X4 SA6 SEIB SX6 X5 GET COMMAND ORDINAL SA6 ECOMMAND BX6 X5 AX6 54 SA6 ESUBJECT SA1 X5+TECI BX6 X1 SA6 EECI LX1 0-BMACRO MX0 -1 BX6 -X0*X1 SA6 EMACRO * SETUP PARAMETERS FOR CERTAIN COMMANDS SA1 ECOMMAND SX0 X1-CTOP ZR X0,SEI14 IF -TOP-, SET TOP SX0 X1-CFIN ZR X0,SEI15 IF -FIND-, SET DISPLAY SX0 X1-CPRI ZR X0,SEI15 IF -PRINT-, ALSO SET DISPLAY SX0 X1-CZON NZ X0,SEI1 IF NOT *ZONE* COMMAND MX6 1 BX6 -X6 A COUNT OF *ALL* (SEE SEI16) SA6 ECOUNT SET COUNT FOR *ZONE* COMMAND * SET AND PROCESS THE PARAMETERS SEI1 SA1 SEIA GET _ SA2 SEIB GET LAST IX0 X1-X2 ZR X0,SEI16 IF ALL DONE PL X0,*+400000B SA3 X1 GET HEADER WORD SB2 X3 GET PARAMETER ORDINAL SA4 TEPI+B2 GET PARAMETER INFO BX5 X4 LX5 59-ISPECIAL NG X5,SEI3 IF SPECIAL PROCESSING NEEDED * NORMAL PARAMETER - EXTRACT AND TOGGLE -N- BIT. SA1 SEIA INCREMENT SX6 X1+B1 SA6 A1 BX6 -X3 TOGGLE IT LX6 0-59 POSITION IN BIT 0 SX0 B1 BX7 X0*X6 EXTRACT IT SA7 X4 STORE PARAMETER VALUE BX5 X4 LX5 59-IDEFAULT NG X5,SEI1 IF DEFAULTABLE, WE ARE DONE SX7 X7-1 = -1 OR 0 NZ X7,SEI2 IF -1 SX7 B1 SEI2 SA7 X4 EQ SEI1 * SPECIAL PARAMETERS SEI3 SX0 X3-PCOU ZR X0,SEI4 IF COUNT SX0 X3-PZON ZR X0,SEI5 IF ZONE SX0 X3-PDIS ZR X0,SEI6 IF DISPLAY SX0 X3-PSTR ZR X0,SEI10 IF STRING SX0 X3-PELL ZR X0,SEI11 IF ELLIPSIS JP *+400000B IF UNKNOWN SPECIAL * COUNT SEI4 AX3 18 GET COUNT SX6 X3 SA6 ECOUNT SA1 SEIA INCR _ SX6 X1+B1 SA6 A1 EQ SEI1 * ZONE AND DISPLAY SEI5 SB2 ENZONE ZONE SB3 EZONE EQ SEI7 SEI6 SB2 ENDIS DISPLAY SB3 EDIS SEI7 PL X3,SEI8 IF NOT NEGATED BX6 X6-X6 SA6 B2 SET -NO COLUMNS- SX6 N.LINE LX6 30 SA6 B3 SA1 SEIA INCR _ SX6 X1+B1 SA6 A1 EQ SEI1 SEI8 BX4 X3 GET NUMBER OF RANGES AX4 18 SX6 X4 NZ X6,SEI9 IF COLUMN RANGES GIVEN SX6 B1 USE 0-N.LINE SA6 B2 SX6 N.LINE LX6 30 SA6 B3 SA1 SEIA INCR _ SX6 X1+B1 SA6 A1 EQ SEI1 SEI9 SA6 B2 MOVE RANGES (X6 = NUMBER OF RANGES) SA5 SEIA SX5 X5+B1 IX7 X5+X6 SA7 A5 MOVE X6,X5,B3 EQ SEI1 * STRING SEI10 SX7 -B1 EQ SEI12 SEI11 SX7 B0 SEI12 SA1 SEIA AX3 54 IX6 X3+X1 UPDATE SEIA FOR STRING/ELLIPSIS SA6 A1 SX1 X1+B1 X1 _ FIRST STRING TO UNPACK SA2 ESN SA2 X2+S12P GET _ THE UNPACKED STRING AREA SA7 X2-4 SX7 X2 SA7 SEIC SB4 X7 RJ UPS UNPACK STRING SA2 SEIC COMPUTE LENGTH OF LINE SX1 B4 LWA+1 OF UNPACKED LINE IX7 X1-X2 SA7 X2-2 STORE LENGTH SA3 X2-4 NG X3,SEI13 IF NOT ELLIPSIS SX1 A1+B1 SX6 B4 SA6 SEID RJ UPS UNPACK STRING SX1 B4 COMPUTE LENGTH OF ELLIPSIS SA2 SEID IX6 X1-X2 SA3 SEIC SA6 X3-4 * FINISH UP STRING/ELLIPSIS SEI13 SA1 ESN COUNT THE STRING SX6 X1+B1 SA6 A1 SA1 EECI BX2 X1 LX1 0-BSTSRCH LX2 0-BOSTSRCH BX6 X1+X2 BIT 0 SET IF STRING SEARCH NEEDED MX0 -1 BX6 -X0*X6 SA6 ESTSRCH SA1 SEIC SA2 X1-4 PL X2,SEI1 IF ELLIPSIS SA2 X1-2 NZ X2,SEI1 IF NOT A NULL STRING ERROR (NULL STRING ILLEGAL),EDIT EQ SEI1 DONE * SET UP FOR CERTAIN COMMANDS SEI14 SX6 B1 SA6 ETOP SET TOP FOR TOP EQ SEI1 SEI15 SA1 ENDIS NZ X1,SEI1 IF ALREADY HAVE DISPLAY SX6 B1 SA6 ENDIS SX6 N.LINE LX6 30 SA6 EDIS EQ SEI1 SEIA BSS 1 CDC ADDRESS SEIB BSS 1 LWA OF CURRENT CDC ENTRY SEIC BSS 1 STRING POINTER SEID BSS 1 START OF ELLIPSIS SEC SPACE 4,10 ** SEC - SEARCH AND EXECUTE EDIT COMMAND. * * THIS ROUTINE SEARCHES FOR AN APPROPRIATE LINE * AND CALLS THE EDIT COMMAND INTO ACTION. THIS IS * THE MAIN EDIT CONTROL ROUTINE - HANDLE WITH CARE. * * ENTRY EDIT VARIABLES SET UP (SEE *SEI*) * * EXIT SECA - 1 IF *TOP* HIT * - 2 IF POINTER AT *TOP* * --1 IF *EOF* HIT * --2 IF POINTER AT *EOF* * - 0 IF OK * SECB - COUNT OF OPERATIONS PERFORMED * * USES ALL * * CALLS DEC, UOL, DOL, DLN, GVR SEC36 SA1 ENDIS ZR X1,SEC37 IF NO DISPLAY SA1 EECI LX1 59-BDEND PL X1,SEC37 IF NO POST-COMMAND DISPLAY SA1 SECF NZ X1,SEC37 IF LINE ALREADY DISPLAYED RJ ELC ENSURE LINE IN CORE RJ DLN DISPLAY LINE * POST *ERASE* PROCESSING SEC37 SA1 ECOMMAND SX0 X1-CERA NZ X0,SEC39 IF NOT ERASE SA1 EPNT RJ DOL DOWN ONE LINE SA6 EPNT ZR B7,SEC38 IF NOT EOF * AFTER THE DELETE OUR LINE AND ALL SUBSEQUENT LINES * HAVE BEEN DELETED. IF THE FILE IS NOT EMPTY, SET THE * POINTER TO THE BOTTOM OF THE FILE. BX6 X6-X6 SA6 EPNT ASSUME FILE IS EMPTY SA1 LEN ZR X1,SEC39 IF EMPTY FILE RJ FLL FIND LAST LINE SA6 EPNT EQ SEC39 SEC38 SA1 EPNT SA5 X1+TTPT MX0 -21 BX6 -X0*X5 SA6 SECN LINE NUMBER OF EDIT POINTER RJ CPT CONTRACT POINTER TABLE SA1 SECN FIND NEW ORDINAL OF LINE RJ LTP LOCATE TEXT POINTER NZ B7,*+400000B IF LINE CANNOT NOW BE FOUND SA6 EPNT UPDATE EDIT POINTER SEC39 BSS 0 SA1 ECOMMAND SX0 X1-CZON NZ X0,SEC40 IF NOT *ZONE* SA1 SECB (X1) = COUNT OF TIMES COMMAND PERFORMED ZR X1,SEC40 IF *ZONE* FOUND NO STRING PUTZ PUT EOL PRINTC KN PRINT LIST OF ZONE RANGES SEC40 BSS 0 SEC SUBR SA1 ETOP ZR X1,SEC1 IF NOT *TOP* SA1 ERANGE GET TOP OF RANGE RJ LTP LOCATE TEXT POINTER SA6 EPNT SEC1 BSS 0 SA1 EPNT CHECK RANGE/POINTER SA5 X1+TTPT ZR X5,SEC2 IF CURRENT _ INS-T A LINE MX0 -21 BX5 -X0*X5 CURRENT LINE NUMBER SA1 ERANGE IX0 X5-X1 NG X0,SEC2 IF ABOVE TOP OF RANGE EQ SEC5 IF WE ARE OK SEC2 SA1 ERANGE SET _ TO START OF RANGE RJ LTP LOCATE TEXT POINTER GT B7,B1,SEC3 IF RANGE EMPTY ZR B7,SEC4 IF FOUND BX1 X6 NOT PERCISELY FOUND RJ DOL DOWN ONE LINE NZ B7,SEC3 IF RANGE EMPTY SA1 X6+TTPT SEE IF LINE IS IN RANGE MX0 -21 BX1 -X0*X1 SA2 ERANGE+1 IX0 X2-X1 PL X0,SEC4 IF IN RANGE, OK * RANGE IS EMPTY SEC3 BX6 X6-X6 SA6 EPNT SA5 EECI LX5 59-BMTOK NG X5,SEC5 IF OK TO BE EMPTY PRINT (RANGE EMPTY) EQ SECX EXIT * SET _ SEC4 SA6 EPNT STORE NEW _ SEC5 BSS 0 SA1 EPNT SET TEMPORARY EDIT POINTER BX6 X1 SA6 ETPNT BX6 X6-X6 SA6 SECA SA6 SECB SA6 SECD SA6 SECE SA6 SECF SA6 SECH SA6 SECI SA6 SECJ SA6 SECK SA6 SECL SA6 SECM SA1 EECI LX1 59-BNOLOOP NG X1,SEC35 IF COMMAND DOES NOT REQUIRE A LOOP SA1 EECI SET -NEXT- FLAG SA2 ETOP LX1 0-BNEXT MX0 -1 BX6 -X0*X1 BX6 -X2*X6 NO *NEXT* IF *TOP* SPECIFIED SA6 SECC * HERE WE TRY TO FIND A LINE SUITABLE FOR FRAMING. SEC6 BX6 X6-X6 SA6 SECD SA6 SECE SA6 SECF SA6 SECH SA6 SECK SA6 SECL SA6 SECM SA1 ESUBJECT NZ X1,SEC13 IF STRING SUBJECT SA1 SECC SEE IF WE MOVE ON TO NEW LINE ZR X1,SEC14 IF NOT NEW LINE * MOVE ON TO A NEW LINE SA1 ECOMMAND SX7 X1-CZON NO *NEXT* FOR *ZONE* COMMAND ZR X7,SEC8 EXIT IF *ZONE* COMMAND SA1 ETPNT GET POINTER SA2 ECOMMAND SX0 X2-CUP ZR X0,SEC11 IF WE MOVE UP THE FILE RJ DOL DOWN ONE LINE SA1 ETPNT SA1 X1+TTPT MX0 -21 BX1 -X0*X1 NZ B7,SEC7 IF EOF SA1 ERANGE+1 SA5 X6+TTPT GET LINE NUMBER MX0 -21 BX0 -X0*X5 IX0 X1-X0 PL X0,SEC12 IF NOT END OF RANGE SEC7 SA5 EPNT SA5 X5+TTPT R= X7,-1 MX0 -21 BX0 -X0*X5 IX0 X0-X1 MI X0,SEC8 R= X7,-2 SEC8 SA7 SECA EQ SEC36 EXIT SEC9 SA5 EPNT SA5 X5+TTPT R= X7,1 MX0 -21 BX0 -X0*X5 IX0 X1-X0 MI X0,SEC10 IF POINTER NOT AT *TOP* R= X7,2 SEC10 SA7 SECA EQ SEC36 IF DONE SEC11 RJ UOL UP ONE LINE SA1 ETPNT SA1 X1+TTPT MX0 -21 BX1 -X0*X1 NZ B7,SEC9 IF TOP OF FILE SA1 ERANGE SA5 X6+TTPT GET LINE NUMBER MX0 -21 BX0 -X0*X5 IX0 X0-X1 NG X0,SEC9 IF TOP OF RANGE SEC12 SA6 ETPNT SAVE ORDINAL BX6 X6-X6 SA6 SECC CLEAR NEXT LINE FLAG SA6 SECF SA6 SECM EQ SEC14 * SUBJECT STRING. SEC13 JP *+400000B STUB * START THE APPROVAL LOOP. CHECK MARK MATCH FIRST SEC14 SA1 SECE MARK MATCH... NZ X1,SEC15 ...APPROVED IF ALREADY IN CORE SA1 ELIM ZR X1,SEC15 IF NO MARK RESTRICTION * XOR THE SIGN BITS. NEGATIVE RESULTS MEANS APPROVAL. SA5 ETPNT GET TTPT ENTRY SA2 X5+TTPT BX0 X2-X1 LX0 59-21 POSITION MARK BIT TO SIGN PL X0,SEC33 IF NO GOOD * IF A STRING SEARCH IS NEEDED, DO ONE. SEC15 SA1 ESTSRCH ZR X1,SEC16 IF NO STRING SEARCH RJ ELC ENSURE LINE IN CORE SA1 SECL BX6 X1 SA6 SESB SA1 SECM BX6 X1 SA6 SESC RJ SES STRING/ELLIPSIS SEARCH NZ B7,SEC33 IF STRING NOT FOUND * THE LINE HAS PASSED ALL APPROVALS EXCEPT VETO. THE * FOLLOWING PROCESSING IS COMPLICATED BY MULTIPLE * VETOES (NO,4...YES,15,,,ETC.), COMMANDS THAT CHANGE * A LINE MORE THAN ONCE, AND THE FACT THE SOME * COMMANDS ARE PERFORMED BEFORE VETO CHECKS, SOME * AFTER. THIS CODE IS DANGEROUS, BE CAREFUL (I EVEN * HAD TO FLOW-CHART IT.) SEC16 BX6 X6-X6 SA6 SECI SA1 EVETO ZR X1,SEC20 IF VETO IS OFF SA1 EECI LX1 59-BNVETO NG X1,SEC20 IF NO VETO WITH THIS COMMAND SA1 ENVETO ZR X1,SEC18 IF NO OUTSTANDING YES-S OR NO-S PL X1,SEC17 IF MULTIPLE YES-S SX6 X1+B1 COUNT THE -NO- SA6 A1 EQ SEC32 ON TO FAILURE PROCESSING SEC17 SX6 X1-1 COUNT THE -YES- SA6 A1 EQ SEC20 DO IT * ASK HIM FOR *VETO* RESPONSE. THIS REQUIRES DOING THE * COMMAND (IF IT CHANGES THE LINE) AND THEN DISPLAYING * THE LINE. SEC18 RJ ELC ENSURE LINE IN CORE SA1 EECI LX1 59-BMOD PL X1,SEC19 IF LINE NOT CHANGED RJ DEC DO EDIT COMMAND SA1 SECJ NZ X1,SEC32 IF COMMAND ABORTED SEC19 RJ DLN DISPLAY LINE SX6 B1 SET LINE-DISPLAYED FLAG SA6 SECF RJ GVR GET VETO RESPONSE NZ B7,SEC32 IF NO * YES, DO THE COMMAND. CAREFUL ... IT MAY ALREADY * HAVE BEEN DONE TO GIVE VETO FOOD FOR DISPLAY. SEC20 SX6 B1 SA6 SECH SA1 SECI NZ X1,SEC22 IF COMMAND DONE ALREADY SA1 EECI LX1 59-BMOD PL X1,SEC21 IF LINE ISN-T NEEDED IN CORE RJ ELC ENSURE LINE IN CORE SEC21 RJ DEC DO EDIT COMMAND SA1 SECJ NZ X1,SEC32 IF COMMAND ABORTED SEC22 SA1 SECH ZR X1,SEC23 IF LINE NOT CHANGED SA1 EECI LX1 59-BREMOD PL X1,SEC23 IF LINE INS-T RE-MODED SA1 DECA UPDATE INFORMATION BX6 X1 SA6 SECD SA1 DECB BX6 X1 SA6 SECM SA1 SESB BX6 X1 SA6 SECL SEC23 SA1 EECI SEE IF WE MOVE THE EDIT POINTER LX1 59-BNMVPTR NG X1,SEC24 IF DON-T MOVE THE POINTER SA1 ETPNT UPDATE ACTUAL EDIT POINTER BX6 X1 SA6 EPNT SEC24 SA1 SECB COUNT THE COMMAND SX6 X1+B1 SA6 A1 SA1 ECOUNT IX0 X6-X1 PL X0,SEC25 IF COUNT RAN OUT, ALL DONE SA1 EECI LX1 59-BREMOD NG X1,SEC15 IF REMOD, TRY COMMAND YET AGAIN * FINISH PROCESSING A SUCCESSFUL LINE. SEC25 SA1 ENDIS ZR X1,SEC26 IF DISPLAY OFF SA1 SECF NZ X1,SEC26 IF LINE DISPLAYED ALREADY (VETO) SA1 EECI LX1 59-BDEND NG X1,SEC26 IF DON-T DISPLAY NOW RJ ELC ENSURE LINE IN CORE RJ DLN DISPLAY LINE SEC26 SA1 EECI LX1 59-BMOD PL X1,SEC29 IF DOESN-T CHANGE THE LINE SA1 ESUBJECT NZ X1,SEC28 IF SUBJECT STRING IS UPDATED SA1 EPNT ADD THE TEXT LINE SA1 X1+TTPT GET TTPT ENTRY MX0 -21 SET UP FOR *ATL* BX6 -X0*X1 SA6 LN MX0 -1 LX0 21-0 BX1 -X0*X1 (X1) = 1S21 IFF LINE IS MARKED BX6 X6-X6 SA6 ATLA SB7 HN SA2 HNL SA5 SECK ZR X5,SEC27 IF LINE IN *HN* SB7 KN SA2 KNL SEC27 SX6 A2 SAVE (LENGTH OF LINE) SA6 SECG RJ ATL ADD TEXT LINE NZ B7,*+400000B SYSERR, FOR NOW SA1 ATLC UPDATE OUR POINTER IF IT MOVED BX6 X1 SA6 EPNT SA1 SECG SB7 X1 RJ CLL CHECK LINE LENGTH EQ SEC29 SEC28 JP *+400000B STUB * PROCESS MARK/REMARK AND SEE WHAT HAPPENS NEXT. SEC29 SA1 EMARK PL X1,SEC30 IF NOT -MARK SA1 ETPNT SA1 X1+TTPT MX0 -1 LX0 21-0 BX6 X0*X1 CLEAR MARK BIT SA6 A1 EQ SEC31 SEC30 SA2 EREMARK BX6 X1+X2 BIT 0 SET IF EITHER MARK OR REMARK LX6 21-0 POSITION NEW MARK FLAG TO PROPER BIT SA1 ETPNT SET MARK IN TTPT ENTRY SA5 X1+TTPT BX6 X6+X5 .OR. IN MARK FLAG SA6 A5 SEC31 SX6 B1 SA6 SECC SA1 SECJ NZ X1,SECX IF *STOP* ENTERED SA1 ESUBJECT NZ X1,SECX IF SUBJECT STRING SA1 SECB SA2 ECOUNT IX0 X1-X2 PL X0,SEC36 IF COUNT RAN OUT EQ SEC6 TRY AGAIN * -NO- VETO RESPONSE ... PROCESS -REMOD- LINES SEC32 BX6 X6-X6 CLEAR -IN KN- FLAG SA6 SECK SA1 SECJ NZ X1,SEC33 IF HE SAID STOP SA1 SESB BX6 X1 SA6 SECL SA1 EECI LX1 59-BREMOD NG X1,SEC15 IF REMOD, TRY SOME MORE * FAILURE PROCESSING. THIS IS WHERE REJECTED LINES ARE * PROCESSED. AGAIN, *REMOD* LINES ARE A PROBLEM BECAUSE * ALTHOUGH IT HAS FAILED NOW IT MAY HAVE SUCCEEDED * EARLIER AND HENCE THE LINE REALLY ISN-T A FAILURE * AFTER ALL. SEC33 SA1 SECH NZ X1,SEC25 IF LINE CHANGED SA1 ESUBJECT NZ X1,SECX IF STRING, EXIT * NO GO. PROCESS *REMARK* AND ON TO NEXT LINE SA1 EREMARK ZR X1,SEC34 IF NO *REMARK* SA1 ETPNT CLEAR THE MARK BIT SA5 TTPT+X1 MX0 -1 LX0 21-0 BX6 X0*X5 CLEAR MARK BIT SA6 A5 SEC34 SX6 B1 SET *NEXT* FLAG SA6 SECC SA1 SECJ NZ X1,SECX IF VETO SAID *STOP* EQ SEC6 * NON-LOOP COMMANDS. THESE COMMANDS DO NOT REQUIRE * SEARCHING THE FILE BUT DO REQUIRE THAT THE EDITING * VARIABLES BE SET UP. SEC35 RJ DEC DO EDIT COMMAND SA1 SECJ NZ X1,SECX IF COMMAND ABORTED SA1 ENDIS ZR X1,SECX IF NO DISPLAY SA1 EPNT BX6 X1 SA6 ETPNT RJ ELC ENSURE LINE IN CORE RJ DLN DISPLAY LINE EQ SECX EXIT SPACE 2,4 SECA BSS 1 TOP/EOF FLAG (1/-1) SECB BSS 1 COUNT OF COMMANDS PERFORMED SECC BSS 1 NZ IF GOTO NEXT LINE SECD BSS 1 CURRENT START-SEARCH COLUMN SECE BSS 1 NZ IF LINE IN CORE (KN OR HN) SECF BSS 1 ZR IF LINE NOT YET DISPLAYED SECG BSS 1 SECH BSS 1 NZ IF LINE HAS CHANGED SECI BSS 1 NZ IF COMMAND PERFORMED SECJ BSS 1 NZ IF VETO SAID *STOP* SECK BSS 1 NZ IF MOD-ED LINE IN *KN* SECL BSS 1 CURRENT SEARCH ZONE SECM BSS 1 COLUMN BIAS FOR ZONES SECN BSS 1 TEMPORARY STORAGE FOR EDIT POINTER LINE NO. DEC SPACE 4,10 ** DEC - DO EDIT COMMAND. * * THIS ROUTINE CALLS IN THE APPROPRIATE COMMAND PRO- * CESSOR. THESE PROCESSORS ARE LOCATED JUST AFTER THE * MAIN EDIT LOOP, BEFORE THE PRIMARY SUBROUTINES. * THESE COMMANDS ARE ACTUALLY PART OF THIS SUBROUTINE, * AND THEY SHOULD RETURN TO *EXIT* WHEN THEY ARE * FINISHED. * * THE COLUMN BIAS IS NEEDED FOR COMMANDS THAT RE-MODIFY * A LINE. SUCH COMMANDS MAY CHANGE THE COLUMNS OF THE * REMAINING PORTION OF THE LINE. SINCE THE USER-SPECIFIED * *ZONE*S REFER TO THE LINE BEFORE ANY CHANGES WERE MADE, * THE COLUMN BIAS ADJUSTS THESE COLUMNS TO REFER TO THE * SAME PLACE THE USER HAD IN MIND. NOTE: THE COLUMN * OF END OF STRING + 1 MUST BE TREATED FOR CHANGING LINE * POSITIONS, BUT THE BIAS IS NOT NEEDED THERE. * * COMMANDS THAT MODIFY A LINE MUST FOLLOW CERTAIN PRO- * CEDURES. IF *VETO* IS ON, THE TEXT LINE IS FOUND IN * *HN* AND MODIFIED INTO *KN* (AND *SECK* IS SET). IF * VETO IS OFF, THE COMMAND MAY JUST CHANGE THE LINE IN * *HN* AND BE DONE WITH IT - WHICH USUALLY IS EASIER * AND FASTER. * * ENTRY ALL THE EDIT FLAGS SET UP * LINE IN CORE (IN *HN*) IF NEEDED * (IF NEEDED): * (SECD) COLUMN TO START SEARCH AT * (SECL) ORDINAL OF CURRENT SEARCH ZONE * (SECM) COLUMN BIAS FOR ZONES * (SESD) COLUMN OF STRING MATCH * (SESE) COLUMN OF SECOND STRING (ELLIPSIS) MATCH OR -1 * (SESB) ORDINAL OF ZONE AFTER END OF FOUND STRING/ELL. * (SESF) LENGTH OF MATCHED TEXT * * * EXIT COMMAND PERFORMED. * LINE IN CORE (IN *KN*) IF MODIFIED BY THE COMMAND * WHERE APPROPRIATE * SECD, ETC....SEE ABOVE * (DECA) STARTING SEARCH COLUMN IF MOD IS OK * (DECB) NEW COLUMN BIAS * * USES ALL * * CALLS MANY DEC SUBR SA1 SECD BX6 X1 SA6 DECA SA1 SECM BX6 X1 SA6 DECB SA1 EECI AX1 1 GET COMMAND ADDRESS SB7 X1 JP B7 DEC1 SX6 B1 COMMAND DONE SA6 SECI EQ DECX EXIT EXIT EQU DEC1 EXIT1 PRINT (LINE IS MUCH TOO LONG, COMMAND ABORTED) SX6 B1 DO NOT DISPLAY LINE SA6 SECF LINE NOT DISPLAYED SA6 SECJ *STOP* EQ DECX EXIT DECA BSS 1 NEW START-SEARCH COLUMN DECB BSS 1 NEW COLUMN BIAS TITLE 4,0 OVERLAY - EDIT SECONDARY SUBROUTINES. ACM SPACE 4,10 ** ACM - ADD COMMAND TO MACRO. * * THIS SUBROUTINE ADDS THE COMMAND IN TICI TO THE * SPECIFIED MACRO. AN ERROR IS RETURNED IF THERE * IS NO ROOM LEFT FOR THE MACRO INFORMATION. * * ENTRY (TICI) - COMMAND IN CDC FORMAT * * EXIT B7 = 0 IF OK * = 1 IF NO ROOM * * USES ALL * * CALLS MOVE ACM1 SB7 1 NOT ENOUGH ROOM FOR ENTRY ACM SUBR SA1 TICI GET LENGTH OF CDC ENTRY AX1 18 SX2 X1 SA3 MDFP IX6 X2+X3 PROPOSED LENGTH OF TMCA SX0 N.MDA LENGTH OF MACRO DEFINITION AREA IX0 X0-X6 NG X0,ACM1 IF NOT ENOUGH ROOM SA6 ACMA SAVE NEW MDAP VALUE MOVE X2,TICI,X3+TMDA ADD COMMAND SA1 ACMA SAVE _ BX6 X1 SA6 MDFP SA6 MDAL SB7 B0 RETURN OK EQ ACMX EXIT, DONE ACMA BSS 1 TEMP NEW MDAP DLN SPACE 4,10 ** DLN - DISPLAY LINE. * * THIS ROUTINE DISPLAYS A LINE USING THE CURRENT TTPT * ENTRY AND THE DISPLAY COLUMNS IN EDIS. * * ENTRY (SECK) SET UP * ETPNT _ TTPT ENTRY FOR THIS LINE * ENDIS/EDIS SET UP * * USES ALL * KN * * CALLS PRINT, PUT DLN SUBR SX6 HN-1 SA1 HNL BX7 X1 SA1 SECK ZR X1,DLN1 IF IN *IN* SX6 KN-1 SA1 KNL BX7 X1 DLN1 SA6 DLNA SA7 DLNB SA1 ETPNT SA5 X1+TTPT DISPLAY THE LINE NUMBER MX0 -21 BX1 -X0*X5 RJ CDD CONVERT DECIMAL DIGITS LX6 3*6 MX0 6*7 BX1 X0*X6 UPC JN,X1 UNPACK CHARACTERS SA1 ETPNT SA1 X1+TTPT GET TTPT ENTRY SX6 1R LX1 59-21 POSITION MARK BIT TO SIGN PL X1,DLN2 IF NO MARK SX6 1R"COLON" FLAG THE MARKED LINE DLN2 SA6 JN+8-1 SB2 9 OUTPUT COLUMN SA1 DLNB SB3 X1 LENGTH OF LINE SA5 ENDIS SB4 X5 NUMBER OF COLUMN RANGES SB5 B0 CURRENT RANGE SA4 DLNA * COLUMN GETTING LOOP DLN3 SA5 B5+EDIS GET NEXT RANGE SB7 X5 GET STARTING COLUMN AX5 30 SB6 X5 GET FINAL COLUMN NZ B7,DLN4 IF NON-ZERO STARTING COLUMN SB7 B1 USE COLUMN 1 DLN4 GT B7,B3,DLN5 IF BEYOND END OF LINE GT B7,B6,DLN5 IF END OF COLUMN RANGE SA1 X4+B7 MOVE THE COLUMN BX6 X1 SA6 JN+B2-1 SB2 B2+B1 SB7 B7+B1 EQ DLN4 * TRY FOR NEW RANGE DLN5 SB5 B5+B1 LT B5,B4,DLN3 IF NEW RANGE OK SX6 B2-B1 LENGTH OF LINE PRINTS JN,X6 EQ DLNX EXIT DLNA BSS 1 _ TO LINE DLNB BSS 1 LENGTH OF LINE ELC SPACE 4,10 ** ELC - ENSURE LINE IN CORE. * * *SEC* CALLS THIS SUBROUTINEWHEN IT WISHES TO * MAKE SURE THE LINE IS IN CORE, IN R1 FORMAT, IN * *HN*. * * ENTRY (SECE) SET IF LINE IN CORE * (SECK) SET IF LINE IN *KN* * * EXIT SECE SET * IF WE SET SECE: * SECF,H,D,K CLEARED * * USES ALL * * CALLS ROT ELC SUBR SA1 SECE NZ X1,ELC1 IF LINE ALREADY IN CORE SA1 ETPNT SA5 X1+TTPT AX5 24 EXTRACT DISK ADDRESS MX0 -24 BX1 -X0*X5 SX2 HN RJ ROT READ ONE TEXT LINE SA6 HNL SX6 B1 SET FLAGS SA6 SECE BX6 X6-X6 SA6 SECF SA6 SECH SA6 SECD SA6 SECL SA6 SECK SA6 SECM EQ ELCX EXIT * LINE IN CORE. IF IN *KN*, MOVE TO *HN* ELC1 SA1 SECK ZR X1,ELCX EXIT IF IN *HN* SA5 KNL BX6 X5 SA6 HNL MOVE X5,KN,HN BX6 X6-X6 SA6 SECK EQ ELCX EXIT FCL SPACE 4,8 ** FCL - FLAG CURRENT LINE. * * MARK THE LINE POINTED TO BY THE EDIT POINTER SO WE GET * BACK HERE UPON ENTERING EDIT AT A LATER TIME. * * ENTRY (EPNT) = EDIT POINTER. * * EXIT (TTPT+(EPNT)) = FLAGGED BY SETTING BIT 22 OF *TTPT*. * FCL SUBR SA1 EPNT ZR X1,FCLX IF NO LINE TO FLAG SA5 X1+TTPT MX0 -1 LX0 22-0 BX6 -X0+X5 SET THE EDIT POINTER BIT SA6 A5 EQ FCLX DONE FSL SPACE 4,10 ** FSL - FIND STRING IN LINE. * * THIS ROUTINE SEARCHES FOR A STRING IN A LINE. * IT IS CALLED BY *SES* TO DO THE DIRTY WORK. * * ENTRY B2 _ STRING TO BE SEARCHED WITH * B3 = LENGTH OF THAT STRING (MUST NOT BE ZERO) * SESA COLUMN TO START AT * SESB ORDINAL OF ZONE TO START IN * SESC COLUMN BIAS FOR ZONES * HN, HNL HAS STRING TO BE SEARCHED * EUNIT HAS UNIT FLAG * * EXIT B7 = 1 IF NOT FOUND ELSE * = 0 STRING FOUND AND: * X6 = COLUMN WHERE STRING STARTS IN *IN* * SESB ORDINAL OF ZONE TO CONTINUE ON * * USES ALL * * CALLS NONE FSL9 SB7 B1 NOT FOUND FSL SUBR SB2 B2-B1 SA1 HNL SB4 X1 SET UP REGS FSL1 SA1 SESB CHECK FOR A ZONE LEFT OT USE SA2 ENZONE IX0 X1-X2 PL X0,FSL9 IF NO ZONES LEFT SA2 X1+EZONE GET ZONE START AND FINISH SX3 X2 X3 = STARTING ZONE AX2 30 SA1 SESC ADD ZONE BIAS IX2 X2+X1 IX3 X3+X1 SB5 X2 SAVE LAST ZONE COLUMN SA1 SESA SET B7 TO STARTING SEARCH COLUMN SB7 X3 ASSUME STARTS AT FIRST ZONE IX0 X3-X1 PL X0,FSL2 IF ASSUMPTION OK SB7 X1 USE STARTING COLUMN GIVEN * STRING SEARCH LOOP. WE SCAN THE CURRENT ZONE LOOKING * FOR A MATCH FOR THE FIRST CHARACTER IN OUR SEARCH STRING, * AND THEN MATCHING THE SUBSEQUENT CHARACTERS. * THE FOLLOWING REGISTER ASSIGNMENTS ARE USED * * B2 BASE ADDR -1 OF SEARCH STRING * B3 LENGTH OF SEARCH STRING * B4 LENGTH IN (IN) * B5 LAST COLUMN IN THIS ZONE (ALREADY BIAS) * B6 SCRATCH * B7 STARTING COLUMN IN (IN) BEING TESTED * X5 FIRST CHARACTER IN SEARCH STRING FSL2 SA5 B2+B1 NZ B7,FSL3 IF NOT COLUMN 0 SB7 B1 START AT COLUMN 1 * SEE IF MATCH CAN START IN (B7) FSL3 GT B7,B5,FSL8 IF PAST END OF ZONE SB6 B7+B3 SEE IF LINE TOO SHORT FOR MATCH SB6 B6-B1 GT B6,B4,FSL8 IF NO WAY TO MATCH SA1 HN+B7-1 TRY FOR A MATCH IX0 X1-X5 SB7 B7+B1 BUMP B7 (*** TAKE NOTE FOR LATER ***) NZ X0,FSL3 IF FIRST CHAR DOES NOT MATCH * FIRST CHAR MATCHES. IF *UNIT* IS ONE, * SEE IF THIS STRING IS OK UNIT-WISE. SA3 EUNIT ZR X3,FSL4 IF NO UNIT SX0 B7-1-1 ZR X0,FSL4 IF STARTS IN COL 1, UNIT OK SA3 HN+B7-1-1-1 CHECK PREVIOUS CHARACTER ZR X3,FSL4 IF ZERO, CHAR OK SX0 X3-1R9-1 NG X0,FSL3 IF ALPHAMERIC, NO MATCH * SEE IF THE REST OF THE STRING MATCHES. * * A1 = BASE ADDRESS IN *IN* * A5 = BASE ADDRESS OF SEARCH STRING * B7 = FIRST COLUMN OF MATCH + 1 FSL4 SB6 B1 B6 = LOOP INDEX FOR REMAINING CHARS FSL5 GE B6,B3,FSL6 IF ALL CHARS MATCHED SA3 A5+B6 COMPARE CHARS SA4 A1+B6 IX0 X3-X4 NZ X0,FSL3 IF NO MATCH, TRY NEW STARTING COL SB6 B6+B1 OK, TRY AGAIN EQ FSL5 * STRING MATCHES. MAKE FINAL UNIT TEST. FSL6 SA1 EUNIT ZR X1,FSL7 DONE, MATCHED SB6 B7+B6 B6 = COLUMN AFTER END OF MATCH SB6 B6-B1 GT B6,B4,FSL7 EOL, UNIT OK SA1 HN+B6-1 CHECK THE CHAR ZR X1,FSL7 IF ZERO, OK SX0 X1-1R9-1 NG X0,FSL3 IF ALPHAMERIC, FORGET IT * MATCH FOUND, SET UP AND EXIT FSL7 SX6 B7-B1 FINAL COLUMN SB7 B0 EQ FSLX EXIT * NO MATCH IN THIS ZONE ... TRY NEW ZONE FSL8 SA1 SESB INCREMENT ZONE SX6 X1+B1 SA6 A1 EQ FSL1 RELOOP GCN SPACE 4,10 ** GCN - GET COLUMN NUMBER. * * THIS ROUTINE GETS A SINGLE COLUMN NUMBER FOR * *ZONE* AND *DISPLAY* SYNTAX PROCESSING, OR RETURNS * AN INDICATION OF WHAT IS THERE IF IT ISN-T A * COLUMN NUMBER. * * ENTRY INC _ COLUMN TO START SEARCH * * EXIT B7 = 0 IF COLUMN NUMBER * X6 = NUMBER * B7 = 1 IF = OR - * B7 = 2 IF OTHER (INC UNTOUNCHED) * X6 = DELIM * * USES ALL * * CALLS GNA, DXB GCN2 SB7 2 SA1 GCNA RESTORE INC BX7 X1 SA7 INC GCN SUBR SA1 INC SAVE INC BX6 X1 SA6 GCNA GNA NUM,AO LE B7,B1,GCN2 IF NO GO SB7 B7-2 ZR B7,GCN1 IF NUMBER, DECODE IT SX0 X6-1R- ZR X0,GCNX IF DASH SX0 X6-1R= ZR X0,GCNX IF = EQ GCN2 GCN1 SB7 B1 DECIMAL, PLEASE BX5 X6 RJ DXB SB7 B0 EQ GCNX EXIT GCNA BSS 1 STARTING INPUT COLUMN GVR SPACE 4,10 ** GVR - GET VETO RESPONSE. * * READS AND CRACKS THE VETO RESPONSES * * EXIT B7 = 1 IF *NO* OR *STOP* * B7 = 0 IF *YES* OR *CONTIN* * EVETO ZEROED IF *CONTIN* * ENVETO SET IF YES,NN OR NO,NN * SECJ NZ IF QUIT GVR SUBR PRINT (V"EPC"),ES GVR1 TREAD READ IN VETO RESPONSE NZ X1,GVR3 IF EOR/EOF GVR2 GNA NUM,AO ZR B7,GVR1 IF EOL, TRY AGAIN NE B7,B1,GVR3 IF NOT ALPHA SB7 B6+B6 *2 SB7 B7+B6 *3 SB7 B7+B7 *6 SB7 B7-B1 *6-1 MX0 1 AX0 B7 MAKE THE MASK BX1 X0*X6 SB7 GVRA RJ SLS SEARCH LIST ZR X6,GVR3 IF NOT FOUND SB7 X6 JP B7 JUMP TO PROCESSOR * BAD RESPONSE GVR3 PRINT (AWAITING VETO RESPONSE:) PRINT ( YES, NO, QUIT, OR CONTIN) PRINT ( ) SX6 B0 SA6 INL NULL OUT THE LINE EQ GVR2 * QUIT GVR4 GNA NUM NZ B7,GVR3 IF NOT EOL SX6 B1 SET *QUIT* FLAG SA6 SECJ SB7 B1 EQ GVRX EXIT * CONTIN GVR5 GNA NUM NZ B7,GVR3 IF NOT EOL BX6 X6-X6 TURN OFF *VETO* SA6 EVETO SB7 B0 EQ GVRX EXIT * YES AND NO GVR6 BX6 X6-X6 EQ GVR8 GVR7 SX6 1 GVR8 SA6 GVRB SET YES/NO FLAG GVR9 GNA NUM ZR B7,GVR11 IF EOL, NO COUNT GIVEN LE B7,B1,GVR3 IF NO GOOD SX0 B7-3 ZR X0,GVR9 IF DELIMITER, SKIP BX5 X6 SB7 B1 RJ DXB CONVERT TO BINARY SX6 X6-1 COUNT THIS TIME THROUGH SA1 GVRB NZ X1,GVR10 IF *NO* SA6 ENVETO SB7 B0 EQ GVRX EXIT GVR10 BX6 -X6 COMPLIMENT COUNT SA6 ENVETO SB7 B1 EQ GVRX EXIT GVR11 SA1 GVRB SET RETURN CODE SB7 X1 EQ GVRX EXIT GVRA BSS 0 QUIT TABLE GVR4 CONTIN TABLE GVR5 YES TABLE GVR6 NO TABLE GVR7 DATA 0 GVRB BSS 1 YES/NO FLAG NMC SPACE 4,10 ** NMC - NEXT MACRO COMMAND. * * RETURNS ORDINAL OF NEXT COMMAND IN MACRO * * * ENTRY B7 = 1 IF FIRST CALL * = 0 OTHERWISE * X1 IS RESERVED FOR FUTURE EXPANSION * * EXIT B7 = 1 IF END OF MACRO ELSE * = 0 * X6 _ MACRO COMMAND * * USES A 2,3,6 * B 7 * X 0,2,3,6 * * CALLS NONE NMC SUBR ZR B7,NMC1 IF NOT INITIAL CALL SX6 B0 SA6 MDFP RESET MACRO DEFINITION POINTER NMC1 BSS 0 SA2 MDFP SEE IF MORE MACRO COMMANDS SA3 MDAL IX0 X2-X3 SB7 B1 ASSUME NONE LEFT PL X0,NMCX IF OUT OF COMMANDS SA3 X2+TMDA GET COMMAND LENGTH AX3 18 SX6 X3 IX6 X6+X2 OUR NEW POINTER SA6 MDFP SX6 X2+TMDA ADDRESS OF THE COMMAND SB7 B0 RETURN *FOUND* EQ NMCX EXIT, DONE PER SPACE 4,10 ** PER - PRINT ERROR REPORT. * * PERFORMS EDIT ERROR PROCESSING. CALLED BY THE *ERROR* * MACRO. PRINTS OUT THE ERROR IFF FULL DEBUG * * ENTRY X6 _ THE ERROR * * USES ALL * * CALLS PRINT PER SUBR SA6 LERR BX6 X6-X6 SA6 INL SA6 LLL .2 IFGE DEBUG,2 SA1 LERR WRITEC O,X1 SA1 LERR DPRINT X1 .2 ENDIF PRINT ("QM""EPC"),ES EQ PERX EXIT SCD SPACE 4,8 ** SCD - SEARCH COMMAND DESCRIPTOR CODE (CDC) TABLE. * * SEARCHES TABLE OF CDC PARAMETERS FOR MATCHING PARAMETER. * * ENTRY X1 PARAMETER ORDINAL TO SEARCH FOR * X2"0 IF TO SKIP CURRENT ENTRY * SCDA CONTAINS ADDRESS TO START SEARCH AT * SCDB CONTAINS LWA+1 OF SEARCH * * EXIT X1 PARAMETER HEADER * X6 ADDRESS OF PARAMETER * X7 LENGTH OF PARAMETER ENTRY * SCDA UPDATED TO POINT TO CURRENT ENTRY * * USES A 1,2,6 * B 5,6,7 * X 0,1,2,6 * * CALLS NONE. SCD SUBR MX0 -5 SB7 X1 SX6 X1-PELL NZ X6,SCD1 IF NOT ELLIPSIS SB7 PSTR TREAT ELLIPSIS AS STRING SCD1 SB7 -B7 MX6 -1 SA1 SCDA SB5 X1 SA1 SCDB LWA+1 OF SEARCH SB6 X1 SA1 B5 GE B5,B6,SCDX IF PAST LWA OF TABLE ZR X2,SCD3 IF START WITH CURRENT SCD2 LX1 0-54 BX1 -X0*X1 LENGTH OF PARAMETER ZR X1,*+400000B IF ZERO LENGTH PARAMETER SB5 B5+X1 GE B5,B6,SCDX IF PAST LWA OF TABLE SA1 B5 SCD3 SX7 X1 PARAMETER ORDINAL SX2 X1-PELL NZ X2,SCD4 IF NOT ELLIPSIS SX7 PSTR TREAT ELLIPSIS AS STRING SCD4 SX2 X7+B7 NZ X2,SCD2 IF INCORRECT PARAMETER ORDINAL SX6 B5 ADDRESS OF PARAMETER SA6 SCDA BX2 X1 LX2 0-54 BX7 -X0*X2 NUMBER OF WORDS EQ SCDX RETURN SCDA BSS 1 FWA OF SEARCH SCDB BSS 1 LWA+1 OF SEARCH SES SPACE 4,10 ** SES - STRING/ELLIPSIS SEARCH. * * THIS SUBROUTINE TRIES TO FIND THE STRING S1 OR * ELLIPSIS S1...S2 IN THE STRING *IN*. * * ENTRY SECD COLUMN TO START AT * SESB ORDINAL OF ZONE TO START USING * SESC COLUMN BIAS FOR ZONES * HN, HNL HAS STRING TO BE SEARCHED * S1,S1L HAS SEARCHER STRING * S2, S2L HAS ELLIPSIS PART IF S2L GE 0 * * EXIT B7 = 1 IF NOT FOUND ELSE * = 0 FOLLOWING TRUE IFF FOUND * SESB ORDINAL OF ZONE TO CONTINUE IN * SESD POINTS TO START OF STRING * SESE _ START OF 2ND STRING OR -1 * SESC UNTOUCHED * SESA CLOBBERRED * SESF LENGTH OF MATCHED STRING/ELLIPSIS * SECD COLUMN TO START SEARCH AT IF STRING NO GOOD * * USES ALL * * CALLS FSL SES5 SB7 B1 SES SUBR SA1 SECD BX6 X1 SA6 SESA SX6 X1+B1 SA6 A1 * IF FIRST STRING IS NULL, MUST BE AN ELLIPSIS * THAT MATCHES BEGINNING OF LINE (BOL)( SA1 S1L NZ X1,SES1 IF NOT BOL SA1 SESB CHECK FOR A ZONE LEFT TO USE SA2 ENZONE THIS IS DONE PRIMARILY FOR THE IX0 X1-X2 SPECIAL CASE OF //// (BOL TO EOL) PL X0,SES5 IF NO ZONES LEFT TO USE SX6 B1 SET BOL SA6 SESD EQ SES2 * FIND FIRST STRING IN LINE SES1 SB2 S1 SA1 S1L BX6 X1 SA6 SESF LENGTH OF MATCH IFF STRING MATCH SB3 X1 RJ FSL FIND STRING IN LINE NZ B7,SESX IF NOT FOUND, EXIT SA6 SESD SX6 X6+B1 SA6 SECD UPDATE _ * RETURN IF NOT AN ELLIPSIS, ELSE FIND SECOND STRING SES2 SX6 -B1 ASSUME NOT ELLIPSIS SA6 SESE SA1 S1LA SB7 B0 RETURN CODE NG X1,SESX IF STRING FOUND * PROCESS EOL CASE NZ X1,SES3 IF NOT EOL CASE SA1 HNL SX6 X1+B1 EOL + 1 SA6 SESE SA1 SESD START OF STRING IX6 X6-X1 SA6 SESF LENGTH OF MATCH SA1 ENZONE SHOW WE HAVE RUN OUT OF ZONES BX6 X1 SA6 SESB EQ SESX EXIT * FIND SECOND STRING OF ELLIPSIS SES3 SA1 SESD START AT END OF LAST+1 SA2 S1L ZR X2,SES4 IF FIRST WAS BOL IX6 X1+X2 SA6 SESA SES4 SB2 X2+S1+1-1 SA1 S1LA SB3 X1 RJ FSL FIND STRING IN LINE NZ B7,SESX IF NOT FOUND, EXIT SA6 SESE SA1 SESD COMPUTE LENGTH OF MATCHED INFO SA2 S1LA IX6 X2+X6 LAST COLUMN + 1 IX6 X6-X1 LENGTH OF MATCH SA6 SESF SA1 S1L NZ X1,SESX EXIT IF FIRST WASN-T BOL SA1 SESE SX6 X1+B1 SA6 SECD NEW START SEARCH THING EQ SESX EXIT SESA BSS 1 COLUMN TO START SEARCH AT SESB BSS 1 ORDINAL OF ZONE TO START AT SESC BSS 1 COLUMN BIAS FOR ZONE COLUMNS SESD BSS 1 _ START OF STRING SESE BSS 1 _ TO START OF ELLIPSIS OR -1 SESF BSS 1 LENGTH OF MATCHING STRING/ELLIPSIS PRC SPACE 4,10 ** PRC - PROCESS *READY* COMMAND. * * IF THE *PRC* OPTION IS ON, PASS THIS COMMAND TO *READY*. * * ENTRY (//PRC) = 0 IF *PRC* OPTION IS OFF, ELSE NZ. * * EXIT (PRCA) = 1 IF *READY* CALLED. PRC SUBR SA1 //PRC ZR X1,PRCX IF *PRC* OPTION IS NOT ON SX6 B1 SA6 PRCA SET FLAG FOR *READY* OVERLAY SA6 INC SET FIRST COLUMN FOR *GNA* RJ FCL FLAG CURRENT LINE LOAD 1,/READY/READY1.5 LET *READY* DO THE DRIVING TITLE 4,0 OVERLAY - INITIALIZATION. ** EDIT INITIALIZATION. INI SA1 CFN ZR X1,INI4 IF NO CURRENT FILENAME SA1 SYS ZR X1,INI4 IF NO SYSTEM BX6 X6-X6 SA6 LLL NO LAST LINE OF INFO... SA6 LERR NO LAST ERROR SA6 TLCI SA6 EPROMPT RJ CPD CHECK POINT DUMP BX6 X6-X6 SA6 PRCA CLEAR *PRC* FLAG FOR *READY* * FIND LAST EDIT LINE, IF IT EXISTS. SA1 LEN NZ X1,INI1 IF CURRENT FILE NOT EMPTY BX6 X6-X6 SA6 EPNT CLEAR EDIT POINTER EQ EDIT INI1 BSS 0 MX7 -1 LX7 22-0 MASK FOR EDIT POINTER BIT RJ FFL FIND FIRST LINE INI2 BSS 0 BX0 -X7*X5 SEE IF THIS WAS THE LATEST EDIT LINE NZ X0,INI3 YES, SETUP NEW EDIT POINTER BX1 X6 RJ DOL DOWN ONE LINE ZR B7,INI2 IF NOT BOTTOM OF CURRENT FILE RJ FFL FIND ORDINAL OF FIRST LINE INI3 BSS 0 SA6 EPNT BX6 X7*X5 CLEAR EDIT POINTER BIT SA6 A5 STORE UPDATED *TTPT* ENTRY EQ EDIT INI4 BSS 0 PRINT (CURRENT FILE NOT DEFINED) LOAD 1 PURGMAC EPN,EPI,ECN,ECI 027480 CKP SPACE 4,10 USE LITERALS QUAL * END40 BSS 0 HELP TITLE 5,0 OVERLAY - PROCESS ON-LINE HELP REQUESTS. IDENT SEN50,READY,/HELP/INI,5,0 ORG READY COMMENT SENATOR VERSION "VER" - ON-LINE HELP. QUAL HELP HELP SPACE 4,10 ** THE 5,0 OVERLAY - *HELP*. * * THIS OVERLAY PROCESSES ON-LINE HELP REQUESTS. * HELP SPACE 4,10 ** 5,0 OVERLAY EXIT. HELX BSS 0 SA1 HELXA CHECK IF TEST *SENHELP* FILE SX0 X1-1 ZR X0,HELX1 IF NOT PF, LEAVE LOCAL FILE LYING AROUND RETURN H,R HELX1 BSS 0 LOAD LAST HELXA CON 0 NZ IFF A TEST *SENHELP* FILE USED HELP SPACE 4,10 ** EQUATES, FETS, AND DATA. HBUFL EQU 201B *HELP* BUFFER LENGTH IFNOS H BSS 0 SENHELP RFILEC HBUF,HBUFL,FET=CFLM UN CON 0L"HELPUN" USER NUMBER OF *SENHELP* ELSE H BSS 0 SENHELP RFILEC HBUF,HBUFL,FET=7 PF FDB SENHELP,SENHELP,ID="HELPUN" ENDIF HELP EJECT HELP BSS 0 RJ CCT CHECK *ALARM* TIME PRINT (ENTER A KEYWORD OR *EXIT* TO TERMINATE HELP - ),ES TREAD NZ X1,HELP HEL0 BSS 0 SA4 INC SA5 INL BX1 X1-X1 SB6 9*6 HEL1 BSS 0 IX0 X5-X4 PL X0,HEL2 IF NOT EOL NZ X1,HEL3 IF WE HAVE A KEYWORD SA1 =4LHELP EQ HEL3 SUPPLY DEFAULT KEYWORD HEL2 BSS 0 MI B6,HEL3 IF 10 CHARACTERS COLLECTED SA2 IN-1+X4 SX4 X4+B1 LX2 B6 SB6 B6-6 BX1 X1+X2 ADD NEW CHARACTER EQ HEL1 HEL3 BSS 0 RJ CSE CHECK SPECIAL ENTRY RJ LKE LOCATE KEYWORD ENTRY NZ X5,HEL4 IF FOUND PRINT (UNKNOWN KEYWORD.) PRINT ( ) EQ HELP HEL4 BSS 0 RJ PKT PRINT KEYWORD TEXT EQ HELP SUBRS EJECT CSE SPACE 4,10 ** CSE - CHECK SPECIAL ENTRY. * * ENTER (X1) = L-FORMAT KEYWORD. * * EXIT ONLY IF NOT SPECIAL ENTRY, (X1) = KEYWORD. CSE SUBR SA2 CSEA-2 SB2 B1+B1 CSE1 BSS 0 SA2 A2+B2 ZR X2,CSEX IF NOT SPECIAL ENTRY BX2 X1-X2 NZ X2,CSE1 SA2 A2+B1 SB2 X2 JP B2 PROCESS FUNCTION CSEA BSS 0 CON 8LKEYWORDS CON LKW LIST KEYWORDS CON 7LKEYWORD CON LKW LIST KEYWORDS CON 4LINFO CON LSH LIST SPECIAL HEADERS CON 4LEXIT CON HELX EXIT CON 1LE CON HELX EXIT CON 1L"QM" A QUESTION MARK CON HLP HELP,HELP CON 0 END OF TABLE HLP SPACE 4,10 ** HLP - HELP,HELP. * HLP BSS 0 SA1 =4LHELP RJ LKE LOCATE KEYWORD ENTRY ZR X5,HELP IF NO SUCH KEYWORD EQ HEL4 PRINT IT LKE SPACE 4,10 ** LKE - LOCATE KEYWORD ENTRY. * * ENTER (INDX) = KEYWORD INDEX. * (X1) = L-FORMAT KEYWORD. * * EXIT (X5) = ENTRY, ELSE ZERO. LKE1 BSS 0 SA5 A5+2 ZR X5,LKEX IF NOT FOUND BX0 X1-X5 NZ X0,LKE1 LOOP FOR ALL KEYWORDS LKE SUBR SA5 INDX-2 EQ LKE1 LKW SPACE 4,10 ** LKW - LIST KEYWORDS. * LKW BSS 0 PRINT ( ) PRINT (KEYWORDS RECOGNIZED BY ON-LINE HELP:) PRINT ( ) SA1 RKIA SB2 INDX SORT FWA SB3 B2+X1 SORT LWA SB4 B1+B1 2 WORDS/ENTRY RJ SKW SORT KEYWORDS SA5 INDX-2 LKW1 BSS 0 PUTI JN PUTB 1 SB5 6-1 6 KEYWORDS/LINE SB7 B1 LKW2 BSS 0 SA5 A5+2 ZR X5,LKW5 IF END SA1 A5+B1 MI X1,LKW2 IF SPECIAL BX1 X5 LKW3 BSS 0 SA5 A5+2 IGNORE DUPLICATE ENTRIES ZR X5,LKW4 IF END SA2 A5+B1 MI X2,LKW3 IF SPECIAL BX2 X1-X5 COMPARE ZR X2,LKW3 IF DUPLICATE LKW4 BSS 0 SA5 A5-2 RESTORE (A5) LX5 X1 RESTORE (X5) RJ SZC SPACE-FILL ZERO CHARACTERS PUTF X6,1,10,B7+B1 SB7 B7+11 SB5 B5-B1 PL B5,LKW2 IF NOT EOL LKW5 BSS 0 PUTZ PRINTC JN NZ X5,LKW1 RPV BSS 0 RESTORE INDEX ON *RPV* JUST IN CASE RJ RKI RESTORE KEYWORD INDEX PRINT ( ) EQ HELP LSH SPACE 4,10 ** LSH - LIST SPECIAL HEADERS. * LSH BSS 0 PRINT ( ) PRINT (THE FOLLOWING LIST GIVES OTHER SECTIONS CONTAINING) PRINT (PERTINENT INFORMATION. TO SEE ANY SECTION SIMPLY) PRINT (ENTER ITS NUMBER AS A KEYWORD.) PRINT ( ) SA5 INDX-2 LSH1 BSS 0 SA5 A5+2 ZR X5,LSH2 IF END SA1 A5+B1 PL X1,LSH1 IGNORE NORMAL KEYWORDS SX6 X1 (X6) = RSA RJ RFH READ AND FORMAT HEADER PUTI JN PUTB 1 SA1 A5 READ SPECIAL KEYWORD PUTF X1,,Z,B6 PUT IT PUTT (-),5 SA2 RFHA PUTF RFHB,,X2,B6 PUT SECTION TITLE PUTZ PRINTC JN EQ LSH1 LOOP FOR ALL SPECIAL HEADERS LSH2 BSS 0 PRINT ( ) EQ HELP PKT SPACE 4,10 ** PKT - PRINT KEYWORD TEXT. * * ENTER (A5) = ADDRESS OF INDEX ENTRY. PKT SUBR SX6 A5 SA6 PKTA SAVE INDEX ENTRY ADDRESS SA1 A5+B1 AX1 30 SX0 X1 ZR X0,PKT5 IF NO DUPLICATE KEYWORDS PKT1 BSS 0 PRINT ( ) PRINT (THERE IS MORE THAN ONE SECTION WITH THIS KEYWORD.) PRINT (SELECT YOUR SECTION BY ENTERING A SINGLE LETTER) PRINT (FROM THE LIST BELOW.) PRINT ( ) SX6 B1 SA6 PKTB INITIALIZE LETTER SA1 PKTA BX6 X1 SA6 PKTD INITIALIZE INDEX ADDRESS PKT2 BSS 0 SA1 PKTD SA5 X1+B1 SX6 X5 (X6) = RSA RJ RFH READ AND FORMAT HEADER LINE PUTI PKTC SET PUT FWA PUTB 1 PUTF PKTB,10,1,B6 PUT LETTER PUTT (-),B6+B1 SA2 RFHA PUTF RFHB,1,X2,B6 PUT HEADER PUTZ PRINTC PKTC DISPLAY IT SA1 PKTB SX6 X1+B1 SA6 A1 SA1 PKTD SA2 X1+B1 AX2 30 SX0 X2 ZR X0,PKT3 IF END OF DUPLICATE KEYWORDS SX6 X0+INDX SA6 A1 EQ PKT2 LOOP UNTIL END OF LIST PKT3 BSS 0 PRINT ( ) PRINT (ENTER YOUR LETTER SELECTION OR ANOTHER KEYWORD - ),ES TREAD NZ X1,PKT1 IF EOX, DISPLAY SELECTIONS AGAIN SA1 INL SX0 X1-1 NZ X0,HEL0 IF NOT A SINGLE CHAR, ASSUME KEYWORD SA5 PKTB (X5) = LAST LETTER + 1 IN SELECTION LIST SA1 IN IX0 X1-X5 PL X0,HEL0 IF NOT VALID, ASSUME KEYWORD SA5 PKTA SA5 X5 (A5) = ADDR OF HEAD OF LINKED KEYWORD LIST PKT4 BSS 0 SX1 X1-1 ZR X1,PKT5 IF FOUND THE RIGHT SELECTION SA2 A5+B1 AX2 30 SX0 X2 ZR X0,PKT1 IF BAD SELECTION SA5 X0+INDX READ LINKED INDEX ENTRY EQ PKT4 PKT5 BSS 0 SA1 A5+B1 SX6 X1 RJ RFH READ AND FORMAT HEADER .1 DUP 3 PRINT ( ) .1 ENDD PRINTC RFHB PRINT HEADER PKT6 BSS 0 READS H,IN,N.LINE NZ X1,PKT8 IF EOR SX7 B6-IN SX7 X7-7 PL X7,PKT7 IF 7 OR MORE CHARS IN LENGTH PRINT ( ) EQ PKT6 PKT7 BSS 0 PUTI PKTC PUTB 1 PUTS IN+7,X7+B1,B6 PUT THE LINE PUTZ PRINTC PKTC EQ PKT6 PKT8 BSS 0 SA1 PKTA SA1 X1+B1 AX1 30 SX0 X1 ZR X0,PKTX IF NOT DUPLICATE KEYWORD EQ PKT3 GET MORE INPUT PKTA BSS 1 INDEX ENTRY ADDRESS PKTB BSS 1 LETTER PKTC BSS 14D BUFFER PKTD BSS 1 TEMP INDEX POINTER RFH SPACE 4,10 ** RFH - READ AND FORMAT HEADER LINE. * * ENTER (X6) = RSA. * * EXIT (RFHA) = NUMBER OF CHARACTERS IN (RFHB). * (RFHB) = CODED HEADER. RFH SUBR SA6 RFHA SAVE RSA FOR A BIT RECALL H SA1 RFHA BX6 X1 SA6 H+6 SET RSA IN FET SA1 H+1 SX6 X1 RESET FET POINTERS SA6 A1+B1 IN SA6 A6+B1 OUT READ H,R READS H,IN,N.LINE SX7 B6-IN SX4 B0 SA1 IN-1 RFH1 BSS 0 IX0 X4-X7 PL X0,RFHX SA1 A1+B1 SX4 X4+B1 SX0 X1-1R ZR X1,RFH1 SPAN LEADING SPACES RFH2 BSS 0 IX0 X4-X7 PL X0,RFHX SA1 A1+B1 SX4 X4+B1 SX0 X1-1R NZ X0,RFH2 SPAN NON-SPACES RFH3 BSS 0 IX0 X4-X7 PL X0,RFHX SA1 A1+B1 SX4 X4+B1 SX0 X1-1R ZR X0,RFH3 SPAN SPACES SX5 A1 IX7 X7-X4 SX7 X7+2 ACCOUNT FOR CARRIAGE CONTROL TOO SA7 RFHA PUTI RFHB PUTB 1 PUTS X5,X7,B6 PUTZ EQ RFHX RFHA BSS 1 CHARACTER COUNT RFHB BSS 14D RKI SPACE 4,10 ** RKI - READ KEYWORD INDEX. * RKI SUBR RECALL H SKIPEI H,R BKSP H,R BKSP H,R MX6 0 SA6 H+6 CLEAR RSA SA1 H+1 RE-SET FET POINTERS SX6 X1 SA6 A1+B1 IN SA6 A6+B1 OUT READ H,R SA5 INIA (X5) = MAX INDEX LENGTH READW H,INDX,X5 NZ X1,RKI1 IF WE HAVE IT ALL PRINT (INDEX OVERFLOW, CONTACT SITE PERSONNEL.) MX6 0 SA6 INDX+B6 STORE INDEX TERMINATOR SB6 B6+B1 COUNT ZERO WORD RKI1 BSS 0 SX7 B6-INDX SX7 X7-1 DO NOT COUNT ZERO WORD TERMINATOR SA7 RKIA SET WORD COUNT OF INDEX EQ RKIX RKIA BSS 1 LENGTH OF INDEX SKW SPACE 4,10 ** SKW - SORT KEYWORDS. * * SORT ON FIRST WORD OF N-WORD ENTRY. MODIFIED FROM ROUTINE * *SID* BY CVC OF NADC IN *CATLIST*. APPEARS TO BE AN * EXCHANGE SORT, OF SORTS. * * ENTER (B2) = SORT FWA. * (B3) = SORT LWA. * (B4) = ENTRY LENGTH. * * EXIT TABLE SORTED IN PLACE. * * CALLS NONE. * * USES B - 2, 5, 6, 7. * A - 1, 2, 3, 6, 7. * X - 1, 2, 3, 6, 7. SKW SUBR SKW1 BSS 0 GE B2,B3,SKWX IF DONE SA2 B2 SB5 B2+B4 SB6 B0 CLEAR SWAP FLAG SB2 B2+B4 MI X2,SKW1 IGNORE THIS ENTRY SKW2 BSS 0 GE B5,B3,SKW3 SA3 B5 SB5 B5+B4 MI X3,SKW2 IX6 X3-X2 PL X6,SKW2 IF IN ORDER SB6 B5-B4 BX2 X3 EQ SKW2 SKW3 BSS 0 ZR B6,SKW1 IF NO SWAP NEEDED SB7 B4 SA1 B2-B4 SKW4 BSS 0 ZR B7,SKW1 IF SWAP COMPLETE SA2 B6 BX6 X1 LX7 X2 SB6 B6+B1 SA6 A2 SA7 A1 SB7 B7-B1 SA1 A1+B1 EQ SKW4 INI SPACE 4,10 ** INI - INITIALIZE *HELP*. INI BSS 0 SX7 //SENCHK-INDX-1 AX7 1 LX7 1 SX7 X7+B1 SA7 INIA SET INDEX MAXIMUM LENGTH SA1 =0LSENHELP RJ FNT SEE IF *SENHELP* IS AROUND ALREADY SX6 B7 SA6 HELXA SAVE RETURN CODE ZR B7,INI0 NO, GO ATTACH IT PRINT (NOTE, USING LOCAL FILE *SENHELP*!) EQ INI1 SKIP THE ATTACH INI0 BSS 0 IFNOS ATTACH H,0,UN,,R ATTACH *SENHELP* ELSE ATTACH PF,RT,RC ATTACH *SENHELP* SA1 PF AX1 9-0 MX0 -9 BX1 -X0*X1 NZ X1,INI2 IF PF ERROR OF SOME SORT ENDIF INI1 BSS 0 OPEN H,READ,R IFNOSBE SA1 H+1 SET RANDOM BIT IN FET MX0 -1 LX0 47-0 BX6 -X0+X1 SET IT SA6 A1 ENDIF RJ RKI READ KEYWORD INDEX GNA NUM GET NEXT ARTIFACT SB2 B7-3 ZR B2,HEL0 IF DELIMETER SA1 =4LHELP EQ HEL3 USE DEFAULT KEYWORD INI2 BSS 0 PRINT (PROBLEMS - HELP FILE NOT AVAILABLE. HELP!) EQ HELX INIA BSS 1 MAX INDEX LENGTH BUFFERS SPACE 4,10 ** BUFFER ALLOCATION. * * 1) *HELP* CIO BUFFER. * 2) KEYWORD INDEX BUFFER. IT RESIDES BETWEEN *HBUF* AND THE * CHECKPOINT AREA. USE LITERALS HBUF EQU * *HELP* CIO BUFFER INDX EQU HBUF+HBUFL KEYWORD INDEX BUFFER QUAL * END50 BSS 0 TITLE CHECKPOINT AREA. TITLE CHECKPOINT AREA. IDENT CHECKPOINT AREA SPACE 2,5 ** CHECKPOINT AREA. * * WE DO SOME FANCY FOOTWORK HERE TO * * 1) PLACE THIS AREA AFTER THE LONGEST OVERLAY * 2) NOT PRODUCE A DUMMY OVERLAY ON THE BINARY FILE * GENERATED BY THIS ASSEMBLY * 3) PUT THE TOTAL FIELD LENGTH ON THE *END* STATEMENT * SO IT WILL APPEAR IN THE BINARY INFORMATION SECTION * OF THIS LISTING * * SPACE 2,5 ENDPROG MAX END10,END20,END30,END40,END50 .SKIP. BSSR ENDPROG-* ORG TO FWA OF CHECKPOINT AREA SPACE 2,4 LIST X,D *CALL,COMSCHK LIST * SPACE 2,5 * *ENDSEN* IS DEFINED TO BE THE SMALLEST MULTIPLE OF 100B THAT * SATISFIES THE FOLLOWING: * ENDSEN > SENCHK + MAX (LENGTH OF CKP AREA, PRU) + 1 .ENDS. BSSR 1 .ENDT. SET .ENDS.-SENCHK .ENDT. MAX .ENDT.,100B .ENDT. SET .ENDT.+ENDPROG+2-1 .ENDT. SET .ENDT./100B+1 .ENDT. SET .ENDT.*100B ENDSEN EQU .ENDT. SPACE 2,4 ENDS OCTMIC ENDSEN SPACE 4,10 P ERRNZ *-.SKIP. CANNOT PRESTORE INTO CHECKPOINT AREA END "ENDS"B = FL *DECK SENDOC IDENT SENDOC,101B,SENDOC SENDOC TITLE *SENDOC* - GENERATE *SENATOR* DOCUMENTATION. ABS SST ORG 101B SYSCOM B1 LIST F SPACE 4,10 IPARAMS A IFC EQ,*"OS.NAME"*KRONOS* IFNOS OPSYN IFCP IFNOSBE OPSYN SKIP A ELSE B IFC EQ,*"OS.NAME"*NOS* IFNOS OPSYN IFCP IFNOSBE OPSYN SKIP B ELSE IFNOSBE OPSYN IFCP IFNOS OPSYN SKIP B ENDIF A ENDIF COMMENT *SENDOC* - GENERATE *SENATOR* DOCUMENTATION. SPACE 4 *** *SENDOC* - GENERATE *SENATOR* DOCUMENTATION. * S. O. LIDIE 78/04/14. SPACE 4 *** *SENDOC* GENERATES TWO FORMS OF *SENATOR* DOCUMENTATION; AN * ENTIRE REFERENCE MANUAL, AND A HELP FILE ACCESSED ON-LINE BY * *SENATOR*. SPACE 4 *** *SENDOC* CONTROL CARD. * * SENDOC,I=INPUT,L=OUTPUT,H=HELP,NA,NT. * * INPUT = INPUT DIRECTIVE FILE (*I* ALONE IMPLIES I=COMPILE). * OUTPUT = REFERENCE MANUAL OUTPUT. * HELP = *SENATOR* HELP FILE. * NA = NO ADJUSTING OF RIGHT MARGINS (OPTIONAL). * NT = NO TABLE OF CONTENTS (OPTIONAL). SPACE 4 ** DEFINE NOS SYMBOLS FOR SCOPE ASSEMBLIES. IFNOSBE ACTR EQU RA.ACT CMUR EQU RA.CMU CCDR EQU RA.CCD ARGR EQU RA.ARG ** DEFINE *MOVE* MACRO FOR SCOPE. * * MOVE LENGTH,FROM,TO PURGMAC MOVE MOVE MACRO P1,P2,P3 R= X1,P1 R= X2,P2 R= X3,P3 RJ =XMVE= ENDM ENDIF SENHELP TITLE *SENHELP* DATA STRUCTURE. ** *SENHELP* DATA STRUCTURE. * * HELP TEXT IS ORGANIZED INTO SECTIONS OF INFORMATION, EACH OF * WHICH IS A SEPARATE LOGICAL RECORD ON *SENHELP*. THE INDEX * IS THE LAST RECORD AND IT IS FOLLOWED BY AN EOF AND AN EOI. * EACH INDEX ENTRY IS TWO WORDS LONG, AND, AMONG OTHER THINGS, * CONTAINS A KEYWORD AND THE RANDOM SECTOR ADDRESS (RSA) OF * ITS CORRESPONDING HELP TEXT. INDEX ENTRY FORMAT IS: * * VFD 60/KEYWRD * VFD 1/S, 11/PN, 18/LINK, 30/RSA * * KEYWRD ONE TO TEN CHARACTER KEYWORD, LEFT-ADJUSTED * AND BINARY ZERO FILLED. * * S THIS BIT IS SET FOR 'SPECIAL' KEYWORDS GENERATED * IMPLICITLY BY THE .SH DIRECTIVE. THESE KEYWORDS ARE * SIMPLY INTEGERS AND ARE LISTED IN RESPONSE TO AN * *INFO* REQUEST IN ON-LINE HELP. SEE *LSH* IN * THE (5,0) OVERLAY IN *SENATOR*. * * PN BEGINNING PAGE NUMBER FOR THIS SECTION OF IN- * FORMATION ON *SENMAN* (THE PRINTER MANUAL). USED * DURING GENERATION OF THE KEYWORD INDEX AND IS * IGNORED BY ON-LINE HELP. * * LINK LINK ORDINAL. DUPLICATE KEYWORDS FOR DIFFERENT * SECTIONS ARE CHAINED TOGETHER IN A FOREWARD LINKED * LIST. THE LINK IS AN ORDINAL RELATIVE TO THE FWA * OF THE INDEX WHEN IT IS IN CENTRAL MEMORY. END OF * LIST IS INDICATED BY A LINK ORDINAL OF ZERO. * * RSA RANDOM SECTOR ADDRESS OF THE BEGINNING OF HELP * INFORMATION FOR THIS KEYWORD. SPACE 4 IFNOS 1 XTEXT COMCMAC LIST X *CALL COMCPTM LIST * SENDOC TITLE LOCAL MACRO DEFINITIONS. ** OBL - OUTPUT BLANK LINES. * * OBL N * * N = NUMBER OF BLANK LINES. OBL MACRO N R= X6,N RJ OBL OBL ENDM PRINT SPACE 4,8 ** PRINT - OUTPUT A LINE. * * PRINT ADDR * * ADDR = ADDRESS OF CODED LINE. PRINT MACRO P1 R= X6,P1 RJ PRT PRINT ENDM PRINTS SPACE 4,8 ** PRINTS - OUTPUT A STRING BUFFER. * * PRINTS ADDR,NCHAR * * ADDR = ADDRESS OF STRING BUFFER. * NCHAR = NUMBER OF R1 CHARACTERS (DEFAULT = *INLL+1*). PRINTS MACRO P1,P2 R= X6,P1 .1 IFC EQ,*P2** R= X7,INLL+1 .1 ELSE R= X7,P2 .1 ENDIF RJ PST PRINTS ENDM ROM SPACE 4,8 ** ROM - DEFINE ROMAN NUMERAL TABLE. * * XIV ROM NOREF .2 MACRO ROM,N .1 MICRO 1,,*N* .2 MICCNT .1 + VFD 42/0L_N,18/.2 ROM ENDM SENDOC TITLE ASSEMBLY CONSTANTS. ** LIST CONTROL CONSTANTS. PS EQU 1 PARAGRAPH SKIP HS EQU 3 HEADER SKIP BT EQU 5 BOTTOM TITLE LINE COUNT LM EQU 6 LEFT MARGIN FOR PARAGRAPHS TT EQU 6 TOP TITLE LINE COUNT LP EQU 66 LINES / PAGE SPACE 4 ** BUFFER LENGTH CONSTANTS. MXHL EQU 5 MAXIMUM LEVELS FOR HEADERS INLL EQU 72 INPUT LINE LENGTH IN CHARACTERS OTLL EQU 71 OUTPUT LINE LENGTH IN CHARACTERS INDXL EQU 2*500D+1 MAX OF 500D KEYWORDS HBUFL EQU 2001B HELP BUFFER LENGTH IBUFL EQU 2001B INPUT BUFFER LENGTH OBUFL EQU 2001B OUTPUT BUFFER LENGTH CBUFL EQU 501B TABLE OF CONTENTS BUFFER LENGTH SPACE 4 ** PUNCTUATION MICROS. AMAZE MICRO 1,, ! EXCLAMATION MARK COLON MICRO 1,, : COLON QUERY MICRO 1,, ? QUESTION MARK SPACE 4 ** *SENATOR* VERSION (FOR COVER SHEET). VER MICRO 1,, 2.7 SENDOC TITLE FETS AND DATA. H BSS 0 HELP RFILEC HBUF,HBUFL,FET=7 I BSS 0 INPUT FILEC IBUF,IBUFL,FET=7 O BSS 0 OUTPUT FILEC OBUF,OBUFL,FET=7 C BSS 0 ZZZZZXC FILEC CBUF,CBUFL LC CON -LP LINE COUNT PC CON 0 PAGE COUNT TL CON 1L TITLE LINE BSS 7 CON 0 SL CON 1L SUBTITLE LINE BSS 7 CON 0 AF CON 1 NZ IFF ADJUSTING PARAGRAPHS TC CON 1 NZ IFF TABLE OF CONTENTS OO CON 0 ORIGINAL OUTPUT FILE NAME VFD 42/0LZZZZZXO,*P/1 SK CON -0 -0 IF NOT SKIPPING, +0 IF SKIPPING KW CON 0 DO NOT WRITE TO HELP FILE IF ZERO IP CON 0 INDEX POINTER SH CON 1 INITIAL SPECIAL HEADER NUMBER TM BSS 2 *TIM* REPLY WORDS TROM BSS 0 ROMAN NUMERAL TABLE I ROM II ROM III ROM IV ROM V ROM VI ROM VII ROM VIII ROM IX ROM X ROM XI ROM XII ROM XIII ROM XIV ROM XV ROM XVI ROM XVII ROM XVIII ROM XIX ROM XX ROM TROML EQU *-TROM TABLE LENGTH SENDOC TITLE MAIN LOOP. SENDOC SB1 1 AS ALWAYS RJ PRS PRESET *SENDOC* DOC1 BSS 0 RJ RNL READ NEXT LINE NZ X1,DOC2 IF EOR RJ PIL PROCESS INPUT LINE EQ DOC1 DOC2 BSS 0 RJ FIN ENDRUN AOC TITLE SUPPORT SUBROUTINES. ** AOC - ADD ONE CHARACTER. * * ENTER (X1) = R1 CHARACTER. * (X6) = OUTPUT WORD. * (B2) = SHIFT COUNT. * (B3) = 6. * (B4) = STORE ORDINAL. AOC SUBR SB2 B2-B3 MI B2,AOC1 IF WORD FULL LX1 B2 BX6 X1+X6 INSERT NEW CHARACTER EQ AOCX AOC1 BSS 0 SA6 COWA+B4 STORE PACKED WORD SB4 B4+B1 BX6 X6-X6 SB2 60 EQ AOC+1 AOL SPACE 4,8 ** AOL - ADJUST AND OUTPUT LINE. * * ENTER (AF) = 1 IFF ADJUSTING PARAGRAPHS. * (X5) = NUMBER OF CHARACTERS IN LINE, INCLUDING * TRAILING SPACES, EXCLUDING CARRIAGE CONTROL. * (TUTB) = PACKED LINE. * (TUTD) = FIRST COLUMN TO CONSIDER. * (TUTE) = NUMBER OF TRAILING SPACES IN WORD. * * EXIT LINE OUTPUT. * * CALLS *PUT*. AOL SUBR SA1 AF NZ X1,AOL2 IF ADJUSTING AOL1 BSS 0 PUTB 1 PRESERVE TRAILING COLONS PUTZ PUT EOL PRINT TUTB PRINT LINE EQ AOLX AOL2 BSS 0 SA1 TUTE SX0 X1+B1 IGNORE LAST CHAR + TRAILING SPACES IX5 X5-X0 SB3 X5 (B3) = LAST COLUMN SA1 TUTD SB2 X1 (B2) = FIRST COLUMN * MOVE (TUTB) TO (AOLB) IN STRING (R1) FORMAT. ZERO (INITIALIZE) * THE COLUMN TABLE. EACH WORD IN THE COLUMN TABLE CORRESPONDS * TO A SPECIFIC CHARACTER OF THE STRING, AND WILL CONTAIN THE * NUMBER OF SPACES TO *PUT* AFTER THAT CHARACTER. SX7 B3+B1 SX0 OTLL IX7 X0-X7 COMPUTE NUMBER OF SPACES NEEDED ZR X7,AOL1 IF NO ADJUSTING NEEDED SA7 AOLA SAVE NUMBER OF PAD SPACES NEEDED SB4 B0 SA1 TUTB READ FIRST PACKED WORD MX0 -6 (X0) = OFTEN USED MASK SB6 10 A NICE CONSTANT SB7 B3+B1 (B7) = LAST CHARACTER TO MOVE SB5 B6 AOL3 BSS 0 SB5 B5-B1 MI B5,AOL5 IF ALL OF (X1) UNPACKED LX1 6 BX6 -X0*X1 EXTRACT R1 CHARACTER SA6 AOLB+B4 SB4 B4+B1 LE B4,B7,AOL3 IF MORE TO GO SX6 B0+ SB4 INLL NUMBER OF COLUMN TABLE ENTRIES AOL4 BSS 0 SB4 B4-1 MI B4,AOL6 IF ALL ZERO SA6 AOLC+B4 EQ AOL4 AOL5 BSS 0 SA1 A1+B1 READ NEXT PACKED WORD SB5 B6 RESET COUNT EQ AOL3 CONTINUE UNPACKING AOL6 BSS 0 SA1 AOLE BX7 -X1 TOGGLE DIRECTION OF SCAN SA7 A1 MI X1,AOL19 IF RIGHT TO LEFT SCAN SB4 B2 CURRENT COLUMN = FIRST COLUMN MX5 1 SET PAD AFTER PUNCTUATION AOL7 BSS 0 SA1 AOLB+B4 READ R1 CHARACTER PL X5,AOL12 IF SEARCHING FOR BREAK CHARACTER * PAD AFTER PUNCTUATION. SA2 COWC AOL8 BSS 0 SA2 A2+B1 ZR X2,AOL10 IF NOT PUNCTUATION BX2 -X0*X2 IX2 X1-X2 SEE IF CURRENT CHARACTER = PUNCTUATION NZ X2,AOL8 LOOP FOR ALL PUNCTUATION * A SPACE MUST FOLLOW IF THIS IS REALLY PUNCTUATION. SB5 B4+B1 GT B5,B3,AOL10 IF EOL, DON'T PAD AFTER THIS COLUMN SA1 AOLB+B5 READ NEXT CHARACTER SX1 X1-1R NZ X1,AOL10 IF NOT A SPACE, CAN'T BE PUNCTUATION AOL9 BSS 0 SA1 B4+AOLC READ COLUMN TABLE ENTRY SX6 X1+B1 INCREMENT NUMBER OF SPACES AT THIS COLUMN SA6 A1 SA1 AOLA SX6 X1-1 SA6 A1 DECREMENT COUNT OF PAD SPACES ZR X6,AOL16 IF LINE FINALLY ADJUSTED AOL10 BSS 0 SB4 B4+B1 ADVANCE ONE CHARACTER LE B4,B3,AOL7 IF MORE TO GO SB4 B2 SET NEW FIRST COLUMN PL X5,AOL11 IF ALREADY LOOKING FOR BREAK CHARACTERS SX5 1R SET BREAK CHARACTER EQ AOL7 AOL11 BSS 0 MX5 1 SET PAD AFTER PUNCTUATION EQ AOL7 AOL12 BSS 0 IX2 X1-X5 SEE IF BREAK CHARACTER NZ X2,AOL10 IF NOT BREAK * IGNORE THIS BREAK CHARACTER IF PUNCTUATION PRECEDES IT. SB5 B4-B1 LT B5,B2,AOL15 IF BOL SA2 COWC SA1 B5+AOLB READ PREVIOUS CHARACTER AOL13 BSS 0 SA2 A2+B1 ZR X2,AOL15 IF NOT PUNCTUATION BX2 -X0*X2 IX2 X1-X2 NZ X2,AOL13 LOOP FOR ALL PUNCTUATION AOL14 BSS 0 SB5 B4+B1 GT B5,B3,AOL10 IF EOL SA1 A1+B1 READ NEXT CHARACTER IX2 X1-X5 NZ X2,AOL10 IF NOT BREAK CHARACTER SB4 B5 EQ AOL14 SPAN BREAK CHARACTERS AOL15 BSS 0 SB5 B4+B1 CHECK NEXT CHARACTER GT B5,B3,AOL9 IF EOL SA1 B5+AOLB READ NEXT CHARACTER IX2 X1-X5 NZ X2,AOL9 IF NOT BREAK SB4 B5 EQ AOL15 SPAN BREAK CHARACTERS AOL16 BSS 0 SA5 AOLC-1 SB7 B3+B1 (B7) = LAST COLUMN TO *PUTS* SB5 B0 INITIALIZE LAST COLUMN PUTI TUTB SET *PUT* FWA AOL17 BSS 0 BUILD ADJUSTED LINE IMAGE SA5 A5+1 READ COLUMN TABLE ENTRY MI X5,AOL18 IF EOT, ADJUSTING COMPLETE ZR X5,AOL17 IF NO SPACES AT THIS COLUMN SB6 A5-AOLC (B6) = COLUMN NUMBER SB6 B6-B5 SX7 B6+B1 (X7) = NUMBER OF CHARACTERS SINCE LAST TIME PUTS (AOLB+B5),X7 PUTB X5,B6 PUT PAD SPACES SB5 B5+X7 (B5) = NEW FIRST COLUMN EQ AOL17 AOL18 BSS 0 SB7 B7-B5 PUTS (AOLB+B5),(B7+B1) EQ AOL1 AOL19 BSS 0 SB4 B3 SET CURRENT COLUMN = LAST COLUMN MX5 1 SET PAD AFTER PUNCTUATION AOL20 BSS 0 SA1 AOLB+B4 READ R1 CHARACTER PL X5,AOL25 IF SEARCHING FOR BREAK CHARACTER * PAD AFTER PUNCTUATION. SA2 COWC AOL21 BSS 0 SA2 A2+B1 ZR X2,AOL23 IF NOT PUNCTUATION BX2 -X0*X2 IX2 X1-X2 SEE IF CURRENT CHARACTER = PUNCTUATION NZ X2,AOL21 LOOP FOR ALL PUNCTUATION * A SPACE MUST FOLLOW IF THIS IS REALLY PUNCTUATION. SB5 B4+B1 GT B5,B3,AOL23 IF EOL, DON'T PAD AFTER THIS COLUMN SA1 AOLB+B5 READ NEXT CHARACTER SX1 X1-1R NZ X1,AOL23 IF NOT A SPACE, CAN'T BE PUNCTUATION AOL22 BSS 0 SA1 B4+AOLC READ COLUMN TABLE ENTRY SX6 X1+B1 INCREMENT NUMBER OF SPACES AT THIS COLUMN SA6 A1 SA1 AOLA SX6 X1-1 SA6 A1 DECREMENT COUNT OF PAD SPACES ZR X6,AOL16 IF LINE FINALLY ADJUSTED AOL23 BSS 0 SB4 B4-B1 ADVANCE ONE CHARACTER GE B4,B2,AOL20 IF MORE TO GO SB4 B3 SET NEW FIRST COLUMN PL X5,AOL24 IF ALREADY LOOKING FOR BREAK CHARACTERS SX5 1R SET BREAK CHARACTER EQ AOL20 AOL24 BSS 0 MX5 1 SET PAD AFTER PUNCTUATION EQ AOL20 AOL25 BSS 0 IX2 X1-X5 SEE IF BREAK CHARACTER NZ X2,AOL23 IF NOT BREAK * SPAN THE BREAK CHARACTER(S). IF PUNCTUATION STOPS THE SPAN, * DON'T PAD HERE. AOL26 BSS 0 SB5 B4-B1 LT B5,B2,AOL22 IF BOL, OKAY TO PAD HERE SA1 A1-B1 READ NEXT CHARACTER IX2 X1-X5 NZ X2,AOL27 IF NOT BREAK CHARACTER SB4 B5 EQ AOL26 SPAN BREAK CHARACTERS AOL27 BSS 0 SA2 COWC AOL28 BSS 0 SA2 A2+1 READ NEXT PUNCTUATION ZR X2,AOL22 IF NOT PUNCTUATION BX2 -X0*X2 IX2 X1-X2 NZ X2,AOL28 LOOP FOR ALL PUNCTUATION EQ AOL23 DON'T PAD HERE AOLA BSS 1 NUMBER OF PAD SPACES AOLB BSS INLL R1 LINE IMAGE AOLC BSS INLL COLUMN NUMBER TABLE CON -0 EOT *AOLD CON 0 AVAILABLE FOR USE AOLE CON -0 MI IF R-L SCAN, PL IF L-R SCAN COW SPACE 4,8 ** COW - COLLECT ONE WORD. * * ENTER (RNLB) = CURRENT LINE POSITION. * * EXIT (X1) = 10 (OR FEWER) CHARACTERS OF WORD. * (A1) = ADDRESS OF (X1), FOR MORE THAN 10 CHARACTERS. * (X2) = CHARACTER LENGTH OF WORD + PUNCTUATION. * (X3) = (X2) - NUMBER OF TRAILING BLANKS. * (COWA) = WORD. * (COWB) = LENGTH OF WORD. * * CALLS *AOC*. COW SUBR SA2 RNLC (X2) = LAST COLUMN SA4 RNLB (X4) = CURRENT COLUMN BX6 X6-X6 INITIALIZE OUTPUT WORD SB4 B0+ INITIALIZE STORE ORDINAL FOR *AOC* MX7 0 (X7) = WORD CHARACTER COUNT SB2 60 SB3 6 COW1 BSS 0 SA1 RNLA+X4 READ A CHARACTER SX0 X1-1R NZ X0,COW2 IF 1ST CHARACTER OF WORD SX4 X4+B1 IX0 X4-X2 MI X0,COW1 SPAN SPACES SX2 B0+ INDICATE EOL REACHED EQ COWX COW2 BSS 0 SA3 COWC-1 COW3 BSS 0 SA3 A3+B1 ZR X3,COW8 IF NOTHING SPECIAL BX0 X1-X3 SX0 X0 NZ X0,COW3 LOOP FOR ALL PUNCTUATION * IF NOT A SPACE, CONSIDER THIS CHARACTER AS PUNCTUATION IFF * A SPACE FOLLOWS. ELSE, IT IS PART OF THE CURRENT WORD. SX0 X1-1R ZR X0,COW5 IF SPACE, END OF WORD SX0 X4+B1 IX0 X0-X2 PL X0,COW5 IF EOL, MUST BE PUNCTUATION BX0 X1 SAVE (X1) SA1 RNLA+1+X4 READ FOLLOWING CHARACTER SB7 X1-1R ZR B7,COW5 IF SPACE FOLLOWS, MUST BE PUNCTUATION BX1 X0 RESTORE (X1) EQ COW8 ASSUME PUNCTUATION IS PART OF WORD COW4 BSS 0 SA3 COWC USE DEFAULT SX4 X4-1 COW5 BSS 0 LX3 -18 MX0 -6 BX1 -X0*X3 (X1) = LENGTH OF PUNCTUATION IX7 X1+X7 COUNT AS PART OF WORD LX3 -6 BX1 -X0*X3 SB5 X1 (B5) = NUMBER OF TRAILING SPACES LX3 6+18 BX1 -X0*X3 GET PUNCTUATION RJ AOC ADD IT COW6 BSS 0 LX3 6 BX1 -X0*X3 EXTRACT SPACE(S) (IF ANY) AFTER PUNC ZR X1,COW7 IF DONE RJ AOC ADD ONE CHARACTER EQ COW6 COW7 BSS 0 SA6 COWA+B4 STORE LAST PART OF WORD BX3 X7 (X3) = COUNT LESS TRAILING SPACES SX7 X7+B5 COUNT TRAILING SPACES SA7 COWB SA1 COWA BX2 X7 SX7 X4+B1 SA7 RNLB UPDATE CURSOR POSITION SX7 B5 SA7 COWD SAVE NUMBER OF TRAILING SPACES EQ COWX COW8 BSS 0 RJ AOC ADD ONE CHARACTER SX7 X7+B1 COUNT IT SX4 X4+1 IX0 X4-X2 PL X0,COW4 IF EOL, WE HAVE END OF WORD AS WELL SA1 RNLA+X4 EQ COW2 PROCESS NEXT CHARACTER COWA BSS 8 PACKED WORD COWB BSS 1 NUMBER OF CHARACTEERS COWC BSS 0 VFD 12/0,18/0,6/1,6/0,18/1R MUST BE FIRST VFD 12/1L ,18/0,6/1,6/1,18/1R, VFD 12/1L ,18/0,6/1,6/1,18/1R; VFD 12/2L ,18/0,6/2,6/1,18/1R. VFD 12/2L ,18/0,6/2,6/1,18/1R"COLON" VFD 12/2L ,18/0,6/2,6/1,18/1R"AMAZE" VFD 12/2L ,18/0,6/2,6/1,18/1R"QUERY" CON 0 COWD BSS 1 NUMBER OF SPACES FOLLOWING CURRENT WORD EAS SPACE 4,8 ** EAS - ENTER ACTIVE SEQUENCE. * * ENTER (EASA) = ADDRESS OF ACTIVE SEQUENCE OR ZERO. * * EXIT ONLY IF NO ACTIVE SEQUENCE. EAS SUBR SA1 EASA ZR X1,EASX IF NO ACTIVE SEQUENCE SB7 X1 JP B7 ENTER PROCESSOR EASA CON 0 ZR, ELSE ADDRESS OF PROCESSOR EHB SPACE 4,10 ** EHB - EMPTY HELP BUFFER. * * SET *H* FET POINTERS TO START OF BUFFER. * * USES B - NONE. * A - 1, 6. * X - 1, 6. EHB SUBR SA1 H+1 SX6 X1 SA6 A1+B1 IN SA6 A6+B1 OUT EQ EHBX EJT SPACE 4,8 ** EJT - EJECT. * * ENTER (LC) = NUMBER OF LINES ON PAGE (0 IF EMPTY PAGE). * * EXIT (PC) = INCREMENTED BY ONE. * (LC) = *TT* + *BT* (E.G., EJECT JUST PERFORMED). * * CALLS *FOP*, *WTC=*. EJT SUBR SA1 LC ZR X1,EJT1 IF AT TOP OF PAGE RJ FOP FILL OUT PAGE EJT1 BSS 0 SX6 TT+BT ACCOUNT FOR TOP AND BOTTOM TITLES SA6 LC INITIALIZE LINE COUNT SA1 PC SX6 X1+B1 SA6 A1 ADVANCE PAGE COUNT WRITEC O,(=C= =) WRITEC O,(=C= =) SA1 =10H BX6 X1 WRITEO O OUTPUT *LEFT* WRITEC O,TL SA1 =10H BX6 X1 WRITEO O OUTPUT *LEFT* WRITEC O,SL WRITEC O,(=C= =) WRITEC O,(=C= =) EQ EJTX EOP SPACE 4,8 ** EOP - END OF PARAGRAPH. * * ENTER (RNLA) = STRING CARD IMAGE. * (RNLB) = STARTING COLUMN. * (RNLC) = LAST COLUMN. * * EXIT (B7) = 0 IF BLANK LINE. EOP SUBR SA5 RNLB SA4 RNLC EOP1 BSS 0 SA1 RNLA+X5 SB7 X1-1R NZ B7,EOPX IF NOT END OF PARAGRAPH SX5 X5+B1 IX0 X5-X4 MI X0,EOP1 IF NOT END OF LINE SB7 B0+ EQ EOPX FCL SPACE 4,8 ** FCL - FORMAT CONTENT LINE. * * ENTER (RNLA) = STRING CONTENT LINE IMAGE. HEADER NUMBER * FOLLOWED BY THE HEADER TEXT. * (FINB) = PAGE NUMBER FOR HEADER. * (FIND) = LEVEL NUMBER - ONE. * * EXIT (TUTB) = REFORMATTED CONTENT LINE. * * CALLS *PUT* FCL SUBR PUTI TUTB SET *PUT* FWA SA1 FIND SA1 X1+FCLA (X1) = NUMBER OF LEADING SPACES PUTB X1 PUT CARRIAGE CONTROL + SPACES SB2 B0 CHARACTER COUNT SB5 INLL SA5 RNLA-1 (A5) = FWA-1 OF LINE FCL1 BSS 0 SB5 B5-B1 MI B5,FCL5 IF EOL SA5 A5+B1 READ NEXT CHARACTER SX0 X5-1R ZR X0,FCL1 SPAN SPACES SB4 A5 (B4) = FWA OF HEADER NUMBER FCL2 BSS 0 SB2 B2+B1 COUNT CHARACTER SB5 B5-B1 MI B5,FCL3 IF EOL SA5 A5+B1 SX0 X5-1R NZ X0,FCL2 BREAK ON A SPACE CHARACTER FCL3 BSS 0 PUTS B4,B2,B6 PUT LEVEL NUMBER SA1 FIND SA1 X1+FCLB GET *STCOL* FOR THIS HEADER LEVEL SB6 X1 PUTT ( ),B6 PUT AT LEAST ONE SPACE, IF NOT MORE FCL4 BSS 0 SB5 B5-B1 MI B5,FCL5 IF EOL SA5 A5+B1 SX0 X5-1R ZR X0,FCL4 SPAN SPACES SB2 RNLA+INLL SB3 A5 SB3 B2-B3 COMPUTE NUMBER OF REMAINING CHARACTERS PUTS A5,B3,B6 PUT HEADER TEXT PUTB ,(OTLL-5+2) SPACE OUT TO PAGE NUMBER FCL5 BSS 0 PUTI TUTB,(OTLL-5+2) SET *PUT* FWA AND COLUMN PUTD FINB,5 PUTZ EQ FCLX FCLA BSS 0 LEADING SPACE COUNT FOR EACH HEADER LEVEL CON 1+0 LEVEL 1 CON 1+2 LEVEL 2 CON 1+2 LEVEL 3 CON 1+2 LEVEL 4 CON 1+2 LEVEL 5 CON 1+0 LEVEL (MXHL+1) FOR APPENDIX FCLB BSS 0 CON 10 LEVEL ONE CON 10 LEVEL TWO CON 13 LEVEL THREE CON 16 LEVEL FOUR CON 16 LEVEL FIVE CON 16 APPENDIX FIN SPACE 4,8 ** FIN - TERMINATE *SENDOC*. * FIN SUBR RJ FPT FLUSH ANY REMAINING TEXT RJ FOP FILL OUT LAST PAGE SA1 KW NZ X1,FIN0 IF LAST SECTION HAD A KEYWORD RJ EHB EMPTY HELP BUFFER FIN0 BSS 0 WRITER H,R SA1 IP BX6 X6-X6 SA6 X1+INDX STORE ZERO WORD TERMINATOR IFNOSBE 1 RJ UMK UPDATE MULTIPLE KEYWORDS WRITEW H,INDX,X1+B1 WRITER H,R WRITEF H,R REWIND H,R BX6 X6-X6 SA6 H STOP FURTHER OUTPUT ON *HELP* FILE RJ GKI GENERATE KEYWORD INDEX SA1 TC ZR X1,FIN9 IF NO TABLE OF CONTENTS WRITER O,R WRITER C,R OPEN C,READ,R READ C INITIATE READ SX6 -TROML-1 SA6 PC SO *FOP* KNOWS ABOUT ROMAN NUMERALS MOVE 3,FINA,SL SET NEW SUB-TITLE LINE SA1 OO BX6 X1 SA6 O RESTORE ORIGINAL OUTPUT FILE NAME FIN1 BSS 0 CREATE TABLE OF CONTENTS READO C NZ X1,FIN6 IF END SA6 FIND SAVE LEVEL NUMBER - 1 NZ X6,FIN4 IF NOT LEVEL ONE SA1 LC PROCESS NEW CHAPTER SX0 X1+6+3+2 SEE IF ROOM ON CURRENT PAGE SX0 X0-LP MI X0,FIN2 IF ROOM RJ EJT START NEW PAGE FIN2 BSS 0 SA1 LC SX0 X1-TT-BT-1 MI X0,FIN3 IF AT TOP OF PAGE OBL 6 SKIP SOME LINES FIN3 BSS 0 PUTI RNLA SET *PUT* FWA PUTT (CHAPTER),31 SA1 FINC (X1) = CURRENT CHAPTER NUMBER SX6 X1+B1 SA6 A1 INCREMENT CHAPTER NUMBER PUTD X1,,,B6+B1 PUT A SPACE + CHAPTER NUMBER PUTZ PRINT RNLA PRINT CHAPTER NUMBER PRINT (=C= ---------=) OBL 1 FIN4 BSS 0 READO C READ PAGE NUMBER FOR HEADER SA6 FINB SAVE PAGE NUMBER READS C,RNLA,INLL READ HEADER TEXT RJ FCL FORMAT CONTENT LINE SA1 FIND SX0 X1-MXHL NZ X0,FIN5 IF NOT APPENDIX SA1 FINE NZ X1,FIN4.1 IF NOT FIRST APPENDIX SX6 B1 SA6 A1 OBL 9 FIN4.1 BSS 0 OBL 1 SKIP A LINE FIN5 BSS 0 PRINT TUTB OUTPUT CONTENT LINE SA1 FIND NZ X1,FIN1 IF NOT LEVEL ONE OBL 1 EQ FIN1 FIN6 BSS 0 OBL 2 PUTI TUTB SET PUT FWA PUTF FINF,,Z PUTB ,(OTLL-5+2) PUTD FING,5 PUTZ PRINT TUTB DISPLAY KEYWORD INDEX PAGE NUMBER RJ FOP FILL OUT LAST CONTENT PAGE SA1 OO+1 BX6 X1 SA6 I SET UP SCRATCH FET OPEN I,READ,R READ I INITIATE READ FIN7 BSS 0 COPY SCRATCH FILE TO OUTPUT FILE READC I,RNLA,(2*INLL/10) NZ X1,FIN8 IF END WRITEC O,RNLA EQ FIN7 FIN8 BSS 0 RETURN I,R RETURN C,R FIN9 BSS 0 WRITER O,R PUTI TUTB SA1 IP AX1 1 (X1) = NUMBER OF KEYWORDS ZR X1,FIN10 IF NO KEYWORDS PUTD X1,4,,B6 PUT NUMBER OF KEYWORDS PUTT (/),B6 SX1 INDXL/2 PUTD X1,,,B6 PUT MAX NUMBER OF KEYWORDS PUTT (KEYWORDS.),11 PUTZ MESSAGE TUTB,,R DISPLAY NUMBER OF KEYWORDS FIN10 BSS 0 TIME TM+1 GET CURRENT TIME SA1 TM+1 GET FINAL CPU TIME READING MX0 -12 (X0) = MASK FOR MILLISECOND FIELD BX6 -X0*X1 (X6) = FINAL MILLISECOND VALUE AX1 12 DISCARD THE MILLISECONDS NOW MX0 -24 (X0) = MASK FOR SECOND FIELD BX1 -X0*X1 (X1) = FINAL SECOND VALUE LX1 3 *8 IX0 X1+X1 *16 IX0 X0+X1 *24 LX1 7 *1024 IX1 X1-X0 SECONDS*1000 AT THIS POINT IX7 X1+X6 (X7) = FINAL TIME VALUE, IN MILLSECONDS SA1 TM (X1) = INITIAL CPU TIME READING MX0 -12 (X0) = MASK FOR MILLISECOND FIELD BX6 -X0*X1 (X6) = INITIAL MILLISECOND VALUE AX1 12 DROP THE MILLISECONDS MX0 -24 (X0) = MASK FOR SECOND FIELD BX1 -X0*X1 (X1) = INITIAL SECOND VALUE LX1 3 *8 IX0 X1+X1 *16 IX0 X0+X1 *24 LX1 7 *1024 IX1 X1-X0 (X1) = INITIAL SECONDS*1000 IX6 X1+X6 (X6) = INITIAL TIME VALUE, IN MILLISECONDS IX5 X7-X6 (X5) = ELAPSED CPU TIME, IN MILLISECONDS PUTI TUTB SET PUT FWA PUTR (X5,0,36),8,R PUTT (SECONDS.),12 PUTZ MESSAGE TUTB,,R DISPLAY ELAPSED TIME MESSAGE (=C= SENDOC COMPLETE.=) EQ FINX FINA DATA 19C TABLE OF CONTENTS. FINB BSS 1 PAGE NUMBER FOR CURRENT HEADER FINC CON 1 CHAPTER NUMBER COUNTER FIND BSS 1 LEVEL NUMBER - 1 FINE CON 0 ZR IFF FIRST APPENDIX FINF DATA 41C KEYWORD INDEX FOR ON-LINE HELP REQUESTS. FING BSS 1 PAGE NUMBER OF KEYWORD INDEX FOP SPACE 4,8 ** FOP - FILL OUT PAGE. * * ENTER (LC) = NUMBER OF LINES ON PAGE. * * EXIT PAGE FILLED OUT, PAGE NUMBER PRINTED. * * CALLS *PUT*, *WTC=*. FOP SUBR SA1 LC SX0 LP IX0 X0-X1 (X0) = LINES LEFT ON PAGE MI X0,FOPX SX6 X0+2 (X6) = NUMBER OF FILLER LINES SA6 FOPB FOP1 BSS 0 SA1 FOPB SX6 X1-1 MI X6,FOP2 IF ALL LINES OUTPUT SA6 A1 WRITEC O,(=C= =) EQ FOP1 FOP2 BSS 0 * *PUT* IS NICE, BUT NOT RE-ENTRANT. SAVE (PTIA) AND RESTORE. SA1 PTIA BX6 X1 SA6 FOPB SAVE (PTIA) PUTI FOPA SET *PUT* FWA SA1 PC PL X1,FOP3 IF NOT TABLE OF CONTENTS SA5 FOPC SX6 X5+B1 SA6 A5 ADVANCE INDEX SX0 X5-TROML PL X0,FOP3 IF NO MORE ROMAN NUMERALS SA5 X5+TROM READ TABLE ENTRY SX7 X5 (X7) = NUMBER OF CHARACTERS PUTF X5,1,X7,35 PUT PAGE NUMBER (ROMAN NUMERAL) EQ FOP4 FOP3 BSS 0 PUTT (- ),34 PUTD PC,,,B6 PUT PAGE NUMBER PUTT (-),B6+B1 FOP4 BSS 0 PUTZ SA1 =10H BX6 X1 WRITEO O OUTPUT *LEFT* WRITEC O,FOPA OUTPUT PAGE NUMBER WRITEC O,(=C= =) WRITEC O,(=C= =) SA1 FOPB BX6 X1 SA6 PTIA RESTORE (PTIA) BX6 X6-X6 SA6 LC SET EMPTY PAGE EQ FOPX FOPA BSS 2*INLL/10 FOPB BSS 1 COUNT OF NUMBER OF FILLER LINES FOPC CON 0 ROMAN NUMERAL INDEX FPT SPACE 4,8 ** FPT - FLUSH PARAGRAPH TEXT. * * ENTER (TUTB) = CODED LINE. * * EXIT (TUTB) = SET UP FOR NEW LINE. * * CALLS *INL*, *PUT*. FPT SUBR SA1 TUTA NZ X1,FPTX IF NO PARAGRAPH IN PROGRESS RJ INL IGNORE NULL LINE ZR X2,FPT1 IF A LINE OF ONLY SPACES PUTB 1 PRESERVE TRAILING COLONS PUTZ PRINT TUTB FPT1 BSS 0 PUTI TUTB SET *PUT* FWA PUTB 1+LM SX6 LM SA6 TUTC INITIALIZE CHARACTER COUNT IN LINE SX6 X6+2 SA6 TUTD SET 1ST COLUMN EQ FPTX GKI SPACE 4,10 ** GKI - GENERATE KEYWORD INDEX. * * ENTER (INDX) = KEYWORD INDEX. * * EXIT INDEX PRINTED. * * CALLS *MVE*, *PUT*, *SKW*, *SZC*. * * USES ALL. GKI SUBR SA1 PC SX6 X1+1 SINCE *EJT* HASN'T BEEN CALLED SA6 FING SAVE PAGE NUMBER FOR *FIN* SA1 IP ZR X1,GKIX EXIT IF NO KEYWORDS AT ALL SB2 INDX (B2) = SORT FWA SB3 X1+B2 (B3) = SORT LWA SB4 B1+B1 (B4) = 2 WORDS/INDEX ENTRY RJ SKW SORT KEYWORDS MOVE 5,FINF,SL SET NEW SUBTITLE LINE * REMOVE .SH SPECIAL KEYWORDS AND COMPACT THE INDEX. SA5 INDX-2 SB2 B1+B1 CONSTANT 2 SB3 A5+B2 (B3) = NEXT WRITE ADDRESS GKI1 BSS 0 SA5 A5+B2 ZR X5,GKI2 IF END OF INDEX SA1 A5+B1 MI X1,GKI1 IGNORE ALL SPECIAL KEYWORDS BX6 X5 LX7 X1 SA6 B3 SA7 B3+B1 MOVE THE 2 WORD INDEX ENTRY UP SB3 B3+B2 ADVANCE STORE ADDRESS EQ GKI1 LOOP FOR ENTIRE INDEX GKI2 BSS 0 SX0 B3-INDX AX0 1 (X0) = NUMBER OF KEYWORDS * ENSURE AN INTEGRAL MULTIPLE OF 4 KEYWORDS. AX1 B2,X0 /4 LX1 B2,X1 *4 IX2 X0-X1 (X2) = REMAINDER ZR X2,GKI4 IF AN EVEN MULTIPLE ALREADY SX6 B2+B2 (X6) = 4 IX2 X6-X2 COMPUTE NUMBER OF DUMMY KEYWORDS SX6 1R THE DUMMY KEYWORD IX0 X0+X2 ROUND UP COUNT OF KEYWORDS GKI3 BSS 0 SX2 X2-1 COUNT IT MI X2,GKI4 IF DONE SA6 B3 STORE A DUMMY KEYWORD SA6 B3+B1 SB3 B3+B2 EQ GKI3 GKI4 BSS 0 LX6 X0 SA6 GKIA SAVE NUMBER OF KEYWORDS SX6 LP-TT-BT SA6 GKIB SAVE LINES / PAGE MX6 0 SA6 GKIC INITIALIZE OFFSET FOR > 1 PAGE GKI5 BSS 0 SA1 GKIA SX6 X1-LP*4+TT*4+BT*4 SUBTRACT NO. KEYWORDS / PAGE SA6 A1 PL X6,GKI6 IF AT LEAST A FULL PAGE OF KEYWORDS SX6 X6+LP*4-TT*4-BT*4 ZR X6,GKI9 IF NO KEYWORDS LEFT SA6 A1 SB2 B1+B1 2 AGAIN AX6 B2,X6 /4 SA6 GKIB SET NEW LINES / PAGE GKI6 BSS 0 MX6 0 SX7 B1+B2 3 SA6 GKID SA6 GKIE PUTI RNLA SET PUT FWA SB6 B0 SET *STCOL* - 1 GKI7 BSS 0 SA1 GKIB (X1) = LINES / PAGE (4 KEYWORDS/LINE) SA2 GKIC (X2) = OFFSET SA3 GKID SA4 GKIE SX6 X4+B1 SA6 A4 IX6 X1*X4 COMPUTE INDEX LOCATION IX6 X2+X6 ADD OFFSET IX6 X3+X6 LX6 1 *2 SA5 INDX+X6 READ THE KEYWORD SX0 X5-1R SEE IF DUMMY KEYWORD ZR X0,GKI8 IF EOL LX1 X5 RJ SZC SPACE-FILL ZERO CHARACTERS PUTF X6,,10,B6+3 PUT KEYWORD SA1 A5+B1 PUTD (X1,48,11),5,B6+B1 PUT PAGE NUMBER SA1 GKIE SX0 X1-4 MI X0,GKI7 IF NOT EOL GKI8 BSS 0 PUTZ PUT EOL PRINT RNLA PRINT THE LINE PUTI RNLA SET PUT FWA SB6 B0 SET *STCOL* - 1 SA1 GKID SX6 X1+B1 SA6 A1 MX6 0 SA6 GKIE SA1 GKID SA2 GKIB IX0 X1-X2 MI X0,GKI7 LOOP FOR ENTIRE PAGE SA1 GKIC SX6 X1+LP*4-TT*4-BT*4 SA6 A1 SET NEW OFFSET FOR NEXT PAGE SX0 X2-LP+TT+BT ZR X0,GKI5 IF NOT LAST PAGE GKI9 BSS 0 RJ FOP FILL OUT LAST PAGE EQ GKIX EXIT GKIA BSS 1 GKIB BSS 1 GKIC BSS 1 GKID BSS 1 GKIE BSS 1 INL SPACE 4,8 ** INL - IGNORE NULL LINE. * * ENTER (TUTB) = CODED LINE. * (PTIA) = *PUT* INFORMATION. * * EXIT (X2) = 0 IFF NULL LINE (ONLY SPACES). * * CALLS NONE. * * USES B - 2. * A - 1, 2, 3. * X - 0, 1, 2, 3. INL SUBR SA1 PTIA UX1,B2 X1 AX1 18 ZR B2,INL1 IF NOTHING IN *PUT* OUTPUT WORD SA2 X1 READ CURRENT PACKED OUTPUT WORD MX0 1 SB2 B2-B1 AX0 B2 CREATE VARIABLE MASK SA3 INLA SPACES BX3 X0*X3 BX2 X0*X2 IX2 X2-X3 CHECK LAST WORD FOR ALL SPACES NZ X2,INLX IF NOT NULL LINE INL1 BSS 0 SA3 INLA SPACES SB2 X1-TUTB (B2) = WORD COUNT SA2 TUTB READ FIRST WORD OF PACKED LINE INL2 BSS 0 SB2 B2-B1 MI B2,INL3 IF ENTIRE LINE LOOKED AT BX2 X2-X3 CHECK FOR AN ENTIRE WORD OF SPACES NZ X2,INLX IF NOT NULL LINE SA2 A2+1 READ NEXT WORD EQ INL2 LOOP FOR ALL WORDS INL3 BSS 0 SX2 B0+ IF NULL LINE EQ INLX INLA CON 10H OBL SPACE 4,8 ** OBL - OUTPUT BLANK LINES. * * ENTER (X6) = NUMBER OF LINES. * * EXIT (LC) = UPDATED. * * CALLS *EJT*, *WTC=*. OBL SUBR SA6 OBLA OBL1 BSS 0 SA1 OBLA SX6 X1-1 MI X6,OBLX IF ALL LINES OUTPUT SA6 A1+ PRINT (=C= =) EQ OBL1 LOOP FOR ALL LINES OBLA BSS 1 BLANK LINE COUNTER PIL SPACE 4,8 ** PIL - PROCESS INPUT LINE. * * ENTER (RNLA-RNLA+79D) = STRING CARD IMAGE. * PIL SUBR SA1 RNLA SX0 X1-1R. NZ X0,PIL7 IF NOT A DIRECTIVE SA3 PILA-1 SA1 A1+B1 FETCH NEXT 2 CHARACTERS SA2 A1+B1 LX1 6 BX2 X1+X2 LX2 -6*2 MX0 12 SA5 RNLB (A5) = ADDRESS OF CURRENT POSITION PIL1 BSS 0 SA3 A3+B1 READ NEXT DIRECTIVE ENTRY ZR X3,PIL6 IF END OF TABLE BX1 X0*X3 IX1 X1-X2 COMPARE NZ X1,PIL1 LOOP FOR ALL LEGAL DIRECTIVES SX7 X3 SA7 PILB SAVE PROCESSING ADDRESS * SPAN UNTIL A NON-SPACE OR EOL IS ENCOUNTERED. SX5 X5+3 SET INITIAL CURSOR POSITION SA4 RNLC PIL2 BSS 0 SA1 RNLA+X5 SX0 X1-1R NZ X0,PIL3 IF FIRST NON-SPACE SX5 X5+B1 IX0 X5-X4 MI X0,PIL2 SX5 X5-1 PIL3 BSS 0 BX6 X5 SA6 A5 SAVE UPDATED CURSOR POSITION AX3 18 SX3 X3 * SEE IF SKIPPING CONDITONAL DOCUMENTATION. SX0 B1+B1 BX0 X0*X3 SEE WHEN THIS DIRECTIVE CAN BE PROCESSED NZ X0,PIL4 IF LEGAL WHEN SKIPPING SA1 SK PL X1,PILX IF SKIPPING, DON'T PROCESS DIRECTIVE PIL4 BSS 0 LX3 59-0 SEE IF CALL TO *FPT* NEEDED FIRST MI X3,PIL5 IF NO FLUSH REQUIRED RJ FPT FLUSH PARAGRAPH TEXT PIL5 BSS 0 SA1 PILB SB7 X1+ SA5 RNLB (X5) = CURRENT POSITION SA4 RNLC (X4) = LAST COLUMN SA1 X5+RNLA (X1) = FIRST CHARACTER JP B7 PROCESS DIRECTIVE PIL6 BSS 0 PRINTS RNLA-1 PRINT (=C= PRECEDING DIRECTIVE LINE ILLEGAL.=) EQ PILX PIL7 BSS 0 SA1 SK SEE IF SKIPPING CONDITIONAL DOCUMENTATION PL X1,PILX IF SKIPPING RJ EAS ENTER ACTIVE SEQUENCE * NZ X1,PILX IF SEQUENCE ACTIVE RJ TUT TIDY UP TEXT EQ PILX PILA BSS 0 VFD 12/2HA ,30/0,18/APX APPENDIX VFD 12/2HC ,30/0,18/CPY COPY VFD 12/2HD ,30/1,18/DEF DEFINE VFD 12/2HEF,30/3,18/EIF ENDIF VFD 12/2HEJ,30/0,18/ETJ EJECT VFD 12/2HEL,30/3,18/ELS ELSE VFD 12/2HE ,30/1,18/END END VFD 12/2HH ,30/0,18/HDR HEADER VFD 12/2HIF,30/3,18/IFF IF VFD 12/2HL ,30/0,18/LST LIST VFD 12/2HLE,30/1,18/LSE LIST ELEMENT VFD 12/2HLX,30/1,18/LSX LIST END VFD 12/2HSH,30/0,18/SHD SPECIAL HEADER VFD 12/2HT ,30/0,18/TTL TITLE VFD 12/2H/ ,30/1,18/PILX COMMENTS CON 0 END OF TABLE PILB BSS 1 PRT SPACE 4,8 ** PRT - OUTPUT ONE LINE. * * ENTER (X6) = FWA OF CODED LINE. * * EXIT (LC) = UPDATED. * * CALLS *EJT*, *WTC=*. PRT SUBR SA6 PRTA SA1 LC ZR X1,PRT1 IF NOTHING ON PAGE SX0 X1-LP MI X0,PRT2 IF ROOM PRT1 BSS 0 RJ EJT PRT2 BSS 0 SA1 LC SX6 X1+B1 SA6 A1 ADVANCE LINE COUNT SA1 =10H BX6 X1 WRITEO O OUTPUT *LEFT* SA1 PRTA WRITEC O,X1 SA1 KW ZR X1,PRTX NO KEYWORD, DO NOT WRITE HELP FILE SA1 PRTA WRITE LINE TO HELP FILE SA2 H ZR X2,PRTX IF FET ZERO (*PRS*) WRITEC A2,X1 EQ PRTX PRTA BSS 1 PST SPACE 4,8 ** PST - PRINT STRING BUFFER. * * ENTER (X6) = FWA OF STRING BUFFER. * (X7) = NUMBER OF STRING CHARACTERS. * * EXIT (LC) = UPDATED. * * CALLS *EJT*, *WTS=*. PST SUBR SA6 PSTA SA7 PSTB SA1 LC ZR X1,PST1 IF NOTHING ON PAGE SX0 X1-LP MI X0,PST2 IF ROOM PST1 BSS 0 RJ EJT PST2 BSS 0 SA1 LC SX6 X1+B1 COUNT LINE SA6 A1 SA1 =10H BX6 X1 WRITEO O OUTPUT *LEFT* SA1 PSTA SA2 PSTB WRITES O,X1,X2 SA1 KW ZR X1,PSTX NO KEYWORD, DO NOT WRITE HELP FILE SA1 H ZR X1,PSTX SA1 PSTA SA2 PSTB WRITES H,X1,X2 WRITE TO *HELP* FILE EQ PSTX PSTA BSS 1 PSTB BSS 1 RNL SPACE 4,8 ** RNL - READ NEXT LINE. * * EXIT (RNLA) = STRING (R1) CARD IMAGE. * (RNLB) = FIRST COLUMN. * (RNLC) = LAST COLUMN. * * CALLS *RDS=*. RNL SUBR READS I,RNLA,INLL SX6 B6-RNLA SA6 RNLC SET NUMBER OF INPUT CHARACTERS SX6 B0+ SET INITIAL CURSOR POSITION SA6 RNLB SET CURRENT COLUMN * REMOVE TRAILING SPACES. SA2 RNLC RNL1 BSS 0 SX2 X2-1 MI X2,RNL2 IF BLANK LINE SA3 RNLA+X2 SX0 X3-1R ZR X0,RNL1 IGNORE SPACES NZ X3,RNL3 IF NOT TRAILING COLON SX2 X2+B1 EQ RNL3 RNL2 BSS 0 BX2 X2-X2 RNL3 BSS 0 SX7 X2+B1 SA7 A2 UPDATE LAST COLUMN EQ RNLX DUP LM CON 1R ENDD CON 1R CARRIAGE CONTROL RNLA BSS INLL WORKING STORAGE CON 1R RNLB BSS 1 CURRENT COLUMN RNLC BSS 1 LAST COLUMN SKW SPACE 4,10 ** SKW - SORT KEYWORDS. * * SORT ON FIRST WORD OF N-WORD ENTRY. MODIFIED FROM ROUTINE * *SID* BY CVC OF NADC IN *CATLIST*. APPEARS TO BE AN * EXCHANGE SORT, OF SORTS. * * ENTER (B2) = SORT FWA. * (B3) = SORT LWA. * (B4) = ENTRY LENGTH. * * EXIT TABLE SORTED IN PLACE. * * CALLS NONE. * * USES B - 2, 5, 6, 7. * A - 1, 2, 3, 6, 7. * X - 1, 2, 3, 6, 7. SKW SUBR SKW1 BSS 0 GE B2,B3,SKWX IF DONE SA2 B2 SB5 B2+B4 SB6 B0 CLEAR SWAP FLAG SB2 B2+B4 MI X2,SKW1 IGNORE THIS ENTRY SKW2 BSS 0 GE B5,B3,SKW3 SA3 B5 SB5 B5+B4 MI X3,SKW2 IX6 X3-X2 PL X6,SKW2 IF IN ORDER SB6 B5-B4 BX2 X3 EQ SKW2 SKW3 BSS 0 ZR B6,SKW1 IF NO SWAP NEEDED SB7 B4 SA1 B2-B4 SKW4 BSS 0 ZR B7,SKW1 IF SWAP COMPLETE SA2 B6 BX6 X1 LX7 X2 SB6 B6+B1 SA6 A2 SA7 A1 SB7 B7-B1 SA1 A1+B1 EQ SKW4 TUT SPACE 4,8 ** TUT - TIDY UP TEXT. * * ENTER LINE SET UP BY *RNL*. * (TUTA) = 1 IF NO PARAGRAPH IN PROGRESS. * (TUTB) = PACKED *PUT* LINE (IFF (TUTA) = 0). * (TUTC) = CHARACTER LENGTH OF LINE (IFF (TUTA) = 0). * * EXIT AT EOL, OR IF BLANK CARD (END OF PARAGRAPH). * PARAGRAPH IS FLUSHED IF EOP. POINTERS SAVED IF EOL. * * CALLS *EOP*, *FPT*, *OBL*, *PUT*, *COW*, *AOL*. TUT SUBR RJ EOP CHECK FOR END OF PARAGRAPH NZ B7,TUT1 IF NOT END OF PARAGRAPH RJ FPT FLUSH PARAGRAPH TEXT SX6 B1 SA6 TUTA CLEAR PARAGRAPH IN PROGRESS EQ TUTX TUT1 BSS 0 SA5 TUTC (X5) = GARBAGE OR CHAR COUNT IN LINE SA1 TUTA ZR X1,TUT2 IF PARAGRAPH IN PROGRESS MX6 0 SA6 A1 SET PARAGRAPH IN PROGRESS OBL PS PUTI TUTB SET *PUT* FWA PUTB 1+LM+5 SX5 LM+5 (X5) = CHARACTER COUNT IN LINE SX7 X5+2 SA7 TUTD SET 1ST COLUMN TUT2 BSS 0 RJ COW COLLECT ONE WORD ZR X2,TUT5 IF NO MORE WORDS ON LINE IX7 X3+X5 COUNT LENGTH OF WORD AND PUNCTUATION SX0 X7-OTLL-1 MI X0,TUT4 IF WORD FITS IN LINE RJ AOL ADJUST AND OUTPUT LINE PUTI TUTB START A NEW LINE PUTB 1+LM SX5 LM SET CHARACTER COUNT IN LINE SX7 X5+2 SA7 TUTD SET 1ST COLUMN SA1 EASA SEE IF CALLED BY THE LIST PROCESSOR SX0 X1-LST2 NZ X0,TUT3 IF NOT LIST PUTB 6+3 SX5 X5+6+3 ADJUST COUNT SX7 X5+2 SA7 TUTD SET 1ST COLUMN TUT3 BSS 0 SA1 COWA GET WORD SA2 COWB GET NUMBER OF CHARACTERS TUT4 BSS 0 SA3 COWD SAVE (COWD) FOR *AOL* BX7 X3 IX5 X2+X5 COUNT WORD SA7 TUTE PUTF X1,1,X2 PUT NEW WORD EQ TUT2 TUT5 BSS 0 BX7 X5 SA7 TUTC SAVE LINE LENGTH EQ TUTX TUTA CON 1 START A NEW PARAGRAPH TUTB BSS 2*INLL/10 TUTC BSS 1 CHARACTER LENGTH OF LINE TUTD BSS 1 1ST COLUMN TO USE WHEN ADJUSTING LINE TUTE BSS 1 (COWD) FOR PREVIOUS WORD .1 IFNOSBE UMK SPACE 4,20 ** UMK - UPDATE MULTIPLE KEYWORDS. * * THIS ROUTINE IS ONLY NEEDED AT NOS/BE SITES DUE TO * LIMITATIONS IN RANDOM FILE PROCESSING. * * NOS UPDATES THE RANDOM SECTOR ADDRESS (OR THE CURRENT * RANDOM INDEX) IN THE *H* FET AFTER EVERY OPERATION, * AND HENCE THE RSA IS ALWAYS AVAILABLE. THUS WHEN *HDR* * CONSTRUCTS A KEYWORD INDEX ENTRY THE RSA IS INSERTED * AT THAT TIME. * * NOS/BE PROVIDES AN RSA FOR AN INDEX ENTRY ONLY AFTER * THE FIRST WRITE AFTER AN EOR (OR SOMETHING LIKE THAT), * AND ONLY RETURNS SAID RSA TO A SINGLE LOCATION IN CM. * THUS *HDR* USES AN RSA OF ZERO WHEN MAKING KEYWORD * INDEX ENTRIES. IN THE CASE WHERE A SECTION (HEADER, * SPECIAL HEADER, OR APPENDIX) HAS MORE THAN A SINGLE * KEYWORD, THEREFORE, ONLY THE FIRST INDEX ENTRY FOR THAT * SECTION ENDS UP WITH A NON-ZERO RSA. * * *UMK* SERVES TO UPDATE ALL INDEX ENTRIES WITH A ZR RSA. * * CALLS NONE. * * USES B - NONE. * A - 1, 3, 4, 6. * X - 0, 1, 2, 3, 4, 6. UMK SUBR SA1 IP (X1) = LAST ORDINAL + 2 ZR X1,UMKX IF NO KEYWORDS MX0 -30 MASK FOR RSA BX2 X2-X2 (X2) = FIRST ORDINAL SA3 X2+INDX+1 BX3 -X0*X3 (X3) = RSA OF FIRST INDEX ENTRY ZR X3,UMKX IF KEYWORDS AND NO TEXT UMK1 BSS 0 SX2 X2+2 ADVANCE TO NEXT INDEX ENTRY IX6 X2-X1 PL X6,UMKX IF END OF INDEX SA4 X2+INDX+1 CHECK NEXT ENTRY FOR ZR RSA BX6 -X0*X4 NZ X6,UMK2 TRY AGAIN BX6 X3+X4 INSERT RSA FROM FIRST KEYWORD SA6 A4 EQ UMK1 LOOP FOR ALL KEYWORDS IN SECTION UMK2 BSS 0 LX3 X6 SET CURRENT RSA EQ UMK1 LOOP FOR ENTIRE INDEX .1 ENDIF DIREC TITLE DIRECTIVE PROCESSORS. APX SPACE 4,10 ** APX - APPENDIX. * APX BSS 0 PUTI HDRB SET PUT FWA PUTB 1 PUT CARRIAGE CONTROL PUTT (APPENDIX-),B6 SA1 APXA SA1 X1+TROM READ ROMAN NUMERAL PUTF X1,,Z,B6 SA1 APXA SX6 X1+B1 SA6 A1 SA4 RNLC (X4) = LAST COLUMN IX2 X4-X5 COMPUTE NUMBER OF CHARACTERS PUTS RNLA+X5,X2,17 PUTZ MOVE 8,HDRB,SL SET NEW SUBTITLE LINE RJ EJT EJECT SX6 MXHL SET LEVEL NUMBER - 1 SA6 HDRC FLAG APPENDIX MX0 0 CLEAR FLAG EQ HDR13 PROCESS LIKE HEADER FROM HERE APXA CON 0 APPENDIX NUMBER CPY SPACE 4,10 ** CPY - COPY. * CPY BSS 0 SX7 CPY1 SA7 EASA SET ACTIVE SEQUENCE EQ PILX CPY1 BSS 0 SA5 RNLC PRINTS (RNLA-1-LM),(X5+1+1+LM) OUTPUT LINE EQ PILX DEF SPACE 4,8 ** DEF - DEFINE. * DEF BSS 0 SX5 A1 (X5) = ADDRESS OF SYMBOL SA1 DEFA SX6 X1+B1 SX0 X1-TDEFL PL X0,DEF1 IF TOO MANY SYMBOLS SA6 A1 SA2 PTIA SAVE (PTIA) BX6 X2 SA6 DEFB PUTI X1+TDEF SET *PUT* FWA PUTS X5,10 PLACE SYMBOL IN (TDEF) SA1 DEFB RESTORE (PTIA) BX6 X1 SA6 PTIA EQ PILX DEF1 BSS 0 PRINT (=C= DEFINITION IGNORED, TOO MANY.=) EQ PILX DEFA CON 1 ONE PRE-DEFINED SYMBOL DEFB BSS 1 (PTIA) TDEF BSS 0 TABLE OF DEFINED SYMBOLS IFNOS DATA 3HNOS SET *NOS* DOCUMENTATION ELSE DATA 6HNOS/BE SET *NOS/BE* DOCUMENTATION ENDIF BSSZ 5 FOR USER DEFINED SYMBOLS TDEFL EQU *-TDEF CON 0 EOT EIF SPACE 4,8 ** EIF - ENDIF. * EIF BSS 0 MX6 60 SA6 SK CLEAR SKIP FLAG EQ PILX ELS SPACE 4,8 ** ELS - ELSE. * ELS BSS 0 SA1 SK BX6 -X1 TOGGLE SKIP FLAG SA6 A1 EQ PILX END SPACE 4,8 ** END - END. * END BSS 0 BX7 X7-X7 SA7 EASA CLEAR ACTIVE SEQUENCE EQ PILX ETJ SPACE 4,8 ** ETJ - EJECT. * ETJ BSS 0 RJ EJT ADVANCE TO TOP OF FORM EQ PILX HDR SPACE 4,8 ** HDR - HEADER. * HDR BSS 0 SB7 X1-1R0 (B7) = LEVEL NUMBER LE B7,B0,HDR15 IF LEVEL NUMBER TOO SMALL SX0 B7-MXHL-1 PL X0,HDR15 IF LEVEL NUMBER TOO LARGE SX7 B7-1 (X7) = LEVEL NUMBER MINUS ONE SA7 HDRC SAVE LEVEL NUMBER - ONE EQ B7,B1,HDR1 IF FOLLOWING CHECK NOT NEEDED SA1 B7+HDRA-1-1 ZR X1,HDR15 IF SKIPPING A LEVEL HDR1 BSS 0 SA1 B7+HDRA-1 SX6 X1+B1 SA6 A1 INCREMENT LEVEL NUMBER BX6 X6-X6 SB6 MXHL MAXIMUM NUMBER OF LEVELS HDR2 BSS 0 EQ B6,B7,HDR3 IF ALL HIGHER LEVELS RESET SA6 A6+B1 ZERO HIGHER LEVEL NUMBER SB7 B7+B1 EQ HDR2 HDR3 BSS 0 SX6 X5+B1 SA6 RNLB SAVE CURRENT POSITION BX5 X5-X5 PUTI HDRB INITIALIZE *PUT* FWA SA1 HDRD+X7 PUTB X1 PUT LEADING SPACES SA1 HDRA EQ HDR5 HDR4 BSS 0 SA1 HDRA+X5 READ NEXT LEVEL NUMBER ZR X1,HDR6 IF ALL LEVEL NUMBERS CONVERTED PUTT (.),B6 PUT SEPARATOR SA1 HDRA+X5 RE-READ LEVEL NUMBER HDR5 BSS 0 PUTD X1,,,B6 CONVERT AND PUT LEVEL NUMBER SX5 X5+B1 SX0 X5-MXHL MI X0,HDR4 IF MORE LEVEL NUMBERS TO GO HDR6 BSS 0 SX5 X5-1 NZ X5,HDR7 IF NOT LEVEL ONE PUTT (.),B6 SPECIAL CASE LEVEL ONE HDR7 BSS 0 PUTT ( ),(1+LM+1-2) PUT AT LEAST 2 SPACES SA4 RNLC SA5 RNLB FETCH CURRENT POSITION HDR8 BSS 0 SA1 RNLA+X5 SX0 X1-1R NZ X0,HDR9 IF 1ST CHARACTER OF HEADER TEXT SX5 X5+B1 IX0 X5-X4 MI X0,HDR8 SPAN SPACES EQ HDR10 HDR9 BSS 0 IX2 X4-X5 (X2) = NUMBER OF CHARACTERS SX7 A1 SAVE STRING FWA FOR LEVEL 1 LX5 X2 SAVE NUMBER OF CHARACTERS PUTS A1,X2,B6 HDR10 BSS 0 PUTZ PUT ZERO BYTE END-OF-LINE SA1 HDRC NZ X1,HDR11 IF NOT LEVEL ONE PUTI SL SET PUT FWA PUTS X7,X5,+1 PUT A SPACE + TEXT PUTZ PUT EOL RJ EJT START LEVEL 1 HEADER ON NEW PAGE HDR11 BSS 0 SA1 LC SX0 X1+HS+1+PS+3 SX0 X0-LP MI X0,HDR12 IF ROOM RJ EJT HDR12 BSS 0 SA1 LC SX0 X1-TT-BT ZR X0,HDR13 IF EJECT JUST PERFORMED OBL HS SX0 B1 SET (X0) NZ HDR13 BSS 0 SA1 KW ZR X1,HDR13.2 IF NO KEYWORD FOR LAST SECTION NZ X0,HDR13.1 IF BLANK LINES ON *HELP* ALREADY .1 DUP HS WRITEC H,(=C= =) .1 ENDD HDR13.1 BSS 0 WRITER H,R BEGIN NEW RECORD ON *HELP* HDR13.2 BSS 0 RJ EHB EMPTY HELP BUFFER .1 IFNOSBE SA1 IP (X1) = INDEX POINTER SX6 X1+INDX+1 SET ADDRESS FOR RETURN OF RSA SA6 H+6 .1 ENDIF SX6 77777B SA6 KW ALLOW OUTPUT ON HELP FILE PRINT HDRB OBL PS SA1 TC ZR X1,HDR14 IF NO TABLE OF CONTENTS SA1 HDRC BX6 X1 WRITEO C WRITE LEVEL NUMBER - 1 SA1 PC BX6 X1 WRITEO C WRITE PAGE NUMBER WRITEC C,HDRB WRITE HEADER LINE HDR14 BSS 0 MX7 0 STOP HELP OUTPUT UNLESS THERE IS A KEYWORD SX6 B1 SA7 KW SA6 TUTA CLEAR PARAGRAPH IN PROGRESS SX6 HDR16 SA6 EASA SET ACTIVE SEQUENCE SA1 SHDA ZR X1,PILX IF NOT SPECIAL HEADER SX7 B0 ELSE FAKE EOL... SX5 B1 ...AND ENTER SPECIAL KEYWORD EQ HDR18 HDR15 BSS 0 PRINTS RNLA-1 PRINT (=C= BAD LEVEL NO. OR ATTEMPT TO SKIP A LEVEL.=) SX6 PILX SET ACTIVE SEQUENCE ADDRESS... SA6 EASA ...TO IGNORE KEYWORDS (IF ANY) EQ PILX HDR16 BSS 0 * COLLECT KEYWORDS, AND STORE THEM PLUS THE CRI FROM H+6 * IN *INDX*. THE KEYWORD IS LEFT-JUSTIFIED IN THE FIRST * WORD OF EACH ENTRY, THE CRI IS RIGHT-JUSTIFIED * IN THE SECOND. SA5 RNLB (X5) = CURRENT COLUMN SA4 RNLC BX7 X4 (X7) = LAST COLUMN + 1 SB7 6 HDR17 BSS 0 SX7 X7-1 MI X7,PILX IGNORE BLANK LINE SA1 RNLA+X7 SX0 X1-1R ZR X0,HDR17 IGNORE TRAILING SPACES SX7 X7+B1 HDR18 BSS 0 SA1 IP SX0 X1+1-INDXL PL X0,PILX RETURN IF INDEX FULL SA1 SHDA ZR X1,HDR19 IF NOT SPECIAL HEADER BX6 X6-X6 SA6 A1 CLEAR FLAG BX6 X1 MX0 1 SET FLAG BIT FOR SPECIAL KEYWORD EQ HDR22 ENTER SPECIAL KEYWORD HDR19 BSS 0 MX6 0 CLEAR KEYWORD REGISTER SB5 9*6 SET SHIFT COUNT HDR20 BSS 0 SA1 RNLA+X5 READ AN R1 CHARACTER SX5 X5+B1 SX0 X1-1R, ZR X0,HDR22 IF END OF KEYWORD MI B5,HDR21 IF ALREADY 10 CHARS, IGNORE THIS ONE LX1 B5 BX6 X1+X6 ADD NEW CHARACTER TO KEYWORD SB5 B5-B7 HDR21 BSS 0 IX0 X5-X7 MI X0,HDR20 IF NOT EOL MX0 0 CLEAR FLAG BIT HDR22 BSS 0 ZR X6,HDR26 IF NO KEYWORD SA2 IP (X2) = INDEX POINTER SA6 X2+INDX STORE KEYWORD IN INDEX SA1 H+6 IFNOSBE 1 MX1 0 RSA SET WHEN WRITE ISSUED... LX4 X6 SAVE KEYWORD IFNOS 1 AX1 30 (X1) = CRI SX6 X2+2 SA3 PC GET PAGE NUMBER SA6 A2 ADVANCE INDEX POINTER LX3 48-0 POSITION TO HIGH 12 BITS BX6 X1+X3 VFD 1/F,11/PC,18/0,30/RSA BX6 X0+X6 INSERT FLAG BIT (1 IFF SPECIAL KEYWORD) SA6 X2+1+INDX STORE CRI IN INDEX SA3 KW SX6 X3+B1 COUNT THE KEYWORD SA6 A3 * PROCESS POSSIBLE DUPLICATE KEYWORD. IF SO, LINK * THE NEW INDEX ENTRY TO THE END OF THE LINKED LIST. SX3 B0 HDR23 BSS 0 IX0 X3-X2 COMPARE CURRENT INDEX WITH LAST PL X0,HDR26 IF NOT DUPLICATE KEYWORD SA1 X3+INDX SX3 X3+2 BX0 X1-X4 COMPARE NZ X0,HDR23 LOOP FOR ALL ENTRIES SA1 A1+B1 READ LINK WORD + CRI HDR24 BSS 0 LX1 -30 POSITION LINK ORDINAL SX0 X1 (X0) = 0 OR NEXT LINK ORDINAL ZR X0,HDR25 IF AT END OF LIST SA1 X0+1+INDX READ NEXT LINK WORD EQ HDR24 LOOP TO END OF LIST HDR25 BSS 0 BX6 X1+X2 LINK DUPLICATE KEYWORD ENTRIES LX6 30 SA6 A1 VFD 1/F,11/PC,18/LINK ORDINAL,30/RSA HDR26 BSS 0 IX0 X5-X7 MI X0,HDR18 IF NOT EOL EQ PILX RETURN FROM ACTIVE SEQUENCE HDRA BSSZ MXHL+1 HEADER LEVEL NUMBER TABLE HDRB BSS 2*INLL/10 WSA FOR HEADER LINE HDRC CON 1 ZR IFF PROCESSING A HEADER LEVEL 1 HDRD BSS 0 CON 1 LEVEL 1 CON 1 LEVEL 2 CON 1 LEVEL 3 CON 1 LEVEL 4 CON 1 LEVEL 5 IFF SPACE 4,8 ** IFF - IF. * IFF BSS 0 SA2 PTIA SX5 A1 (X5) = ADDRESS OF SYMBOL BX6 X2 SA6 IFFB SAVE (PTIA) PUTI IFFA SET *PUT* FWA PUTS X5,10 COLLECT SYMBOL SA1 IFFA SA2 TDEF-1 SEE IF *DEFINE*D IFF1 BSS 0 SA2 A2+B1 ZR X2,IFF2 IF SYMBOL NOT DEFINED BX0 X1-X2 COMPARE NZ X0,IFF1 LOOP FOR ALL SYMBOLS BX2 -X2-X2 SET SYMBOL DEFINED (-0) IFF2 BSS 0 SA1 IFFB BX6 X1 LX7 X2 SA6 PTIA RESTORE (PTIA) SA7 SK SET CONDITIONAL SKIP STATUS EQ PILX IFFA BSS 1 HOLD CONDITIONAL SYMBOL IFFB BSS 1 (PTIA) LSE SPACE 4,8 ** LSE - LIST ELEMENT. * LSE BSS 0 SA3 EASA SX0 X3-LST2 NZ X0,LSE3 IF LIST NOT ACTIVE IX0 X4-X5 ZR X0,LSE2 IF BLANK LIST ELEMENT SX0 X1-1R@ CHECK 1ST CHARACTER FOR FIXED SPACE NZ X0,LSE1 IF NOT FIXED SPACE SX6 1R SA6 A1 CHANGE TO A REAL SPACE LSE1 BSS 0 IX2 X4-X5 PUTS A1,X2 PUT LIST ELEMENT LSE2 BSS 0 PUTB 1 PRESERVE TRAILING COLONS PUTZ PUT EOL PRINT TUTB PRINT IT PUTI TUTB SET *PUT* FWA PUTB 1+LM+6+3 SX6 LM+6+3 SA6 TUTC SET COUNT SX6 X6+2 SA6 TUTD SET 1ST COLUMN EQ PILX LSE3 BSS 0 PRINTS RNLA-1 PRINT (=C= LIST NOT ACTIVE.=) EQ PILX LST SPACE 4,8 ** LST - LIST. * LST BSS 0 OBL 1 SX6 LST2 SA6 EASA SET ACTIVE SEQUENCE SA1 TUTA MX7 0 BX6 X1 SA7 LSTA INITIALIZE LIST ITEM COUNTER SA6 LSXA SAVE (TUTA) LST1 BSS 0 BX6 X6-X6 SA6 TUTA SET PARAGRAPH IN PROGRESS PUTI TUTB SET *PUT* FWA PUTB 1+LM SA1 LSTA SX6 X1+B1 COUNT LIST ITEM SA6 A1 PUTD X6,6,RIGHT SA1 =3L) PUTF X1,1,3 SX6 LM+6+3 SA6 TUTC SET CHARACTER COUNT OF LINE SX6 X6+2 SA6 TUTD SET 1ST COLUMN EQ PILX WAIT FOR MORE INPUT LST2 BSS 0 ACTIVE SEQUENCE RJ TUT TIDY UP TEXT SA1 TUTA ZR X1,PILX IF PARAGRAPH IN PROGRESS OBL PS EQ LST1 INITIALIZE FOR NEXT LIST ITEM IF EOP LSTA BSS 1 LIST ITEM COUNTER LSX SPACE 4,8 ** LSX - LIST END. * LSX BSS 0 SA1 EASA SX0 X1-LST2 NZ X0,LSE3 IF LIST NOT ACTIVE RJ FPT FLUSH PARAGRAPH TEXT OBL 1 SA1 LSXA BX6 X1 SA6 TUTA RESTORE PARAGRAPH STATUS FLAG NZ X1,END IF NO PREVIOUS PARAGRAPH IN PROGRESS PUTI TUTB PUTB 1+LM SET UP NEW LINE SX6 LM SA6 TUTC SX6 X6+2 SA6 TUTD SET 1ST COLUMN EQ END LSXA BSS 1 (TUTA) BEFORE LIST INVOKED SHD SPACE 4,10 ** SHD - SPECIAL HEADER. * SHD BSS 0 SB7 X1 SAVE (X1) SA1 SH SX6 X1+B1 INCREMENT SPECIAL HEADER NUMBER SA6 A1 RJ CDD CONVERT SB2 B2-B1 MX0 1 AX0 B2 BX6 X0*X4 L-FORMAT SA6 SHDA SET FLAG FOR *HDR* SX1 B7 RESTORE (X1) EQ HDR PROCESS LIKE A HEADER SHDA CON 0 TTL SPACE 4,8 ** TTL - TITLE. * TTL BSS 0 IX7 X4-X5 (X7) = LENGTH OF TITLE SX5 A1 (X5) = ADDRESS OF TITLE PUTI TTLA SET *PUT* FWA PUTB 1 PUT CARRIAGE CONTROL ZR X7,TTL1 IF CLEARING TITLE PUTS X5,X7 PUT THE TITLE PUTB ,63 SPACE OUT UNTIL COLUMN 63 PUTI TTLA,63 SET *PUT* FWA AND COLUMN PUTF TTLB,1,9,+1 PUT DATE, LESS PERIOD TTL1 BSS 0 PUTZ MOVE 8,TTLA,TL EQ PILX TTLA BSS 2*INLL/10 TTLB BSS 1 COMC SPACE 4,8 ** COMMON DECKS. XTEXT COMCCFD XTEXT COMCCIO XTEXT COMCSYS XTEXT COMCRDC XTEXT COMCRDO XTEXT COMCRDS XTEXT COMCRDW XTEXT COMCWTC XTEXT COMCWTO XTEXT COMCWTS XTEXT COMCWTW XTEXT COMCCDD XTEXT COMCMVE *CALL COMCSZC *CALL COMCPTI *CALL COMCPTB *CALL COMCPTN *CALL COMCPTS *CALL COMCPTZ PRS TITLE PRESET CODE AND BUFFER ASSIGNMENTS. IDENT FLUSH LITERALS ** PRS - PRESET *SENDOC*. PRS SUBR IFNOSBE 1 RJ SES SET EQUAL SIGNS FOR *ARG* SUBROUTINE DATE TTLB GET CURRENT DATE FOR TITLE LINE TIME TM GET INITIAL TIME SA1 ACTR SB4 X1 SA4 B1+B1 SB5 PRSA RJ ARG PROCESS ARGUMENTS ZR X1,PRS1 IF NO ERRORS MESSAGE (=C= ERROR IN *SENDOC* ARGUMENTS.=) ENDRUN PRS1 BSS 0 MEMORY CM,PRSB,R IFNOSBE 1 RETURN H,R KEEP RANDOM BIT IN FET AFTER OPEN OPEN H,WRITE,R OPEN I,READ,R OPEN O,WRITE,R WRITEC O,(=C=Q=) WRITEC O,(=C=1=) IFNOSBE 1 WRITEC O,(=C=1=) * OUTPUT COVER SHEET. IFNOS OBL 20 ELSE OBL 18 ENDIF PRINT (=C= S E N A T O R=) PRINT (=C= TEXT EDITOR=) OBL 1 PRINT (=C= VERSION "VER"=) OBL 22 PRINT (=C= WRITTE ,N BY: B. CHESWICK=) PRINT (=C= , S. O. LIDIE=) OBL 1 PRINT (=C= , SUMMER, 1976=) OBL 14 MX6 0 SA6 LC INITIALIZE LINE COUNT (EMPTY PAGE) READ I RJ TOC TABLE OF CONTENTS EQ PRSX TOC SPACE 4,8 ** TOC - TABLE OF CONTENTS. * * ENTER (TC) = 1 IFF TABLE OF CONTENTS. * * EXIT (O) = SET UP WITH SCRATCH FILE NAME. * (OO) = ORIGINAL FILE NAME. * (C) = OPENED FOR WRITE. TOC SUBR SA1 TC ZR X1,TOCX IF NO TABLE OF CONTENTS WRITER O,R FLUSH WHAT WE HAVE SA1 OO+1 READ SCRATCH FILE NAME BX6 X1 SA2 O BX7 X2 SA6 A2 SET NEW FILE NAME SA7 OO SAVE ORIGINAL OPEN C,WRITE,R OPEN O,WRITE,R EQ TOCX **** PRSA - *SENDOC* ARGUMENT TABLE. PRSA BSS 0 VFD 12/0LH,18/AH,12/0,18/HELP VFD 12/0LI,18/AI,12/0,18/INPUT VFD 12/0LL,18/AO,12/0,18/OUTPUT VFD 12/0LNA,18/-AA,12/0,18/AF VFD 12/0LNT,18/-AT,12/0,18/TC CON 0 END OF ARGUMENTS AH VFD 42/0LHELP,18/1 ASSUMED *HELP* FILE NAME AI VFD 42/0LCOMPILE,18/1 ASSUMED *INPUT* FILE NAME AO VFD 42/0LOUTPUT,18/1 ASSUMED *OUTPUT* FILE NAME AA CON 0 SET NO ADJUST IF *NA* GIVEN AT CON 0 SET NO TABLE OF CONTENTS IF *NT* GIVEN **** PRSB VFD 30/RFL=,30/0 COMC SPACE 4,8 ** COMMON DECKS USED DURING PRESET. XTEXT COMCARG CTEXT COMCSES - SET EQUAL SIGNS IN PARAMETER LIST. IF -DEF,QUAL$,1 QUAL COMCSES BASE D SES SPACE 4 *** SES - SET EQUAL SIGNS IN PARAMETER LIST. * R.S. HORECK 71/05/04. SPACE 4 *** SES INSERTS EQUAL SIGNS IN THE CONTROL CARD ARGUMENTS * FROM *ARGR* THROUGH THE END OF THE LIST BASED ON THE CONTROL * CARD IMAGE FOUND AT *CCDR*. * * ENTRY (B1) = 1. * (ACTR) = ARGUMENT COUNT. * (ARGR - ARGR+(ACTR)) = ARGUMENT LIST. * (CCDR) = CONTROL CARD IMAGE IN *C* FORMAT. * * EXIT EACH EQUIVALENCED PARAMETER CONTAINS THE *=* IN THE LOW * 6 BITS OF THE ITEM TO THE LEFT OF THE EQUAL SIGN. * * USES X - 1, 2, 3, 4, 6, 7. * B - 3, 4, 5, 6, 7. * A - 1, 2, 3, 6. * * CALLS NONE. SES1 LX1 6 CHECK CHARACTER BX6 -X2*X1 SB7 B7-B1 DECREMENT CHARACTER COUNT SB6 X6 NZ B7,SES2 IF NOT END OF WORD SA1 A1+B1 READ NEXT WORD SB7 X7 RESET CHARACTER COUNT SES2 LE B6,B4,SES1 IF CHARACTER IS ALPHANUMERIC SX3 B6-1R* CHECK FOR * ZR X3,SES1 SA3 A3+B1 ADVANCE PARAMETER SB3 B3-B1 DECREMENT ARGUMENT COUNT BX6 X2*X3 CLEAR LOW ORDER BITS NE B6,B5,SES3 IF SEPARATOR NOT *=* BX6 X6+X4 SET *=* SES3 SA6 A3+ GT B3,SES1 LOOP TO END OF ARGUMENTS SES PS 0 ENTRY/EXIT SA4 ACTR ARGUMENT COUNT SB3 X4 MX2 60-6 SA1 CCDR STATEMENT BUFFER BX6 X2*X4 CHECK FOR NULL PROGRAM NAME SX7 10 ZR X6,SES IF NULL PROGRAM NAME SB4 1R9 SX4 1R= SB7 X7 SET CHARACTER COUNT BX6 X6-X6 CLEAR LAST WORD OF LIST FOR *ARG* SB5 1R= SA6 B3+ARGR SA3 A6-B1 LAST PARAMETER MX6 42 BX6 X6*X3 CLEAR LOWER 18 BITS SA6 A3 SA3 B0 INITIALIZE PARAMETER ADDRESS EQ SES1 PROCESS LIST SPACE 4 QUAL$ IF -DEF,QUAL$ QUAL SES EQU /COMCSES/SES QUAL$ ENDIF ENDX BUF SPACE 4,8 ** I/O BUFFER DEFINITIONS. INDX EQU PRS *INDEX* BUFFER OBUF EQU INDX+INDXL *OUTPUT* BUFFER IBUF EQU OBUF+OBUFL *INPUT* BUFFER HBUF EQU IBUF+IBUFL *HELP* BUFFER CBUF EQU HBUF+HBUFL *CONTENT* BUFFER RFL= EQU CBUF+CBUFL TOTAL EXECUTION FIELD LENGTH END SENDOC *DECK DOCSEN ./ ./ HERE IS A SUMMARY OF *SENDOC* DIRECTIVES: ./ ./ .A - APPENDIX ./ .C - COPY ./ .D - DEFINE ./ .EF - ENDIF ./ .EJ - EJECT ./ .EL - ELSE ./ .E - END ./ .H - HEADER ./ .IF - IF ./ .L - LIST ./ .LE - LIST ELEMENT ./ .LX - LIST END ./ .SH - SPECIAL HEADER ./ .T - TITLE ./ ./ - COMMENTS ./ .IF NOS .T SENATOR VER. 2.7 DOCUMENTATION. (NOS) .EF .IF NOS/BE .T SENATOR VER. 2.7 DOCUMENTATION. (NOS/BE) .EF .H 1 INTRODUCTION TO SENATOR. .E THIS GUIDE DESCRIBES IN DETAIL THE VARIOUS FEATURES OF SENATOR, A FAST LOW-CORE TEXT EDITOR, DESIGNED TO RUN ON CDC 6000 AND CYBER SERIES COMPUTERS. SENATOR MAY BE ASSEMBLED TO OPERATE UNDER THE CONTROL OF THE "NOS" OR "NOS/BE" SYSTEMS. A GENERAL KNOWLEDGE OF THE OPERATING SYSTEM IN USE IS ASSUMED, PARTICULARLY WITH RESPECT TO LOCAL AND PERMANENT FILE MANIPULATIONS. PLEASE REFER TO THE .IF NOS "NOS" AND "TIME-SHARING" REFERENCE MANUALS .EF .IF NOS/BE "NOS/BE" AND "INTERCOM" REFERENCE MANUALS .EF FOR FURTHER DETAILS. .SH 2 SENATOR VER. 2.7 INTERACTIVE TEXT EDITOR. INTRO .E SENATOR IS AN INTERACTIVE TEXT EDITOR, ORIGINALLY DESIGNED FOR STUDENT USE AT LEHIGH UNIVERSITY. IT IS MEANT TO BE A HIGH-SPEED TOOL EASILY MASTERED BY THE NOVICE, YET POWERFUL ENOUGH TO ATTRACT THE EXPERIENCED TIMESHARING USER. TO PROVIDE THIS FLEXIBILITY, SENATOR OPERATES IN THREE DISTINCT MODES: "READY", "SCP/SCOPE", AND "EDIT". THE MOST FREQUENTLY USED MODE (PARTICULARLY FOR THE NEW USER) IS "READY". THIS MODE CONTAINS NUMEROUS COMMANDS WHOSE FUNCTIONS CLOSELY PARALLEL THOSE OF THE TRADITIONAL DARTMOUTH SYSTEM. TYPICAL COMMANDS INCLUDE "NEW", "OLD", "SAVE", "LIST", AND "RESEQ". NEW TEXT LINES ARE ADDED BY ENTERING THE LINE PREFIXED WITH THE APPROPRIATE LINE NUMBER; LINES TO BE CORRECTED ARE SIMPLY ENTERED WITH THEIR EXISTING LINE NUMBER. TO SUPPLEMENT THE RATHER STRAIGHTFORWARD COMMANDS MENTIONED ABOVE, SEGMENTS OF A TEXT FILE MAY BE MANIPULATED USING SUCH DIRECTIVES AS "DELETE", "DUP", "EXTRACT", AND "MOVE". OF COURSE, NO INTERACTIVE PACKAGE IS COMPLETE WITHOUT THE ABILITY TO COMPILE AND EXECUTE PROGRAMS, AND IN A VARIETY OF LANGUAGES AS WELL. SENATOR PROVIDES THIS CAPABILITY WITH THE "RUN", "COMPILE", "EXECUTE", AND "SYSTEM" COMMANDS. AN INTERFACE TO THE CENTRAL SITE BATCH ENVIRONMENT IS PROVIDED BY THE "OUT" (OR "NOUT"), "PUNCH", AND "SUBMIT" COMMANDS. TO ELIMINATE THE NEED FOR CORRECTING TEXT ON A LINE-BY-LINE BASIS, "EDIT" MODE IS PROVIDED TO PERFORM CHARACTER STRING OPERATIONS. "EDIT" CONTAINS A SET OF POWERFUL TEXT EDITING COMMANDS WHICH CAN FIND, CHANGE, ERASE, INSERT, SUFFIX, SHUFFLE AND OTHERWISE MODIFY STRINGS (OR ELLIPSES) AND LINES CONTAINING THOSE STRINGS. "EDIT" ALLOWS A SCATTERED SUBSET OF LINES TO BE MARKED, AND SUBSEQUENT COMMANDS CAN BE LIMITED TO ONLY MARKED LINES. A "VETO" FEATURE IS AVAILABLE, WHICH DISPLAYS CHANGED LINES, BUT DOESN'T MAKE THEM PERMANENT UNLESS APPROVED BY THE USER. "EDIT" HAS A MACRO CAPABILITY. IT SHOULD BE NOTED THAT "EDIT" IS A LINE-ORIENTED EDITOR. BECAUSE THE SYNTAX OF "EDIT" COMMANDS IS NECESSARILY MORE COMPLEX THAN "READY" MODE COMMANDS, AND BECAUSE THEY CAN EASILY DESTROY A FILE IF USED IMPROPERLY, "EDIT" MODE MUST BE ENTERED EXPLICITLY. THE INTENT OF THIS SEGREGATION IS TO PROTECT THE BEGINNER, AND, FOR THAT REASON, "SCP/SCOPE" IS A SEPARATE MODE ALSO. "SCP/SCOPE" IS THE INTERFACE BETWEEN SENATOR AND THE OPERATING SYSTEM. AS SUCH, COMMANDS CAN BE TYPED WHICH ARE THEN PASSED TO THE TIMESHARING EXECUTIVE. IN "SCOPE" MODE, THESE CONTROL STATEMENTS (OR "JCL") ARE PROCESSED EXACTLY AS ENTERED; IN "SCP" MODE PARTICULAR ABBREVIATIONS CAN BE ENTERED FOR COMMONLY USED ROUTINES AND FILE NAMES, WHICH SENATOR FIRST EXPANDS BEFORE PASSING TO THE OPERATING SYSTEM. THUS, SENATOR IS MORE THAN A SIMPLE TEXT EDITOR, IT IS VERY NEARLY A TIMESHARING SYSTEM IN ITS OWN RIGHT. THIS BRIEF INTRODUCTION TO SENATOR HAS ONLY DESCRIBED A PORTION OF ITS ABILITIES - YOU HAVEN'T SEEN ANYTHING YET! AT THIS TIME, SENATOR IS RUNNING AT VARIOUS SITES AROUND THE WORLD UNDER THE "NOS", "NOS/BE", "KRONOS" AND "SCOPE" OPERATING SYSTEMS. .H 2 SENATOR DOCUMENTATION. INTRO .E SENATOR DOCUMENTATION CAN BE OBTAINED IN ONE OF TWO WAYS - FROM THE PERMANANT FILE "SENMAN" OR FROM SENATOR'S ON-LINE "HELP" FACILITY. (AT SOME SITES THE MANUAL IS NOT AVAILABLE ON-LINE. CONTACT SITE PERSONEL FOR AVAILABILITY OF THE MANUAL.) "SENMAN" IS AN ENTIRE REFERENCE MANUAL WITH A TABLE OF CONTENTS AND A KEY TO THE SECTION NAMES. THE "HELP" COMMAND IN SENATOR LISTS REQUESTED SECTIONS AT THE TERMINAL. .H 3 HELP - PROCESS ON-LINE HELP REQUESTS. HELP .E THE "HELP" COMMAND ALLOWS QUICK AND EASY ACCESS TO DESCRIPTIONS AND EXAMPLES ON ALL ASPECTS OF SENATOR. A SINGLE KEYWORD OF UP TO TEN CHARACTERS IN LENGTH, INCLUDING BLANKS, MAY FOLLOW THE COMMAND. "FILES" AND "OLD" ARE EXAMPLES OF LEGAL KEYWORDS (NOT INCLUDING THE QUOTES, OF COURSE). TO GET YOU STARTED, A LIST OF SPECIAL KEYWORDS FOLLOWS. THE KEYWORDS "INFO" AND "DEFS" ARE PARTICULARLY USEFUL BECAUSE THEY LIST SECTIONS CONTAINING BACKGROUND INFORMATION, AS WELL AS CONVENTIONS AND DEFINITIONS COMMONLY USED. THE "READY" AND "EDIT" KEYWORDS DISPLAY ALL VALID COMMANDS FOR THEIR RESPECTIVE MODE. THE FULL SPELLING OF ANY "READY" OR "EDIT" COMMAND MAY ALSO BE SUPPLIED AS A KEYWORD TO "HELP". .C HELP - PRINT THIS INFORMATION AGAIN. DEFS - PRINT CONVENTIONS AND DEFINITIONS. INFO - LIST MORE HELP SECTIONS. READY - PRINT "READY" MODE COMMAND SUMMARY. EDIT - PRINT "EDIT" MODE COMMAND SUMMARY. KEYWORDS - PRINT LEGAL KEYWORD LIST. .E TO TERMINATE ON-LINE HELP, ENTER "EXIT" (OR "E"). .SH 2 CONVENTIONS AND DEFINITIONS. CONVENTIONS,DEFS,DEFINITIONS .E THE FOLLOWING SYMBOLS, WHEN REFERENCED, HAVE THE INDICATED MEANINGS: .L .LE [ ] SQUARE BRACKETS ENCLOSE OPTIONAL PARAMETERS. .LE A CARRIAGE RETURN. .LE .IF NOS IS EQUIVALENT TO AN . .EL END-OF-RECORD. .EF .IF LEHIGH AN IS SIGNALED BY ENTERING "^EOR", WHERE "^" REPRESENTS THE PERCENT SIGN ON YOUR TERMINAL. .EF .LE END-OF-FILE. .IF LEHIGH AN IS INDICATED BY ENTERING "^EOF", WHERE "^" REPRESENTS THE PERCENT SIGN ON YOUR TERMINAL. .EF .LE END-OF-INFORMATION. .LE A SINGLE SENATOR LINE NUMBER. THE SECTION "LINE NUMBERS AND THE CURRENT FILE" EXPLAINS THE EXACT FORM OF A . GENERALLY, A IS FROM 1 TO 6 DECIMAL DIGITS, OR THE LETTERS "A" OR "Z", WHICH STAND FOR THE FIRST AND LAST LINES OF THE CURRENT FILE, RESPECTIVELY. .LE ONE OR MORE S, EACH SEPARATED BY A (E.G., 100,200,300). .LE A RANGE OF LINES, OF THE FORM -, WHERE THE DASH SIGNIFIES THE RANGE (E.G., 100-200). NOTE THAT A RANGE MAY CONSIST OF A SINGLE LINE, IN WHICH CASE THE DASH AND SECOND MAY BE OMITTED. THIS FORM OF A IS EQUIVALENT TO A SIMPLE . IF THE FIRST IS OMITTED IN THE SPECIFICATION, "A" IS ASSUMED. SIMILARLY, "Z" IS ASSUMED IF THE TRAILING IS NOT SPECIFIED. .LE REPRESENTS A NUMBER OF S AND/OR , EACH SEPARATED BY A . SOME REPRESENTATIVE EXAMPLES: .LE .LE .LE 45-120,130,400 .LE 100,300,456-654,A .LE 987-654,4 .LE Z-A .LE 200-,-200 (I.E., 200-Z,A-200) .LE Z-A,500-400 .LE AN ARBITRARY NUMBER OF CHARACTERS, USUALLY DELIMITED BY SOME CHARACTER UNIQUE TO . .LE ANY NON-ALPHANUMERIC, EXCEPT A DASH, AND INCLUDING A SPACE. THE USED IN ALL EXAMPLES IN THIS GUIDE IS A COMMA. .LE A FILE NAME. THE EXACT FORMAT OF IS OPERATING SYSTEM DEPENDENT. SEE THE SECTION "SENATOR FILE USAGE" FOR MORE INFORMATION. .IF NOS .SH 2 SENATOR FILE USAGE. FILE,FILE NAME,FILES,PN,UN,TYPE,SYSTEM .E THE FOLLOWING FORM MAY BE USED WITH ANY SENATOR COMMAND THAT REQUIRES OR PERMITS A FILE NAME .C = [(PACKNAM)][USERNUM:][[T]/]LFN[.SYSTEM] .E THEREFORE, ONLY "LFN" IS REQUIRED FOR A DESIGNATION. .L .LE PACKNAM THE PACKNAM TO USE WHEN SEARCHING FOR A FILE. THE DEFAULT IS THE PACKNAM IN EFFECT WHEN SENATOR IS INITIALIZED. THE PARENTHESES NECESSARILY SURROUND "PACKNAM". IF THERE IS NO "PACKNAM" ENTRY THE CURRENT FAMILY IS ASSUMED. .LE USERNUM THE USER NUMBER TO USE WHEN SEARCHING FOR A FILE. THE DEFAULT IS THE USER NUMBER IN EFFECT WHEN SENATOR IS INITIALIZED. NOTE THAT THE COLON SIGNIFIES THE PRESENCE OF A USER NUMBER. .LE T THIS SPECIFIES THE "TYPE" OF THE FILE, EITHER LOCAL OR SOME FORM OF PERMANENT FILE. THE FOLLOWING "TYPE"S CAN BE SPECIFIED .LE .LE .LE D = DIRECT ACCESS PERMANENT FILE. .LE I = INDIRECT ACCESS PERMANENT FILE. .LE L = LOCAL FILE. .LE P = PERMANENT (EITHER DIRECT OR INDIRECT). .LE THE DEFAULT VALUE FOR "TYPE" IS "P". SEE THE "OPTION" COMMAND FOR RELATED INFORMATION. .LE LFN THE NAME OF THE FILE. ONE TO SEVEN ALPHANUMERIC CHARACTERS, THE FIRST OF WHICH MUST BE AN ALPHABETIC. .LE SYSTEM A SYSTEM NAME. THE CURRENT SYSTEM IS ASSUMED IF NOT SPECIFIED. THE DOT (".") SUFFIXED TO "LFN" INDICATES A SYSTEM NAME FOLLOWS. .LX THE DEFAULT "TYPE" IS "P". WHEN RETRIEVING A FILE, SENATOR FETCHES THE PERMANENT FILE WHETHER DIRECT OR INDIRECT ACCESS. DIRECT ACCESS FILES ARE ATTACHED WITH WRITE PERMISSION. WHEN WRITING TO A FILE, SENATOR ATTEMPTS TO CREATE AN INDIRECT ACCESS FILE, BUT, IF IT IS TOO LARGE, A DIRECT ACCESS FILE IS GENERATED INSTEAD. USE OF THE "D" OR "I" "TYPE" FORCES THE FILE TO THE GIVEN TYPE. IF THE "/" IS ENTERED WITHOUT THE PRECEDING "TYPE" INDICATOR, "L" (LOCAL) IS ASSUMED. THE DEFAULT "TYPE" CAN BE CHANGED VIA THE "OPTION" COMMAND. HERE ARE SOME EXAMPLES: .L .LE OLD,FROG.BAS FETCHES THE PERMANENT FILE "FROG" AND MAKES IT SYSTEM "BASIC". .LE OLD,/FROG READS THE LOCAL FILE "FROG". WHATEVER SYSTEM IS IN EFFECT AT THE TIME OF THE "OLD" IS USED TO SET UP "FROG". .LE OLD,(PACKXXX)MYFILE GETS "MYFILE" FROM PACK "PACKXXX". .LE SAVE,D/MYFILE SAVES THE CURRENT FILE TO THE DIRECT ACCESS FILE "MYFILE". .LX .EF .IF NOS/BE .SH 2 SENATOR FILE USAGE. FILE,FILE NAME,FILES LFN SN,TYPE,SYSTEM,ID,SETNAME .E THE FOLLOWING FORM MAY BE USED WITH ANY SENATOR COMMAND THAT REQUIRES OR PERMITS A FILE NAME: .C = [(SETNAME)][ID:][[T]/]LFN[.SYSTEM] .E THEREFORE, ONLY A LOGICAL FILE NAME (LFN) IS REQUIRED FOR A DESIGNATION. .L .LE LFN THE NAME OF THE FILE. ONE TO SEVEN ALPHANUMERIC CHARACTERS, THE FIRST OF WHICH MUST BE AN ALPHABETIC. NOTE: SENATOR DOES NOT SUPPORT PERMANENT FILE NAMES LONGER THAN 7 CHARACTERS. .LE SETNAME THE SETNAME TO USE WHEN SEARCHING FOR A FILE. THE PARENTHESES NECESSARILY SURROUND "SETNAME". IF THERE IS NO "SETNAME" ENTRY THE CURRENT FAMILY IS ASSUMED. IF A SET OTHER THAN THE PUBLIC PERMANENT FILE DEVICE SET IS TO BE USED, EITHER IMPLICITLY BY THE "SN" OPTION (SEE THE "OPTION" COMMAND) OR EXPLICITLY ON A FILE SPECIFICATION, THE SET MUST BE MOUNTED BEFORE ENTERING SENATOR. .LE ID THE ID TO USE WHEN SEARCHING FOR A FILE. THE DEFAULT IS THE ID IN EFFECT WHEN SENATOR IS INITIALIZED. NOTE THAT THE COLON SIGNIFIES THE PRESENCE OF A ID. .LE T THIS SPECIFIES THE "TYPE" OF THE FILE, EITHER LOCAL OR PERMANENT FILE. THE FOLLOWING "TYPE"S CAN BE SPECIFIED: .LE .LE .LE L = LOCAL FILE. .LE P = PERMANENT FILE. .LE THE DEFAULT "TYPE" IS "P" (PERMANENT). IF THE "/" IS ENTERED WITHOUT THE PRECEDING "TYPE" INDICATOR, "L" (LOCAL) IS ASSUMED. THE DEFAULT "TYPE" CAN BE CHANGED VIA THE "OPTION" COMMAND. .LE .LE NOTE: SENATOR ALWAYS ACCESSES THE HIGHEST CYCLE WHEN REFERENCING PERMANENT FILES, EXCEPT FOR THE "PURGE" COMMAND WHICH PURGES THE LOWEST CYCLE. .LE SYSTEM A SYSTEM NAME. THE CURRENT SYSTEM IS ASSUMED IF NOT SPECIFIED. THE DOT (".") SUFFIXED TO "LFN" INDICATES A SYSTEM NAME FOLLOWS. .LX HERE ARE SOME EXAMPLES: .L .LE OLD,FROG.BAS FETCHES THE PERMANENT FILE "FROG" AND MAKES IT SYSTEM "BASIC". .LE OLD,/FROG READS THE LOCAL FILE "FROG". WHATEVER SYSTEM IS IN EFFECT AT THE TIME OF THE "OLD" IS USED TO SET UP "FROG". .LE OLD,(PACKXXX)MYFILE GETS "MYFILE" FROM PACK "PACKXXX". .LE SAVE,P/MYFILE SAVES THE CURRENT FILE TO THE PERMANENT FILE "MYFILE". .LX .EF .SH 2 THE CURRENT FILE. .E FREQUENT REFERENCE IS MADE TO THE CURRENT FILE. THIS IS THE TEXT FILE THAT SENATOR IS CURRENTLY WORKING WITH. A CURRENT FILE IS CREATED EITHER BY A "NEW" COMMAND, OR BY RETRIEVING AN EXISTING FILE VIA THE "OLD" COMMAND. IN ANY CASE, SENATOR MAINTAINS THE CURRENT FILE IN A SPECIAL INTERNAL FORM. INDEED, THE KEY TO SENATOR'S LOW CPU UTILIZATION LIES IN THIS SPECIAL DATA STRUCTURE. IN GENERAL, SENATOR COMMANDS ARE DEFINED TO APPLY TO THE CURRENT FILE, THOUGH IN MANY CASES AN ALTERNATE FILE NAME MAY BE SPECIFIED. OF COURSE, A FEW COMMANDS APPLY TO NO FILE AT ALL. .SH 2 SYSTEM IMPLEMENTATION AND THE CURRENT FILE. SYSTEM,FORTRAN,BASIC,DATA,SDATA,COMPASS,S80,SNOBOL COBOL,SYMPL,PASCAL,FTN,ALGOL USA,USD,USF,USP,USS .E ASSOCIATED WITH THE CURRENT FILE IS ITS SYSTEM. A FILE'S SYSTEM DEFINES: .L REFORMATTING RULES (IF APPLICABLE) TO FOLLOW WHEN THE CURRENT FILE IS SET UP AND/OR WHEN CORRECTIONS ARE MADE. THE TAB CHARACTER AND TAB COLUMNS (IF ANY) - ALSO USED WHEN SETTING UP THE CURRENT FILE. THE COMPILER/ASSEMBLER TO BE INVOKED IN RESPONSE TO A "RUN" OR "COMPILE" COMMAND. THE MAXIMUM LENGTH (IN CHARACTERS) OF A TEXT LINE. 160 CHARACTERS FOR "DATA", 80 FOR "S80", AND 72 FOR ALL OTHER SYSTEMS. .LX THE CURRENT IMPLEMENTATION OF SENATOR PROVIDES FOR THE FOLLOWING SYSTEMS: .C SYSTEM COMPILER TAB COLUMNS ------ -------- --- ------- FORTRAN FTN 4 ; 7,11,18,30,36,45,55 BASIC BASIC 3 ^ DATA ; SDATA ; COMPASS COMPASS ; 2,11,18,30,36,45,55 S80 ; COBOL COBOL 5 ; 12,16,20,40,56 ALGOL ALGOL 5 / 4,7,10,13,16,19,22,25,28,31,34,37,40 FTN FTN 5 ; 7,10,13,16,19,22,25,28,31,34 SNOBOL SNOBOL 4 ; 10,50,60 SYMPL SYMPL / 4,7,10,13,16,19,22,25,28,31,34,37,40 PASCAL PASCAL / 3,5,7,9,11,13,15,17,19,21,23,25,27 USA ; 2,11,18,30,36,45,55 USD ; USF ; 7,10,13,16,19,22,25,28,31,34 USP / 3,5,7,9,11,13,15,17,19,21,23,25,27 USS ; .E .IF NOS/BE .C SCOPE ; .E .EF .C .E SYSTEMS ARE IDENTIFIED BY THE FIRST THREE CHARACTERS OF THEIR NAME. IF ADDITIONAL CHARACTERS ARE SUPPLIED, THEY ARE IGNORED. SINCE SENATOR REQUIRES A SYSTEM WHEN SETTING UP THE CURRENT FILE, A DEFAULT SYSTEM OF "DATA" IS ASSUMED UNLESS OTHERWISE SPECIFIED. THUS, BEFORE ENTERING A "NEW" OR "OLD" COMMAND, BE SURE THE SYSTEM APPROPRIATE FOR THE FILE HAS BEEN ESTABLISHED. THIS CAN BE DONE EITHER WITH THE "SYSTEM" COMMAND, OR (AS IS DESCRIBED IN DETAIL IN THE SECTION "SENATOR FILE USAGE.") BY SUFFIXING A DOT (".") TO THE FILE NAME FOLLOWED BY THE DESIRED SYSTEM. FOR EXAMPLE, THE FOLLOWING SENATOR COMMANDS WOULD PREPARE SENATOR FOR THE CREATION OF A NEW FORTRAN PROGRAM HAVING THE NAME "PLOT": .C SYSTEM,FORTRAN NEW,PLOT (OR) NEW,PLOT.FORTRAN .E SEE THE "SYSTEM" COMMAND FOR FURTHER INFORMATION. .SH 2 LINE NUMBERS AND THE CURRENT FILE. .E A LINE OF TEXT WITHIN THE CURRENT FILE IS IDENTIFIED BY A PRECEDING LINE NUMBER, WHETHER THE CURRENT FILE CONSISTS OF PROGRAM TEXT (BASIC, FORTRAN, ETC.) OR JUST DATA. SENATOR ASSIGNS LINE NUMBERS TO THE CURRENT FILE WHEN IT IS ESTABLISHED. THIS SEQUENCING INFORMATION MAY COME FROM THE FILE ITSELF OR IT MAY BE GENERATED BY SENATOR. PLEASE REFER TO THE "OLD" COMMAND FOR RELATED DETAILS. OBVIOUSLY, IF A NEW FILE IS BEING CREATED, IT IS THE USER'S RESPONSIBILITY TO SUPPLY LINE NUMBERS FOR EACH TEXT LINE ENTERED. LINE NUMBERS MAY BE SUPPLIED MANUALLY, OR THE "INPUT" COMMAND MAY BE EMPLOYED TO AUTOMATICALLY GENERATE THE NECESSARY LINE NUMBERS. (IN "INPUT" THESE LINE NUMBERS ARE NORMALLY NOT DISPLAYED, WHICH ALLOWS RAPID TEXT ENTRY.) LINE NUMBERS MAY BE UP TO SIX DECIMAL DIGITS LONG, AND MAY HAVE LEADING BLANKS AND ZEROS. IN "READY" MODE, THE LETTERS "A" AND "Z" MAY BE USED WHEREVER A IS ALLOWED, TO STAND FOR THE FIRST AND LAST LINE OF THE CURRENT FILE, RESPECTIVELY. A LINE NUMBER OF ZERO IS ALLOWED IN SENATOR. USING THE LINE NUMBER CONCEPT, LINE-BY-LINE CORRECTIONS TO THE CURRENT FILE CAN BE ACCOMPLISHED IN A DIRECT MANNER. IN BOTH "READY" AND "EDIT" MODE NEW LINES CAN BE ADDED TO THE CURRENT FILE BY TYPING THE NEW LINE NUMBER FOLLOWED BY THE DESIRED TEXT; EXISTING LINES CAN BE CHANGED BY SIMPLY RE-ENTERING THE SAME LINE, OR DELETED BY ENTERING JUST THE LINE NUMBER. WHEN ENTERING A BLANK LINE, BE SURE TO TYPE AT LEAST ONE SPACE (BLANK) AFTER THE LINE NUMBER. NOTE: THE "BASIC" COMPILER WILL NOT ACCEPT SIX-DIGIT LINE NUMBERS - FIVE IS THE MAXIMUM. THEREFORE, SYSTEM "BASIC" FILES HAVING LINE NUMBERS GREATER THAN 99999 SHOULD BE RESEQUENCED BEFORE A "RUN" OR "COMPILE" COMMAND IS GIVEN. .SH 2 "SQUEEZE" AND THE CURRENT FILE. SQUEEZE .E NORMALLY, WHEN THERE IS NO ROOM BETWEEN TWO LINES OF THE CURRENT FILE TO INSERT MORE TEXT BECAUSE OF LACK OF AN AVAILABLE LINE NUMBER, A RESEQUENCE IS NECESSARY. SINCE IT SEEMED UNREASONABLE THAT TEXT ENTRY SHOULD BE HALTED TO RENUMBER THE CURRENT FILE, THE CONCEPT OF "SQUEEZE" WAS INVENTED. THIS OPTION MAY BE SPECIFIED ON THE "INPUT" COMMAND, AND IS ASSUMED FOR THE "MOVE" AND "DUP" COMMANDS. WITH "SQUEEZE" ENABLED, AN ARBITRARY NUMBER OF TEXT LINES MAY BE INSERTED BETWEEN ANY TWO LINES OF THE CURRENT FILE, EVEN IF THE TWO LINE NUMBERS ARE CONSECUTIVE. ONE OR MORE FOLLOWING LINE NUMBERS ARE INCREMENTED AS NEEDED UNTIL THE NEW TEXT FITS. IN EFFECT, A PARTIAL AND INTERNAL RESEQUENCE IS PERFORMED, BUT ONLY FOR AS MANY LINES AS NECESSARY. FOR INSTANCE, CONSIDER THE FOLLOWING FILE: .C 100 REMARK THIS IS AN EXAMPLE ILLUSTRATING "SQUEEZE". 105 REMARK THE INCREMENT BETWEEN LINES OF THE CURRENT FILE 110 REMARK IN THIS SAMPLE IS FIVE. AS A RESULT, A MAXIMUM 115 REMARK OF FOUR NEW TEXT LINES CAN BE INSERTED BETWEEN 120 REMARK ANY TWO EXISTING LINES BEFORE THE RANGE BECOMES 125 REMARK FILLED. .E NOW, SUPPOSE THAT SIX NEW LINES MUST GO BETWEEN LINE NUMBERS 100 AND 105. NEVER MIND HOW THIS IS ACCOMPLISHED, JUST NOTICE WHAT THE LINE NUMBERS IN THE CURRENT FILE LOOK LIKE AFTER THE NEW LINES ARE INSERTED: .C 100 REMARK THIS IS AN EXAMPLE ILLUSTRATING "SQUEEZE". 101 ******** INSERTED TEXT LINE 1. 102 ******** INSERTED TEXT LINE 2. 103 ******** INSERTED TEXT LINE 3. 104 ******** INSERTED TEXT LINE 4. 105 ******** INSERTED TEXT LINE 5. 106 ******** INSERTED TEXT LINE 6. 107 REMARK THE INCREMENT BETWEEN LINES OF THE CURRENT FILE 110 REMARK IN THIS SAMPLE IS FIVE. AS A RESULT, A MAXIMUM 115 REMARK OF FOUR NEW TEXT LINES CAN BE INSERTED BETWEEN 120 REMARK ANY TWO EXISTING LINES BEFORE THE RANGE BECOMES 125 REMARK FILLED. .E AS IS EVIDENT, ONLY ONE EXISTING LINE NUMBER CHANGED: OLD LINE NUMBER 105 IS NOW 107. .H 2 TEXT REFORMATTING AND THE CURRENT FILE. .E TO IMPROVE PROGRAMMER EFFICIENCY, SENATOR ACCEPTS SHORTHAND INPUT AND MODIFIES THE TEXT TO CONFORM WITH COMPILERS' NEEDS. THIS PROCESSING CAN BE QUITE ELABORATE, AS IT IS IN SYSTEMS "COBOL", "COMPASS", "FTN" AND "FORTRAN", OR SIMPLY INVOLVE A TAB CHARACTER. THE TAB CHARACTER ACTS LIKE A TAB ON A TYPEWRITER OR A SKIP ON A KEYPUNCH. INDIVIDUAL REFORMATTING METHODS ARE DESCRIBED BELOW. .SH 3 TAB PROCESSING. TAB .E WHEN ENTERING DATA IN THE CURRENT FILE, TAB PROCESSING MAY BE EMPLOYED, IN ANY SENATOR SYSTEM, TO EASE FORMATTING PROBLEMS. ALTHOUGH EACH SYSTEM HAS ITS OWN DEFAULT VALUES FOR THE TAB CHARACTER AND COLUMNS, THEY MAY BE OVERRIDDEN BY USE OF THE "TAB" COMMAND. BEFORE SENATOR ATTEMPTS TAB PROCESSING ON ANY TEXT LINE, A TAB CHARACTER AND AT LEAST ONE TAB COLUMN MUST BE IN EFFECT AT THE TIME THE LINE IS ENTERED. UPON ENCOUNTERING A TAB CHARACTER, SENATOR REMOVES IT FROM THE INPUT LINE AND INSERTS SPACES IN ITS PLACE UNTIL THE NEXT TAB POSITION IS REACHED. ANY TABS DETECTED AFTER THE LAST TAB COLUMN ARE SIMPLY REPLACED BY A SPACE - NO TAB PROCESSING CAN BE PERFORMED. TABS ARE USEFUL FOR GENERATING STRUCTURED DATA FILES, PRODUCING TIDY DOCUMENTATION, AND A VARIETY OF OTHER THINGS. .SH 3 BASIC-TYPE REFORMATTING. BASIC .E LIKE OTHER SYSTEMS, "BASIC" MAY HAVE TAB CHARACTERS IN ITS INPUT TEXT. HOWEVER, BASIC LINES ARE STORED INTERNALLY WITHOUT THE LINE NUMBER AND ONE LEADING BLANK (IF ANY). COLUMN 1 IS CONSIDERED TO BE THE FIRST CHARACTER AFTER THE LINE NUMBER. .SH 3 ASSEMBLER-TYPE REFORMATTING. COMPASS .E A COMPASS LINE IS REFORMATTED INTO GROUPS OF COLUMNS REPRESENTING THE LABEL, OPERATION, ADDRESS, AND COMMENT FIELDS. EXCEPT FOR COMMENTS AND CONTINUATION LINES, THE STARTING COLUMN OF EACH FIELD IS ENTIRELY DETERMINED BY THE FIRST FOUR (OR FIVE) TAB COLUMNS. IF LESS THAN 4 TAB POSITIONS ARE DEFINED, THE LINE IS REJECTED AND AN ERROR MESSAGE IS ISSUED. COMMENTS AND CONTINUATION LINES ARE INDICATED BY AN ASTERISK ("*") OR COMMA (",") AT THE START OF THE LINE (LEADING BLANKS ARE IGNORED). TAB CHARACTERS IN SUCH LINES ARE PROCESSED AS IN OTHER SYSTEMS. THE FIRST STRING OF CHARACTERS IS ASSUMED TO BE THE OPERATION FIELD UNLESS IT IS TERMINATED BY A COLON (":"). IF A COLON IS FOUND, THE STRING OF CHARACTERS IS ASSUMED TO BE A LABEL AND IS PLACED, WITHOUT THE COLON, IN THE LINE STARTING AT THE FIRST TAB POSITION. IF THE FIRST CHARACTER OF A LINE IS A PLUS OR MINUS SIGN, IT IS ALSO A LABEL AND THE OPERATION FIELD IS ASSUMED TO FOLLOW. NO COLON IS EXPECTED TO FOLLOW A PLUS OR MINUS. IF THE LABEL FIELD OVERLAPS THE OPERAND FIELD, THE OVERLAP IS TRUNCATED WITHOUT NOTIFICATION. THE OPERAND AND ADDRESS FIELDS ARE SEPARATED BY AT LEAST ONE BLANK. SENATOR ATTEMPTS TO PLACE EACH OF THESE FIELDS IN THE LINE STARTING AT TABS 2 AND 3. IF A PRECEDING FIELD OVERFLOWS INTO THE NEXT, THE NEXT TAB COLUMN, IF ANY, IS USED. IF THERE ARE NO FURTHER TAB COLUMNS, THE NEW FIELD IS SHIFTED OUT SUCH THAT THERE IS ONE BLANK FOLLOWING THE LAST FIELD. THE TAB CHARACTER INDICATES THE START OF THE COMMENT FIELD. IT TERMINATES THE CURRENT FIELD AND TRIES TO START THE COMMENT IN THE FOURTH TAB POSITION. IF THE ADDRESS FIELD OVERFLOWS THAT COLUMN, SENATOR TRIES TO USE THE FIFTH POSITION, IF ANY. IF THAT DOESN'T WORK, ONE BLANK IS PLACED BETWEEN THE TWO FIELDS. .SH 3 FORTRAN-TYPE REFORMATTING. FTN,FORTRAN .E FORTRAN INPUT LINES ARE SCANNED TO DETERMINE WHICH FIELDS HAVE BEEN GIVEN. A LINE STARTING WITH AN ASTERISK ("*") IS ASSUMED TO BE A COMMENT AND IS PLACED IN COLUMN 1. IF IT BEGINS WITH THE CHARACTER C ("C"), AND IS NOT FOLLOWED BY ANOTHER ALPHABETIC CHARACTER, A LEFT PARENTHESIS, OR AN EQUAL SIGN ("="), IT IS ALSO ASSUMED TO BE A COMMENT. IF A DIGIT IS THE FIRST CHARACTER IN THE LINE, IT IS A STATEMENT LABEL AND IS PLACED RIGHT-JUSTIFIED IN COLUMNS 1-5. BLANKS FOLLOWING THE STATEMENT LABEL (IF ANY) ARE IGNORED AND THE REMAINDER OF THE LINE STARTS IN COLUMN 7. CONTINUATION LINES ARE SIGNALED BY A PLUS SIGN AT THE BEGINNING OF THE LINE. WHATEVER FOLLOWS THE PLUS SIGN IS COPIED STARTING AT COLUMN 7 - THE "+" IS PLACED IN COLUMN 6. TAB CHARACTERS ARE PROCESSED *AFTER* THE LINE HAS BEEN REFORMATTED. THE TAB CHARACTER HAS NO SPECIAL MEANING DURING THE PHASE OF REFORMATTING PRECEDING THE TAB PROCESSING. .SH 3 COBOL-TYPE REFORMATTING. COBOL .E COBOL INPUT LINES START IN COLUMN 8 BY DEFAULT. THE TAB CHARACTER MAY BE USED IN THE NORMAL MANNER TO MOVE TO COLUMN 12, ETC. LINES BEGINNING WITH "*" OR "-" START IN COLUMN 7 - THEY DENOTE COMMENTS AND CONTINUATION, RESPECTIVELY. FINALLY, LINES BEGINNING WITH "/" START IN COLUMN 1, AND THE "/" IS DISCARDED. THIS IS USED TO ENTER SUCH THINGS AS UPDATE DIRECTIVES. .SH 2 TRUNCATION OF ILLEGALLY LONG LINES. LONG LINES .E WHEN ANY TEXT LINE IS ENTERED INTO THE CURRENT FILE WHICH EXCEEDS THE MAXIMUM LINE LENGTH FOR THE SYSTEM IN EFFECT, AN INFORMATIVE MESSAGE IS DISPLAYED INDICATING THE NUMBER OF EXTRA CHARACTERS. THESE CHARACTERS ARE NOT TRUNCATED AT THIS TIME (AS LONG AS THE LINE DOES NOT EXCEED 160 CHARACTERS IN LENGTH.) THE SAME HOLDS TRUE IF, AS A RESULT OF AN "EDIT" MODE OPERATION, THE LINE EXTENDS PAST THE RECOMMENDED LINE LENGTH FOR THE SYSTEM. HOWEVER, WHEN THE FILE IS "SAVE"D OR "REPLACE"D ALL LINES LONGER THAN THE LINE LENGTH ARE TRUNCATED APPROPRIATELY - EXTRANEOUS CHARACTERS ARE LOST. .SH 2 "SAVE" OPTION AND THE CURRENT FILE. SAVE,REPLACE,OLD .E EVERY CURRENT FILE IN SENATOR HAS ASSOCIATED WITH IT CERTAIN INFORMATION, INCLUDING THE FILE NAME, THE TAB CHARACTER AND COLUMNS, AND THE SYSTEM. FURTHER, IF THE FILE HAS BEEN "RUN", "COMPILE"D, OR "EXECUTE"D, INFORMATION SUCH AS THE OBJECT FILE NAME, COMPILATION AND EXECUTION FIELD LENGTH, OPTIMIZATION LEVEL (IF APPROPRIATE), SYSTEMS TEXT, AND SO ON ALSO BECOMES LINKED TO THE CURRENT FILE. INSTEAD OF REMEMBERING ALL THESE OPTIONS AND PARAMETERS, THE "SAVE" OPTION CAN BE TURNED ON. WITH "SAVE=ON" (SEE THE "OPTION" COMMAND) THIS INFORMATION AND MORE IS WRITTEN TO THE END OF THE CURRENT FILE WHENEVER IT IS "SAVE"D OR "REPLACE"D WITHIN SENATOR. ANY TIME A CURRENT FILE IS SET UP AND THIS INFORMATION IS PRESENT, IT OVERRIDES ANY DEFAULTS ASSUMED BY SENATOR. .SH 2 "BRIEF" FLAG. BRIEF .E ALL MODES IN SENATOR HAVE A "BRIEF" FLAG. WHEN SET, THIS FLAG SUPPRESSES MOST NORMAL SENATOR PROMPTING AND STANDARD MESSAGES. AT SITES WHERE STACKED INPUT IS FEATURED, A TERMINAL USER CAN ENTER A STRING OF COMMANDS WITHOUT INTERRUPTION AND HENCE IMPROVE HIS EFFICIENCY. "BRIEF" CAN BE CONFUSING, AND SHOULD BE AVOIDED BY THE BEGINNER. IN ALL MODES, THE "BRIEF" FLAG IS TOGGLED BY ENTERING A DOT ("."). .SH 2 CURRENT SENATOR STATUS. STA,STATUS .E TYPING "STA" CAUSES SENATOR TO RESPOND WITH ONE OR MORE LINES OF PERTINENT STATUS INFORMATION. THIS INFORMATION WILL VARY ACCORDING TO THE CURRENT MODE, WHAT OPTIONS ARE IN EFFECT, AND THE TYPE OF STATUS INFORMATION DESIRED BY THE USER. IN "READY/EDIT" MODE AN OPTIONAL PARAMETER CONSISTING OF A SINGLE LETTER MAY BE USED TO SELECT THE APPROPRIATE INFORMATION. .C STATUS [P1] "P1" = C, D, E, F, M, P, OR R. .E .L .LE C - CURRENT FILE STATUS IF "P1" IS OMITTED "C" IS ASSUMED. THE CURRENT FILE TYPE/NAME, SYSTEM, FILE LENGTH, AND TAB CHARACTER/COLUMNS ARE PRINTED. .IF NOS/BE IF "TYPE=P" THE LARGE PERMANENT FILE "ID" IS LISTED FOLLOWED BY A COLON AND THE "SETNAME" IS ENCLOSED IN PARENTHESIS. SEE THE .EL IF "TYPE=P", THE PACKNAM IS DISPLAYED SURROUNDED BY PARENTHESIS ALONG WITH THE USERNAME. A COLON FOLLOWS THE USERNAME. SEE THE .EF SECTION "SENATOR FILE USAGE" FOR MORE INFORMATION. .LE D - DUMP REGISTERS AFTER A SYSERR ONLY USEFUL AFTER SENATOR HAS ANNOUNCED A "SYSERR". .LE E - "EDIT" STATUS THIS OPTION INDICATES THE , "RANGE", "PRC", AND THE DEFAULTABLE PARAMETERS "ALL", "TOP", "UNIT", "VETO", "DISPLAY" AND "ZONE". .LE F - FULL STATUS THIS OPTION DISPLAYS ALL RELEVANT STATUS INFORMATION. .LE M - MISCELLANEOUS STATUS THINGS LIKE "ALARM", "BRIEF", "DEST" AND "SAVE". .LE P - PERMANENT FILE STATUS THIS OPTION PRINTS .IF NOS/BE "ID", .EF .IF NOS "PN", "PW", .EF .IF NOS/BE "RD", "RP", "SN", "TK", .EF "TYPE", .IF NOS AND "UN". .EF .IF NOS/BE AND "XR". .EF .LE R - RUN/COMPILE/EXECUTE STATUS THIS OPTION PRINTS "B", "COPYL", "G", "LIB", "LOAD", AND "S". .LX .SH 2 COMMON ENTRIES WITHIN SENATOR. .E THE FOLLOWING ENTRIES ARE COMMON TO ALL THREE SENATOR MODES: .C ENTRY USE ----- --- . TOGGLE THE "BRIEF" FLAG. DISPLAY CURRENT STATUS. EDI ENTER "EDIT" MODE. END EXIT TO THE TIMESHARING EXECUTIVE. REA ENTER "READY" MODE. SCO ENTER "SCOPE" MODE. SCP ENTER "SCP" MODE. STA DISPLAY CURRENT STATUS. .E .SH 2 USER ABORTS WITHIN SENATOR. ABORT .E A USER ABORT .IF NOS (USER-BREAK 1 OR 2) .EF PREMATURELY TERMINATES THE COMMAND THAT IS CURRENTLY EXECUTING. AN ABORT MAY BE PERFORMED AT ANY TIME WITHOUT DANGER TO THE CURRENT FILE; HOWEVER, IN GENERAL, THE COMMAND WILL ONLY BE PARTIALLY COMPLETE, AND A CHECK SHOULD BE MADE TO SEE HOW FAR IT HAS GONE. FOR EXAMPLE, AN ABORTED "RESEQ" MAY LEAVE THE CURRENT FILE HALF RESEQUENCED. AN ABORTED "OLD" MAY HAVE READ ONLY PART OF THE DESIRED FILE. .IF NOS IN ADDITION, SENATOR USUALLY CANNOT RECOVER FROM AN ABORT IN "SCP/SCOPE" MODE - CONTROL MAY REVERT TO THE TIMESHARING EXECUTIVE, NECESSITATING A RE-ENTRY INTO SENATOR. .EF .H 2 TIME LIMIT EXCEEDED WITHIN SENATOR. TIME LIMIT,ETL .E SENATOR INCORPORATES RECOVERY CODE TO REPRIEVE FROM TIME LIMIT EXCEEDED CONDITIONS. AGAIN, SINCE THE PRECISE HANDLING OF A TIME LIMIT DEPENDS ON BOTH THE OPERATING SYSTEM AND SITE INVOLVED, THE APPROPRIATE SYSTEMS MANUAL SHOULD BE CONSULTED. .IF NOS .SH 3 TIME LIMIT RECOVERY UNDER "NOS". TIME LIMIT,SETTL .E TIME LIMIT PROCEDURES ARE DOCUMENTED FULLY IN THE "NOS" TIME SHARING REFERENCE MANUAL. WHEN THE SYSTEM ANNOUNCES A "TIME LIMIT", THE FOLLOWING TYPE-INS ARE PERMITTED: .L .LE A CARRIAGE RETURN *STOP*S THE JOB. THE COMMAND CURRENTLY EXECUTING IS MOST LIKELY ONLY PARTIALLY COMPLETE, SO INSPECT ITS RESULTS. YOUR TIME LIMIT WILL HAVE BEEN INCREMENTED BY 8 SECONDS, ASSUMING YOUR ACCOUNT LIMITS PERMIT. .LE T,NOTL WHERE "NOTL" IS THE NEW OCTAL TIME LIMIT. IN THIS CASE, THE JOB CONTINUES EXECUTION. .LX .EF .IF NOS/BE WHEN YOUR TIME LIMIT HAS EXPIRED THE MESSAGE "CPU TIME LIMIT-YOU HAVE 8 MORE SECONDS." IS PRINTED. THE USER SHOULD EXIT FROM SENATOR AND INCREASE THE CURRENT "ETL" OR SIMPLY SAVE THE CURRENT FILE AND EXIT SENATOR. NOTE: BEFORE ENTERING SENATOR THE "ETL" SHOULD BE SET HIGH ENOUGH TO COVER ALL OF THE ACTIVITIES THE USER PLANS TO DO WITHIN SENATOR, SINCE EVERYTHING (E.G., ALL "RUN"S AND "COMPILE"S) IS CONSIDERED TO BE ONE JOB. .EF .SH 2 SENATOR SYSTEM ERRORS? SYSERR,ABORT .E SENATOR CONTAINS NUMEROUS INTERNAL CHECKS TO TRAP PROBLEMS WHEN AND IF THEY OCCUR. IF AN ERROR OCCURS, SENATOR WILL ANNOUNCE A *SYSERR* AND PRINT THE LOCATION OF THE ABORT WITHIN SENATOR. IF THIS HAPPENS, PLEASE TRY TO CONTACT SYSTEM PERSONNEL IMMEDIATELY. THESE ERRORS ARE EASIER TO FIX IF DEBUGGING IS DONE BEFORE ANOTHER LINE IS ENTERED INTO SENATOR. IF NO HELP IS AVAILABLE, FIRST ENTER A "STATUS,D" COMMAND. SENATOR WILL THEN PRINT THE CONTENTS OF THE HARDWARE REGISTERS AT THE TIME THE *SYSERR* OCCURED. A DUMP OF MEMORY .IF NOS/BE IS AUTOMATICALLY TAKEN AS WELL AND WRITTEN TO THE FILE "OUTPUT". THE SYSTEM DISCONNECTS "OUTPUT" BEFORE PERFORMING THE DUMP SO IT DOES NOT PRINT AT THE TERMINAL (A DUMP MAY BE TAKEN FOR OTHER NON-SYSERR ERRORS TOO). SUBMIT THIS .EL IS AUTOMATICALLY TAKEN AS WELL AND WRITTEN TO THE FILE "ZZZDUMP" (A DUMP MAY BE TAKEN FOR OTHER NON-SYSERR ERRORS TOO). SUBMIT THIS .EF OUTPUT ALONG WITH A COMPLETE DESCRIPTION OF THE PROBLEM. THEN TRY THE SAME OPERATIONS AGAIN - SOMETIMES THINGS MAGICALLY WORK AS THEY SHOULD. .SH 2 WHAT TO EXPECT AFTER TYPING SENATOR. SENATOR .E SENATOR IS INVOKED BY ENTERING A "SENATOR." CONTROL STATEMENT TO THE TIMESHARING EXECUTIVE. THIS IS THE STANDARD CALL CARD EMPLOYED IN MOST CASES. ONE OR TWO ARGUMENTS MAY BE SUPPLIED ON THE CONTROL STATEMENT, WHICH ARE DISCUSSED SHORTLY. WHEN SENATOR IS ENTERED FOR THE FIRST TIME DURING A TERMINAL SESSION, THE FOLLOWING INITIALIZATION IS PERFORMED: .C -- PRINT A HEADER SHOWING THE VERSION AND ASSEMBLY DATE. -- SET DEFAULTS: 1) CURRENT FILE = "NONAME". 2) SYSTEM = "DATA". 3) "TYPE" OPTION = "P". 4) "EDIT" DEFAULTS = "OFF". -- ENTER "READY" MODE. .E AT THIS POINT, A "NEW" OR "OLD" COMMAND CAN BE TYPED TO ESTABLISH A CURRENT FILE. IT CAN BE LISTED, CHANGED, OR RUN. "EDIT" MAY BE USED TO MAKE CORRECTIONS AS WELL. THE CURRENT FILE IN ITS MODIFIED FORM CAN THEN BE SAVED, AND SENATOR CAN BE EXITED SO OTHER TERMINAL FUNCTIONS CAN BE PERFORMED. .SH 3 SENATOR RESTART. RESTART .E THAT IS ALL WELL AND GOOD, BUT, YOU MAY ASK, WHAT HAPPENS TO THE CURRENT FILE AFTER LEAVING SENATOR? IDEALLY, ONE WOULD LIKE TO RECOVER THE EXACT ENVIRONMENT AS IT EXISTED WHEN SENATOR WAS LAST ACTIVE. ALTHOUGH THIS CAPABILITY IS ABSENT IN MOST EDITORS, SENATOR PROVIDES FOR IT VIA A RESTART ABILITY. AFTER THE INITIAL ENTRY INTO SENATOR, SUCCEEDING CALLS ATTEMPT A RESTART. THE CURRENT FILE (IF IT EXISTS) IS RECOVERED, AND SENATOR RESUMES OPERATIONS WHERE IT LEFT OFF. A RESTART CAN FAIL IF SENATOR'S WORK FILES HAVE BEEN TAMPERED WITH OR IF A DIFFERENT VERSION OF SENATOR IS USED DURING THE SAME TERMINAL SESSION. IF A RESTART IS EXPECTED BUT SENATOR DISPLAYS ITS HEADER INFORMATION, THE RESTART HAS FAILED. .SH 2 SENATOR CONTROL STATEMENT PARAMETERS. SENATOR .E IN THE ABSENCE OF A PARAMETER ON THE SENATOR CALL STATEMENT, CONTROL IS PASSED DIRECTLY TO "READY" MODE. ENTRY TO EITHER OF THE REMAINING MODES IS INDICATED BY THE PRESENCE OF A SINGLE ARGUMENT, AS DESCRIBED BELOW: .C SENATOR,P1,P2. "P1" = .E .L .LE SCOPE ENTER "SCOPE" MODE. .LE SCO ENTER "BRIEF" "SCOPE" MODE. .LE SCP ENTER "SCP" MODE. .LE S ENTER "BRIEF" "SCP" MODE. .LE EDIT ENTER "EDIT" MODE. .LE NEW START SENATOR FRESH. .LX WHEN "P1" IS NOT SPECIFIED, SENATOR ATTEMPTS TO START OR RESTART ITSELF, WHICHEVER IS APPROPRIATE. THE "P2" ARGUMENT IS IGNORED ON ALL BUT "NEW" TYPE CALLS. ON A "NEW" CALL, "P2" IS AN OPTIONAL FILE NAME. WHEN A FILE NAME IS PRESENT, SENATOR ATTEMPTS TO READ THE FILE IN THE SAME MANNER AS THE "USE" COMMAND WOULD IN "READY" MODE. BEFORE READING THE FILE, SENATOR IS PLACED IN "READY" MODE WITH THE "BRIEF" FLAG SET. THE COMMANDS ON THE FILE CAN ENTER THE VARIOUS SENATOR MODES, AND SUPPLY DEFAULT VALUES. TYPICAL ENTRIES MIGHT SET THE "BRIEF" FLAG, PERMANENT FILE PARAMETERS, OR "EDIT" MODE FLAGS. SOME COMMANDS SUSPEND READING OF THE "USE" FILE TEMPORARILY; THEY ARE DETAILED IN THE DOCUMENTATION CONCERNING THE "USE" COMMAND IN "READY" MODE. .SH 2 USING SENATOR IN A BATCH ENVIRONMENT. BATCH .E IF DESIRED, SENATOR CAN BE USED FROM A BATCH JOB WHEN INITIATED VIA A "SENATOR,NEW,LFN." CONTROL STATEMENT. THE FILE "LFN" CONTAINS YOUR DESIRED SENATOR COMMANDS, SUBJECT TO THE SAME CONSTRAINTS AS THE "USE" COMMAND IN "READY" MODE. NOTE, HOWEVER, THAT SENATOR WRITES ITS OUTPUT TO A FILE "ZZZZZVO", SO THE FOLLOWING TWO CONTROL STATEMENTS SHOULD FOLLOW THE CALL TO SENATOR: .IF NOS .C PACK,ZZZZZVO. COPYSBF,ZZZZZVO,OUTPUT. .E .EL .C REWIND,ZZZZZVO. COMBINE,ZZZZZVO,OUTPUT,77777. .E .EF THE FOLLOWING SENATOR COMMANDS SHOULD NOT BE USED DURING A BATCH RUN OR VERY STRANGE AND UNPREDICTABLE RESULTS WILL OCCUR: BEGIN, .IF NOS BYE, .EF .IF NOS/BE CATLIST, .EF COMPILE, EXECUTE, .IF NOS/BE GOODBYE, .EF LOGOUT, NOUT, OUT, PUNCH, .IF NOS/BE RMT, .EF RUN, SCOPE OR SCP. FINALLY, "END" SHOULD BE THE LAST COMMAND. .IF NOS .SH 2 EXECUTING NOS CONTROL STATEMENTS. .EL .SH 2 EXECUTING NOS/BE CONTROL STATEMENTS. .EF JCL .E OPERATING SYSTEM COMMANDS (OR CONTROL STATEMENTS) CAN BE ENTERED DIRECTLY FROM SENATOR IF DESIRED. ANY INPUT PREFIXED WITH AN EXCLAMATION POINT IS TREATED AS A CONTROL STATEMENT AND NOT A SENATOR COMMAND. THUS, TO SEE OF LIST OF LOCAL FILES ONE MAY ENTER: .C .IF NOS !ENQUIRE,F .EL !FILES .EF .E REFER TO "SCP" AND "SCOPE" FOR RELATED INFORMATION. .H 1 SCP/SCOPE MODE. .E THIS MODE ACTS AS THE INTERFACE BETWEEN SENATOR AND THE HOST OPERATING SYSTEM. FOR THOSE READERS UNFAMILIAR WITH SYSTEM CONTROL STATEMENTS, THIS CHAPTER MAY BE OMITTED. .H 2 INTRODUCTION TO "SCP/SCOPE". SCP,SCOPE,SCP/SCOPE .E "SCP/SCOPE" MODE ALLOWS THE USER TO EXECUTE SYSTEM CONTROL STATEMENTS WHILE IN SENATOR. IN "SCOPE" MODE, CONTROL STATEMENTS ARE PROCESSED EXACTLY AS TYPED. IN "SCP" MODE, SENATOR PERMITS ONE OR TWO CHARACTER ABBREVIATIONS FOR SELECTED PROGRAM AND FILE NAMES; THESE ABBREVIATIONS ARE THEN EXPANDED AND ALL DASHES ARE REPLACED BY EQUAL SIGNS (ALLOWING FOR SHIFT-LESS TYPING). THUS, "SCP" ALLOWS RAPID-FIRE ENTRY OF CONTROL STATEMENTS RESULTING IN MORE EFFICIENT USE OF THE TERMINAL. IN OTHER REGARDS, HOWEVER, "SCP" MODE IS IDENTICAL TO "SCOPE" MODE. BOTH MODES AUTOMATICALLY SUFFIX A CONTROL STATEMENT TERMINATOR IF ONE IS NOT SUPPLIED BY THE USER. SEVERAL UTILITY FUNCTIONS ARE ALSO AVAILABLE, ONE OF WHICH ALLOWS A SEQUENCE OF CONTROL STATEMENTS TO BE GENERATED (E.G., A LOAD SEQUENCE) BEFORE EXECUTION TAKES PLACE (NORMALLY, CONTROL STATEMENTS ARE EXECUTED AS THEY ARE ENTERED). LASTLY, SIMPLE FUNCTIONS SUCH AS "REWIND", "UNLOAD", AND "RETURN" ARE PROCESSED INTERNALLY BY SENATOR - SIMPLY TO REDUCE SOME OVERHEAD. .H 2 AUTO-LOAD FLAG IN "SCP/SCOPE". SCP,SCOPE .E WHEN SENATOR DETECTS A LEGAL LOADER CONTROL STATEMENT, AN "AUTO-LOAD" FLAG IS SET. WITH "AUTO-LOAD" SET, FURTHER CONTROL STATEMENTS ARE ACCUMULATED (BUT NOT EXECUTED) UNTIL THE NEXT NON-LOADER CONTROL STATEMENT IS ENCOUNTERED. THIS ALLOWS EASY MODULE LOADING AND/OR EXECUTING WITHOUT HAVING TO DEFINE A PROCEDURE FILE OF CONTROL STATEMENTS. WHEN "AUTO-LOAD" IS SET, THE "SCP" PROMPT BECOMES A "L-" INSTEAD A DASH ("-"). NOTE: THIS IS NOT DISPLAYED IF THE "BRIEF" FLAG IS SET. .H 2 "SCP/SCOPE" AUXILIARY COMMANDS. SCP,SCOPE .E THE FOLLOWING ENTRIES ARE RESERVED AND ARE USED TO CONTROL THE MANIPULATION OF SUBSEQUENT CONTROL STATEMENTS, OR TO PERFORM OTHER FUNCTIONS. .EJ .L .LE . TOGGLE THE "BRIEF" FLAG. THE "SCP/SCOPE" PROMPT CHARACTER, A DASH, IS NOT DISPLAYED WITH THE "BRIEF" FLAG SET. .LE + ENABLE THE "ECHO" FEATURE IN "SCP/SCOPE". THE CONTROL STATEMENT FOLLOWING THE "+" ENTRY WILL BE ECHOED TO THE TERMINAL. THIS FEATURE IS MOST EFFECTIVELY USED IN "SCP" MODE, SO THE EXPANDED CONTROL STATEMENT CAN BE SEEN. THE "ECHO" FLAG IS LOST WHEN SENATOR ISSUES A CONTROL STATEMENT TO THE OPERATING SYSTEM, EXCEPT IF SENATOR IS ACCUMULATING CONTROL STATEMENTS WITH "AUTO-LOAD" OR "LOAD" (SEE BELOW) IN EFFECT. OPTIONALLY, THEN, A CONTROL STATEMENT MAY BE PRECEDED BY A PLUS ("+") TO TOGGLE THE "ECHO" FLAG. .LE /Z UNLOAD SCRATCH/GARBAGE FILES. THE COMPILERS AND OTHER PRODUCT SET MEMBERS OFTEN LEAVE NUMEROUS SCRATCH FILES LYING AROUND, SO THE "/Z" ENTRY UNLOADS THEM. THE FILES RETURNED ARE: "CMPSCR", "COMPS", "FTNOPT", "FTNRLST", "FTNRMAP", "UPDTAUD", "UPDTCDK", "UPDTCHK", "UPDTEXT", "UPDTPMD", AND "UPDTSCR". .LE /L SET THE "LOAD" FLAG. WHEN SET, SENATOR ACCUMULATES CONTROL STATEMENTS UNTIL EXPLICITLY NOTIFIED BY THE USER (SEE "/X"). WHEN THE "LOAD" FLAG IS SET, THE "SCP" PROMPT BECOMES A "L-" INSTEAD OF A DASH ("-"). NOTE: THIS IS NOT DISPLAYED IF THE "BRIEF" FLAG IS SET. .LE /X INITIATE THE EXECUTION OF THE PREVIOUSLY LOADED CONTROL STATEMENTS (SEE "/L"). THIS ENTRY CAN BE USED TO FORCE EXECUTION OF ACCUMULATED CONTROL STATEMENTS WITH "AUTO- LOAD" IN EFFECT EVEN THOUGH A NON-LOADER CONTROL STATEMENT WAS NOT DETECTED. .LE /D DELETE THE LAST LOADED CONTROL STATEMENT. MULTIPLE "/D" ENTRIES MAY BE ENTERED TO ERASE ANY NUMBER OF PREVIOUSLY LOADED CONTROL STATEMENTS. OF COURSE, "/D" IS ONLY LEGAL WHEN THE "LOAD" OR "AUTO-LOAD" FLAG IS SET. ONLY AS MANY CONTROL STATEMENTS MAY BE DELETED IN THIS MANNER AS HAVE BEEN ENTERED. .LE /S SHOW ACCUMULATED CONTROL STATEMENTS. VALID ONLY WITH "LOAD" (/L) OR "AUTO-LOAD" IN EFFECT. .LE /A TURN OFF "LOAD" AND "AUTO-LOAD" FLAGS AND DO NOT EXECUTE THE ACCUMULATED CONTROL STATEMENTS (E.G., ABORT). .LE EDI ENTER "EDIT" MODE (A CURRENT FILE MUST BE DEFINED). .LE END EXIT TO THE TIMESHARING EXECUTIVE. .LE HELP LIST CONTROL STATEMENT ABBREVIATIONS ALLOWED IN "SCP", PLUS OTHER INFORMATION. .LE REA ENTER "READY" MODE. .LE SCO PROCESS CONTROL STATEMENTS WITHOUT EDITING. .LE SCP PROCESS CONTROL STATEMENTS, INCLUDING EDITING. .LE STA PRINT CURRENT STATUS. INFORMATION INCLUDES WHICH MODE IS IN EFFECT (E.G., "SCP" OR "SCOPE"), AND WHETHER "BRIEF", "LOAD", OR "AUTO-LOAD" IS SET. .LX .H 2 "SCP" ABBREVIATIONS. SCP .E THE FOLLOWING ABBREVIATIONS ARE RECOGNIZED IN "SCP" MODE: .IF NOS .C COMMAND VERB ABBREVIATONS: A =ATTACH AS=ASSIGN BF=SKIPFB BR=BKSP C =COPY CA=CATALOG CE=COPYEI CF=COPYCF CH=CHANGE CL=CATLIST CM=COMPASS CR=COPYCR CS=COPYSBF D =DAYFILE DE=DEFINE E =ENQUIRE G =GET L =LIBRARY LE=LIBEDIT LG=LIBGEN LM=LIMITS LO=LOGOUT M =MODIFY P =PURGE PE=PERMIT R =REWIND RN=RENAME RO=ROUTE RP=REPLACE RT=RETURN SB=SKIPFB SE=SKIPEI SF=SKIPF SR=SKIPR U =UPDATE UL=UNLOAD V =VERIFY WF=WRITEF WR=WRITER - =BEGIN, FILE NAME ABBREVIATONS: CC=COMPILE II=INPUT NE=NEWPL OL=OLDPL OO=OUTPUT SS=SOURCE T1=TAPE1 T2=TAPE2 T3=TAPE3 T4=TAPE4 T5=TAPE5 T6=TAPE6 T7=TAPE7 T8=TAPE8 T9=TAPE9 .E .IF NOS/BE .C COMMAND VERB ABBREVIATONS: A =ATTACH AS=ASSETS B =BATCH BE=BEGIN BP=BKSPRU C =CATALOG CF=COPYBF CM=COMPASS CN=CONNECT CP=COPY CR=COPYBR CS=COPYSBF D =DISPOSE DC=DISCONT DI=DISCARD DY=DISPLAY E =EDITLIB F =FILES FE=FETCH IT=ITEMIZE L =LIBRARY LO=LOGOUT LX=LOGOUT,,,, P =PURGE R =REWIND RN=RENAME RT=RETURN SB=SKIPB SE=SKIPEI SF=SKIPF SI=SITUATE ST=STORE U =UPDATE UL=UNLOAD - =BEGIN, FILE NAME ABBREVIATONS: CC=COMPILE CT=CPUTEXT II=INPUT NE=NEWPL OL=OLDPL OO=OUTPUT PB=PUNCHB PF=PROCFIL PR=PRINT PT=PPTEXT PU=PUNCH RN=RENAME SS=SOURCE T1=TAPE1 T2=TAPE2 T3=TAPE3 T4=TAPE4 T5=TAPE5 T6=TAPE6 T7=TAPE7 T8=TAPE8 T9=TAPE9 .E .EF .H 1 READY MODE. .E .H 2 INTRODUCTION TO "READY". READY .E "READY" MODE CONTAINS COMMANDS, TEXT ENTERING FACILITIES, AND MEANS TO ACCESS THE OTHER PROCESSING MODES. "READY" MAY BE ENTERED BY TYPING "REA" IN ALL OTHER MODES. THE EXCEPTIONS ARE "EDIT'S" VETO FEATURE AND WHEN USING THE "INPUT" COMMAND. .H 2 "READY" MODE COMMAND SYNTAX. READY SYNTAX .E "READY" MODE COMMANDS MUST BE FROM 3 TO 7 CHARACTERS LONG. A COMMAND MAY BE PRECEDED AND/OR FOLLOWED BY ANY NUMBER OF SPACES, WHICH ARE IGNORED. COMMANDS MAY BE FOLLOWED BY PARAMETERS, WHICH ARE DELIMITED BY ANY NON-ALPHANUMERIC CHARACTER. DASHES AND EQUAL SIGNS ARE INTERPRETED AS THE SAME CHARACTER TO PERMIT SHIFT-LESS ENTRIES. WHERE LINE NUMBERS ARE EXPECTED, AN "A" OR "Z" MAY BE ENTERED TO REPRESENT THE FIRST AND LAST LINES OF THE FILE, RESPECTIVELY. IF A COMMAND HAS A FILE NAME AS A PARAMETER, THE FILE NAME MUST BE SPECIFIED FIRST. A COMPLETE DESCRIPTION OF FILE NAME SYNTAX CAN BE FOUND UNDER "SENATOR FILE USAGE". ILLEGAL PARAMETERS RESULT IN AN ERROR DIAGNOSTIC. SENATOR RESPONDS TO AN UNRECOGNIZED COMMAND WITH A "WHAT?". .H 3 ALARM SET OR CLEAR THE ALARM TIME. ALARM .E THIS COMMAND ESTABLISHES OR CLEARS SENATOR'S ALARM TIME. SENATOR WILL NOTIFY THE USER WHEN THE SPECIFIED TIME HAS ARRIVED. THE ALARM TIME MUST BE SPECIFIED IN MILITARY FORMAT. .C ALARM [HH][.MM] .E .L .LE HH THE ALARM HOUR, 0 TO 23. .LE MM THE ALARM MINUTE, 0 TO 59. .LX IF NO ALARM TIME IS SUPPLIED, ANY EXISTING ALARM IS CLEARED. NOTE THAT THE ALARM TIME IS CHECKED AFTER EACH INPUT LINE OR COMMAND HAS BEEN ENTERED; SENATOR DOES NOT GIVE AN ALARM AT AN INACTIVE TERMINAL. THE ALARM TIME IS CHECKED IN "READY" AND "EDIT" MODES, BUT NOT IN "SCP/SCOPE" MODE. IF YOU HAVE AN APPOINTMENT COMING UP BUT TEND TO LOSE TRACK OF TIME AT A TERMINAL, SET AN ALARM! AND FOR THOSE USERS WHO DON'T WEAR A WATCH, "ALARM" CAN BE USED TO DISPLAY THE CURRENT TIME. SIMPLY ENTER A TIME VALUE LESS THAN THE CURRENT TIME. THUS, AN ENTRY OF THE FORM *ALARM 1* RESULTS (EXCEPT BETWEEN MIDNIGHT AND ONE A.M.) IN AN IMMEDIATE INDICATION OF THE CURRENT TIME. EXAMPLES: .L .LE ALA,9 SET AN ALARM FOR 9 O'CLOCK IN THE MORNING. .LE ALA,21 SET AN ALARM FOR 9 O'CLOCK IN THE EVENING. .LE ALA,11.45 SET AN ALARM FOR 15 MINUTES BEFORE NOON. .LX .H 3 APPEND APPEND A FILE TO THE CURRENT FILE. APPEND .E THIS COMMAND BEHAVES EXACTLY AS "OLD" DOES, EXCEPT THE CURRENT FILE IS NOT CLEARED. THE CONTENTS OF THE APPEND FILE ARE SIMPLY PLACED AFTER THE LAST LINE OF THE CURRENT FILE. .C APPEND [N] .E .L .LE SPECIFIES THE APPEND FILE. .LE N IF GIVEN, INDICATES DO NOT REMOVE TRAILING RECORD MARKS. .LX SENATOR USES THE SYSTEM CURRENTLY IN EFFECT WHEN APPENDING THE NEW FILE; ANY ATTEMPT TO CHANGE THE SYSTEM IS IGNORED. SEE THE "OLD" COMMAND FOR FURTHER DETAILS, INCLUDING LINE NUMBER ASSIGNMENT FOR LINES FROM THE APPEND FILE. EXAMPLES: .L .LE APP,/COMPILE APPEND THE LOCAL FILE "COMPILE". .IF NOS .LE APP,(PACK047)D/DATA APPEND THE DIRECT ACCESS FILE "DATA" FROM PACK "PACK047". .EF .IF NOS/BE .LE APP,(PACK047)P/DATA APPEND THE PERMANENT FILE "DATA" FROM PACK "PACK047". .EF .LE APP,IT APPEND THE PERMANENT FILE "IT" TO THE CURRENT FILE. .LX .H 3 BEGIN EXECUTE A CCL PROCEDURE. BEGIN,CCL,PROC,PROCEDURE .E THIS COMMAND CALLS A CCL-TYPE PROCEDURE. A *BEGIN* CARD IS GENERATED CONTAINING THE PARAMETERS SUPPLIED ON THE *BEGIN* COMMAND. FOR CONVENIENCE, EACH TIME A BLANK (SPACE) IS FOUND IN THE COMMAND LINE, IT IS TRANSLATED TO A COMMA. .C BEGIN .E .L .LE PARAMETERS DESIRED ON THE "BEGIN" CONTROL STATEMENT. .LX EXAMPLES: .L .LE BEG ISSUE THE CONTROL STATEMENT "BEGIN." .LE BEG J ISSUE "BEGIN,J." .LE BEG GETFILE,,IN OUT LGO ISSUE "BEGIN,GETFILE,,IN,OUT,LGO." .LX .H 3 CATLIST LIST USER PERMANENT OR LOCAL FILES. CATLIST .E THIS COMMAND PRODUCES A LIST OF ALL PERMANENT FILES UNDER THE CURRENT .IF NOS "UN" (OR AN ALTERNATE "UN"), .EL "ID" (OR AN ALTERNATE "ID"), .EF OR ALL LOCAL FILES. THE FILE LIST PRODUCED DEPENDS ON THE CURRENT "TYPE" IN EFFECT: PERMANENT FILES ARE DISPLAYED IF .IF NOS "TYPE" IS "P", "D", OR "I", .EL "TYPE" IS "P", .EF AND LOCAL FILES IF "TYPE" IS "L". AN EXPLICIT "TYPE" CAN BE SUPPLIED TO OVERRIDE THE DEFAULT (REFER TO THE "OPTION" COMMAND AND THE SECTION "SENATOR FILE USAGE" FOR FURTHER DETAILS ON "TYPE"). .C .IF NOS CATLIST [TYPE/] [UN] .EL CATLIST [TYPE/] [ID] .EF .E .L .LE TYPE THIS PARAMETER SPECIFIES WHETHER PERMANENT OR LOCAL FILES ARE TO BE SHOWN. .IF NOS "P" (OR "D" OR "I") .EL "P" .EF INDICATES PERMANENT FILES, AND "L" LOCAL FILES. THE TRAILING SLASH IS MANDATORY. IF ONLY THE SLASH IS ENTERED WITHOUT A PRECEDING "TYPE", "L" IS ASSUMED. .IF NOS .LE UN THIS PARAMETER SPECIFIES AN ALTERNATE USERNAME. THE FILES ON THAT ACCOUNT WHICH ARE AVAILABLE TO THE USER ARE LISTED. .EL .LE ID THIS PARAMETER SPECIFIES AN ALTERNATE "ID". FILES WITH THE INDICATED "ID" ARE LISTED. .EF .LX EXAMPLES: .L .LE CAT LIST USER LOCAL FILES OR PERMANENT FILES DEPENDING ON THE VALUE OF "TYPE". .LE CAT L/ LIST LOCAL FILES. .LE CAT/ LIST LOCAL FILES. .LE CAT P/ LIST PERMANENT FILES. .IF NOS .LE CAT 1234G0 LIST FILES FROM ALTERNATE USERNAME '1234G0'. .EL .LE CAT GLUON LIST FILES UNDER THE "ID" 'GLUON'. .EF .LE CAT P/SMAUG LIST 'SMAUG' PERMANENT FILES. .LX .H 3 COMPILE COMPILE A PROGRAM. COMPILE .E THIS COMMAND DIRECTS THE COMPILER (OR ASSEMBLER) ASSOCIATED WITH THE CURRENT FILE (AND THUS CURRENT SYSTEM) TO PRODUCE AN OBJECT FILE. SEE THE "RUN" COMMAND FOR DETAILS ON THE COMMAND FORMAT AND AVAILABLE OPTIONS. .H 3 DELETE DELETE PORTIONS OF THE CURRENT FILE. DELETE .E THIS COMMAND REMOVES PARTICULAR LINES FROM THE CURRENT FILE. THE LINES TO BE DELETED ARE SPECIFIED AFTER THE COMMAND. ALL OTHER LINES ARE LEFT UNTOUCHED. .C DELETE .E .L .LE SPECIFIES THE LINES TO DELETE. .LX CARE SHOULD BE EXERCISED WHEN USING THIS COMMAND, AS LARGE PORTIONS OF THE CURRENT FILE CAN EASILY BE DESTROYED. EXAMPLES: .L .LE DEL,100,200,300 DELETE THE THREE LINES 100, 200, AND 300. .LE DEL,100-200,345,78-82,Z DELETE THE LINES 345 AND "Z", AS WELL AS THE TWO RANGES 78 THROUGH 82 AND 100 THROUGH 200. .LX .H 3 DUP REPLICATE LINES WITHIN THE CURRENT FILE. DUP,DUPLICATE .E THIS COMMAND TAKES A SINGLE LINE (OR SINGLE RANGE OF LINES) AND INSERTS THE RANGE AT ONE OR MORE LOCATIONS WITHIN THE CURRENT FILE. THE ORIGINAL RANGE IS LEFT UNALTERED. IT IS SIMPLY COPIED TO THE NEW LOCATIONS. .C DUP .E .L .LE THE ORIGINAL RANGE TO MOVE. IF THE RANGE IS SPECIFIED IN REVERSE, THE LINES ARE REPLICATED BACKWARDS. .LE THE LINE NUMBERS INDICATING WHERE THE RANGE IS TO GO. IF EXISTS, THEN THE RANGE IS INSERTED AFTER THAT LINE. .LX UP TO 15 LINE NUMBERS MAY FOLLOW THE DUP RANGE, SPECIFYING WHERE THE RANGE IS TO GO. IF AN INSERTION POINT SPECIFIES AN EXISTING LINE NUMBER, THE RANGE IS INSERTED AFTER THE LINE. "SQUEEZE" IS AUTOMATICALLY ENABLED, SO SOME EXISTING LINE NUMBERS MAY CHANGE TO ALLOW ROOM FOR THE INSERTED RANGE. NOTE, THIS COMMAND, ALTHOUGH ALLOWED IN SYSTEM "BASIC", DOES NOT UPDATE LINE REFERENCES IN THE BASIC PROGRAM. EXAMPLES: .L .LE DUP,2545,100,200,300,400 DUPLICATE THE SINGLE LINE 2545 AT (OR AFTER) LINES 100, 200, 300, AND 400. .LE DUP,3000-4567,1,2,3,4 THE RANGE IS COPIED AND PLACED AFTER LINES 1, 2, 3, AND 4. SENATOR REALIZES IN THIS CASE THAT LINE NUMBERS 2-4 WILL CHANGE AS THE RANGE IS INSERTED AFTER LINE NUMBER 1, AND HENCE KEEPS TRACK OF ALL INSERTION POINTS AS THEY ARE BEING "SQUEEZE"D SO THAT THE RANGE IS INSERTED AT THE CORRECT SPOTS. .LX .H 3 EDIT ENTER EDIT MODE. .E THIS COMMAND TRANSFERS CONTROL FROM READY TO EDIT MODE. .H 3 END EXIT TO THE TIMESHARING EXECUTIVE. END .E THIS COMMAND, LEGAL IN ALL THREE SENATOR MODES, TRANSFERS CONTROL FROM SENATOR TO THE TIMESHARING EXECUTIVE. SENATOR SAVES THE CURRENT ENVIRONMENT, INCLUDING THE CURRENT FILE (IF ANY) AND ANY CORRECTIONS, TO A SPECIAL WORK FILE. WHEN SENATOR IS ENTERED AT A LATER TIME, OPERATIONS RESUME FROM THE POINT OF INTERRUPTION. .C END .E .H 3 EXECUTE LOAD AND EXECUTE AN OBJECT FILE. EXECUTE .E THIS COMMAND LOADS AND EXECUTES THE OBJECT FILE ASSOCIATED WITH THE CURRENT FILE. SEE THE "RUN" COMMAND FOR DETAILS ON THIS COMMAND AND ITS VARIOUS PARAMETERS. .H 3 EXTRACT EXTRACT LINES FROM THE CURRENT FILE. EXTRACT .E THIS COMMAND RETAINS SELECTED LINES WITHIN THE CURRENT FILE, AND DELETES ALL THE REST. THE LINES TO EXTRACT AND RETAIN FOLLOW THE COMMAND. .C EXTRACT .E .L .LE INDICATES WHICH LINES TO EXTRACT AND RETAIN. .LX LIKE THE "DELETE" COMMAND, "EXTRACT" CAN CAUSE MUCH DAMAGE TO THE CURRENT FILE, SO USE CAUTION. EXAMPLES: .L .LE EXT,A,234,456,11-21,Z FOUR SINGLE LINES PLUS THE LONE RANGE OF LINES ARE RETAINED. .LE EXT,A-Z ALTHOUGH A LEGAL COMMAND, IT DOES NOTHING USEFUL. .LX .H 3 FORMAT FORMAT THE CURRENT FILE. FORMAT .E THIS COMMAND REFORMATS THE CURRENT FILE IN ONE OF SEVERAL WAYS. .C FORMAT P1 [] P1 = "T", "U", OR AN INTEGER LESS THAN OR EQUAL 160. .E .L .LE T THE "T" OPTION CAUSES EACH LINE OF THE CURRENT FILE TO BE REFORMATTED ACCORDING TO THE RULES FOR THE CURRENT SYSTEM, JUST AS IF THE FILE WERE BEING ENTERED AT THE TERMINAL. AFTER ANY SPECIAL REFORMATTING IS DONE (I.E., FOR SYSTEMS "FORTRAN" AND "COMPASS"), TABS ARE PROCESSED USING THE CURRENT TAB CHARACTER AND SETTINGS. THIS OPTION IS USEFUL FOR REFORMATTING LINES ENTERED UNDER THE WRONG SYSTEM. THIS OPTION IS ILLEGAL IN SYSTEM "BASIC". .LE U THE "U" OPTION (FOR "UPDATE") CAUSES SENATOR TO SCAN THE ENTIRE CURRENT FILE (OR JUST THE LINES SPECIFIED) FOR LINES LONGER THAN 72 CHARACTERS. ALL LONG LINES ARE EXAMINED FOR REASONABLE-LOOKING "UPDATE" OR "MODIFY" CORRECTION IDENTIFIERS. THESE IDENTIFIERS ARE STRIPPED OFF, AND A "*DELETE" CARD IS CREATED. THE DELETE CARD IS ASSIGNED THE LINE'S LINE NUMBER AND THE TEXT LINE IS ENTERED WITH ITS PREVIOUS LINE NUMBER PLUS ONE. THE REST OF THE FILE IS SQUEEZED IF NECESSARY. THIS OPTION IS INTENDED TO BE USED WHEN THE CURRENT FILE IS AN "UPDATE" OR "MODIFY" COMPILE FILE. AFTER THE DESIRED CHANGES HAVE BEEN MADE TO THE FILE, THOSE LINES NOT MODIFIED SHOULD BE DELETED AND A *FORMAT U* COMMAND GIVEN TO PRODUCE A SET OF CORRECTIONS TO BE APPLIED AGAINST THE UPDATE OR MODIFY PROGRAM LIBRARY. IF "P1" IS AN INTEGER BETWEEN 1 AND 160, ALL LINES IN THE CURRENT FILE ARE TRIMMED TO THE NUMBER OF CHARACTERS SPECIFIED. THIS OPTION IS USEFUL FOR REMOVING SENATOR LINE NUMBERS OR "UPDATE" OR "MODIFY" IDENTIFIERS FROM A FILE. .LX THE OPTIONAL LINE RANGES INDICATE WHICH LINES IN THE CURRENT FILE ARE TO BE CONSIDERED BY THE "FORMAT" COMMAND. EXAMPLES: .L .LE FOR,72 TRIM ALL LINES IN THE CURRENT FILE TO 72 CHARACTERS. .LE FOR,T,500-1000 FORMAT THE INDICATED RANGE ACCORDING TO THE RULES FOR THE CURRENT SYSTEM. FOR INSTANCE, IF THE RANGE WAS TYPED IN SYSTEM "DATA" INSTEAD OF SYSTEM "COMPASS", THIS COMMAND WOULD FIX THINGS, PRESUMING THE SYSTEM HAD BEEN CHANGED TO "COMPASS" BEFORE ISSUING THE COMMAND. .LE FOR,U GENERATE A SET OF CORRECTIONS FOR "UPDATE" OR "MODIFY". .LX .IF NOS/BE .H 3 GOODBYE LOGOUT FROM THE SYSTEM. GOODBYE .E THIS COMMAND SIMPLY LOGS OFF THE TERMINAL. ALL LOCAL FILES ARE LOST, SO SAVE THE CURRENT FILE IF NEEDED BEFORE ISSUING THIS COMMAND. LOGOUT INFORMATION IS NOT PRINTED AT THE TERMINAL. .C GOODBYE .E .EF .H 3 INPUT HIGH-SPEED TEXT ENTRY INTO THE CURRENT FILE. INPUT .E THIS COMMAND PERMITS HIGH-SPEED TEXT ENTRY INTO THE CURRENT FILE WITHOUT HAVING TO SPECIFY EACH INDIVIDUAL LINE NUMBER. THESE LINE NUMBERS ARE GENERATED INTERNALLY AND ARE CONSIDERED PART OF THE LINE, EVEN THOUGH THEY ARE USUALLY NOT LISTED. THUS, TEXT MAY BE CONVENIENTLY INSERTED IN OR APPENDED TO THE CURRENT FILE. .C INPUT [N1] [N2] [N] [S] .E .L .LE N1 THE STARTING LINE NUMBER FOR THE NEW TEXT, OR AN EXISTING LINE NUMBER AFTER WHICH THE NEW LINES WILL GO. IF "N1" IS NOT SPECIFIED, LINES ARE APPENDED AFTER THE LAST LINE OF THE CURRENT FILE. THE INITIAL LINE NUMBER ASSIGNED TO THE FIRST NEW LINE IS 10 GREATER THAN THE LAST LINE OF THE FILE. IF THE CURRENT FILE IS NULL, "N1" DEFAULTS TO 100. .LE N2 THE INCREMENT TO BE USED WHEN ASSIGNING LINE NUMBERS TO SUCCESSIVE LINES OF TEXT. FOR "N2" TO BE SPECIFIED, "N1" MUST BE GIVEN. IF "N2" IS LEFT DEFAULT, THE "INPUT" COMMAND USES AN INCREMENT OF 10 IF LINES ARE BEING SUFFIXED TO THE CURRENT FILE, OR 1 IF THEY ARE BEING INSERTED. IF THE "S" OPTION IS USED, THEN "N2" CANNOT BE SPECIFIED (SEE BELOW). OF COURSE, AN INCREMENT OF ZERO IS ILLEGAL. .LE N TURNS ON LINE NUMBER PROMPTING. FOR EACH LINE ENTERED, THE LINE NUMBER IS AUTOMATICALLY PRINTED. PROMTING IS REQUIRED IN SYSTEM "BASIC", AND HENCE THE "N" PARAMETER IS ASSUMED IN THAT SYSTEM. .LE S TURNS ON "SQUEEZE". NORMALLY, WHEN THERE IS NO MORE ROOM TO INSERT A LINE, THE LINE IS REJECTED AND A DIAGNOSTIC PRINTED. IF THE "SQUEEZE" PARAMETER IS SPECIFIED, THEN THE NEXT LINE (OR LINES) IS SHOVED DOWN ONE LINE NUMBER TO MAKE ROOM FOR THE INSERTED LINE. THE "S" PARAMETER IS NOT PERMITTED IN SYSTEM "BASIC", THE RANGE MUST BE RESEQUENCED USING THE "RESEQ" COMMAND. .LX TEXT ENTERED TROUGH "INPUT" IS REFORMATTED ACCORDING TO THE RULES FOR THE CURRENT SYSTEM. IT IS PROCESSED AS IF A LINE NUMBER AND ONE SPACE WERE PREFIXED TO THE LINE. EXAMPLES: .L .LE INP STARTS INPUTTING TEXT AT THE END OF THE CURRENT FILE, STARTING AT A LINE NUMBER 10 GREATER THAN THE LAST LINE IN THE FILE. IF THERE IS NO CURRENT FILE, NEW LINES START AT LINE NUMBER 100. .LE INP,560,S NEW TEXT IS INSERTED INTO THE CURRENT FILE AT (OR AFTER) LINE 560. AS MANY TEXT LINES MAY BE ENTERED AS NECESSARY SINCE THE "SQUEEZE" OPTION WAS SELECTED. .LE INP,560 SAME AS THE PREVIOUS EXAMPLE, EXCEPT THAT "INPUT" STOPS ACCEPTING NEW TEXT LINES WHEN NO MORE WILL FIT (E.G., AT LEAST ONE MORE LINE IS ASSUMED TO FOLLOW LINE 560). .LE INP,Z,5,N TEXT LINES FOLLOW THE LAST LINE IN THE CURRENT FILE, WITH AN INCREMENT OF 5 BETWEEN LINES. THE LINE NUMBER IS DISPLAYED DUE TO THE PRESENCE OF THE "N" PARAMETER. .LX .H 4 INPUT AUXILIARY COMMANDS. INPUT .E ALL DATA ENTERED IN "INPUT" MODE IS TREATED AS SIMPLE TEXT UNLESS THE ENTIRE LINE CONSISTS OF JUST THE CURRENT TAB CHARACTER, OR THE CURRENT TAB FOLLOWED BY A "C", "D", "L", OR "R" (E.G., ";R"). A LINE OF ONLY THE CURRENT TAB CHARACTER SIGNIFIES END OF "INPUT". CONTROL IS PASSED TO "READY" MODE. THE OTHER ENTRIES DO THE FOLLOWING: .L .LE C A TAB "C" PLACES "INPUT" IN CHANGE SUB-MODE WHERE A SINGLE STRING MAY BE CHANGED TO ANOTHER STRING (NO ELLIPSES, PLEASE). THE LINE THE CHANGE OPERATES UPON IS THE LAST LINE ENTERED (I.E., THE LINE DISPLAYED IN RESPONSE TO A TAB "L" ENTRY). WHEN THE "CHANGE>" PROMPT APPEARS (SUPPRESSED IF THE "BRIEF" FLAG IS SET), TYPE YOUR STRING DELIMITER AS THE FIRST CHARACTER FOLLOWED BY THE OLD STRING; TYPE YOUR DELIMITING CHARACTER ONCE AGAIN AND FOLLOW IT WITH THE NEW STRING (THE TRAILING DELIMITER IS OPTIONAL). IF THE CHANGE IS SUCCESFUL THE ALTERED LINE IS DISPLAYED AND CHANGE SUB-MODE IS EXITED. TO EXIT WITHOUT MAKING ANY CHANGES SIMPLY ENTER THE CURRENT TAB CHARACTER FOLLOWED BY A CARRIAGE RETURN AFTER THE "CHANGE>" PROMPT. .LE D A TAB "D" DELETES THE PRECEDING LINE IN THE TEXT FILE. LINES MAY BE DELETED UNTIL THE TOP OF THE FILE IS REACHED. .LE L A TAB "L" LISTS THE PRECEDING LINE IN THE TEXT FILE. IF THERE IS NOTHING IN THE FILE, "INPUT" SAYS SO. IF THE LINE IS MARKED (SEE "EDIT"), A COLON IS DISPLAYED FOLLOWING THE LINE NUMBER, WHILE A SPACE IS PRINTED FOR AN UNMARKED LINE. .LE R A TAB "R" REPLACES THE CURRENT FILE WITHOUT HAVING TO LEAVE "INPUT". THIS ENTRY FUNCTIONS AS IF A "REPLACE" COMMAND WERE TYPED IN "READY" MODE, ALLOWING A CONVENIENT MEANS TO KEEP THE CURRENT FILE UP TO DATE IN CASE OF A SYSTEM AND/OR SENATOR MALFUNCTION. .LX .H 4 INPUT STATUS INFORMATION. INPUT .E AN OR CAUSES A LINE OF STATUS INFORMATION TO BE DISPLAYED. DATA INCLUDES THE CURRENT FILE NAME, SYSTEM, TAB CHARACTER, AND THE NEXT LINE NUMBER TO BE ASSIGNED BY "INPUT". .H 3 LENGTH PRINT LENGTH OF THE CURRENT FILE. LENGTH .E THIS COMMAND PRINTS THE LENGTH OF THE CURRENT FILE IN LINES. .C LENGTH .E .H 3 LIST LIST THE CONTENTS OF THE CURRENT FILE. LIST .E THIS COMMAND DISPLAYS ALL OR PARTS OF THE CURRENT FILE, EITHER FORWARDS OR BACKWARDS. A PUNCH LEADER/TRAILER MAY BE ADDED (E.G., FOR PAPER TAPE). IF THE LINE IS MARKED (SEE "EDIT"), A COLON IS DISPLAYED FOLLOWING THE LINE NUMBER, WHILE A SPACE IS PRINTED FOR AN UNMARKED LINE. .C LIST [P] [N] [] [/[/]] .E .L .LE P ADD LEADER AND TRAILER FOR PAPER TAPE PUNCH. .LE N IF SPECIFIED, DO NOT LIST LINE NUMBERS OR MARK INDICATORS. .LE THE LINES TO LIST. IF NO RANGES ARE GIVEN, THE ENTIRE FILE IS LISTED. .LE / ONLY LINES CONTAINING THE CHARACTERS ARE LISTED. NOTE THE STRING IS DELIMITED BY SLASHES ("/"), THE FIRST OF WHICH IS REQUIRED, WHILE THE SECOND IS OPTIONAL. .LX IF MULTIPLE RANGES ARE GIVEN, A LINE IS SKIPPED BETWEEN EACH RANGE. EXAMPLES: .L .LE LIS DISPLAY THE ENTIRE CONTENTS OF THE CURRENT FILE. .LE LIS,A-Z SAME AS ABOVE. .LE LIS,120,4590,Z-8000 LIST THE RANGE "Z-8000" (IF "Z" IS > 8000 THE RANGE IS LISTED BACKWARDS), AS WELL AS THE INDIVIDUAL LINES 120 AND 4590. .LE LIS,/"HELLO WORLD" LIST ALL LINES CONTAINING THE CHARACTERS "HELLO WORLD". .LE LIS,P,5050- LIST LINES 5050 THROUGH THE END OF THE CURRENT FILE. PAPER TAPE PUNCH LEADER AND TRAILER IS SUPPLIED. .LX .H 3 LOGOUT TERMINATE THE TERMINAL SESSION. LOGOUT .IF NOS BYE .EF .E THIS COMMAND SIMPLY LOGS OFF THE TERMINAL. ALL LOCAL FILES ARE LOST, SO SAVE THE CURRENT FILE IF NEEDED BEFORE ISSUING THIS COMMAND. .C LOGOUT .E .H 3 MERGE MERGE A FILE WITH THE CURRENT FILE. MERGE .E THIS COMMAND IS A SPECIAL VERSION OF "APPEND". AN ALTERNATE FILE IS COMBINED WITH THE CURRENT FILE, EXCEPT THAT THE ALTERNATE FILE IS NOT NECESSARILY PLACED AT THE END OF THE CURRENT FILE. THE LINE NUMBERS ON THE MERGED FILE ARE HONORED, BLENDING THAT FILE WITH THE CURRENT FILE. IN THE CASE OF A LINE NUMBER DUPLICATION (E.G., A CONFLICT), THE EXISTING LINE IN THE CURRENT FILE IS NORMALLY MAINTAINED. RECORD MARKS ARE IGNORED ON THE MERGE FILE. NOTE - THE FILE SPECIFIED MUST HAVE LEGAL SENATOR SEQUENCE NUMBERS. LINES THAT DO NOT CONTAIN RECOGNIZABLE SEQUENCE NUMBER ARE IGNORED - THEY OBVIOUSLY ARE NOT USEFUL. SIMILARLY, THE FILE MAY NOT BE IN SYSTEM *DATA*, SINCE DATA FILES DO NOT CONTAIN SEQUENCING. .C MERGE [O] .E .L .LE SPECIFIES THE MERGE FILE. .LE O THE OVERWRITE PARAMETER. IF GIVEN, LINE NUMBER CONFLICTS ARE RESOLVED IN FAVOR OF THE ALTERNATE FILE, NOT THE CURRENT FILE. .LX SEE THE "OLD" COMMAND FOR MORE INFORMATION. EXAMPLES: .L .LE MER,TOAD MERGE FILE "TOAD" WITH THE CURRENT FILE .LE MER,ZZ0095:OTHER,O .IF NOS MERGE FILE "OTHER" FROM USER NUMBER "ZZ0095" WITH THE CURRENT FILE. .EF .IF NOS/BE MERGE FILE "OTHER" FROM ID "ZZ0095" WITH THE CURRENT FILE. .EF LINE NUMBER CONFLICTS ARE RESOLVED IN FAVOR OF THE MERGE FILE. .LX .H 3 MOVE SHUFFLE LINES WITHIN THE CURRENT FILE. MOVE .E THIS COMMAND TAKES A SINGLE RANGE OF LINES IN THE CURRENT FILE AND PLACES IT AT ANOTHER LOCATION IN THE FILE. THE ORIGINAL RANGE IS DELETED AS EACH LINE IS MOVED. "SQUEEZE" IS AUTOMATICALLY ENABLED, SO SOME LINE NUMBERS MAY CHANGE AS THE RANGE IS MOVED TO ITS NEW LOCATION. THE STANDARD "SQUEEZE" INCREMENT OF ONE IS USED. .C MOVE [F ] .E .L .LE THE ORIGINAL LINE RANGE TO MOVE. IF THE RANGE IS SPECIFIED IN REVERSE, THE LINES ARE MOVED BACKWARDS. .LE THE LINE NUMBER INDICATING WHERE THE RANGE IS TO GO. IF ALREADY EXISTS, THEN THE RANGE IS INSERTED AFTER THAT LINE. .LE F THIS PARAMETER (WHICH STANDS FOR "FLAG") INDICATES THAT THE FOLLOWING LINE NUMBERS ARE TO BE FLAGGED. THESE LINE NUMBERS ARE PRINTED ALONG WITH THEIR NEW VALUE (IF ANY) AS A RESULT OF THE "MOVE". A RANGE OF LINES TO FLAG IS ILLEGAL - ONLY SINGLE LINES CAN BE GIVEN. CURRENTLY, UP TO TEN LINES CAN BE FLAGGED. .LX NOTE THAT LINE NUMBER REFERENCES ARE NOT UPDATED IN "BASIC" FILES. EXAMPLES: .L .LE MOV,100,200 MOVE LINE 100 TO (OR AFTER) LINE 200. .LE MOV,A-377,Z,F,A,377 MOVE THE RANGE "A-377" AFTER THE LAST LINE IN THE CURRENT FILE. DISPLAY THE VALUE OF LINE NUMBERS "A" AND 377 BEFORE AND AFTER THE MOVE. .LX .H 3 NEW SET UP A NEW CURRENT FILE. NEW .E THIS COMMAND ERASES THE OLD CURRENT FILE (IF ANY) AND SETS UP A NEW, EMPTY ONE. THE CURRENT SYSTEM IS MAINTAINED UNLESS EXPLICITLY CHANGED. .C NEW .E .L .LE SPECIFIES THE NEW CURRENT FILE NAME. .LX .H 3 NOUT PRINT A COPY OF A FILE WITH NO SHIFTING. NOUT,OUT .E THIS COMMAND COPIES A GIVEN FILE (OR THE CURRENT FILE) AND SENDS IT TO THE DESTINATION SPECIFIED BY THE "DEST" OPTION. CARRIAGE CONTROL IS NOT PROVIDED VIA "COPYSBF": REFER TO THE "OUT" COMMAND. .C NOUT [] .E .L .LE THE FILE NAME TO COPY AND ROUTE TO THE PRINTER. IF NO IS SPECIFIED, USE THE CURRENT FILE. CARRIAGE CONTROL IS NOT PROVIDED. .LX EXAMPLES: .L .LE NOU THE CURRENT FILE IS COPIED EXACTLY AND SENT TO THE DESTINATION PRINTER. .LE NOU/ZZZZZVL THE LOCAL FILE "ZZZZZVL" IS COPIED EXACTLY AND SENT TO THE DESTINATION PRINTER. THIS IS A PARTICULARY NICE FILENAME TO REMEMBER AS THE RESULTS OF THE LATEST "RUN" OR "COMPILE" ARE WRITTEN TO IT. THUS, IF THE COMPILATION LOOKS GOOD, THE LISTING CAN BE PRINTED BY ISSUING THE ABOVE COMMAND. .LX .H 3 OLD RETRIEVE AN OLD CURRENT FILE. OLD .E THIS COMMAND MAKES AN EXISTING FILE THE CURRENT FILE. ALL DATA UNTIL IS READ, AND ALL / MARKS ARE STORED INTERNALLY AS LINES OF "*EOR" AND "*EOF" RESPECTIVELY. .C OLD [N] .E .L .LE SPECIFIES THE FILE TO RETRIEVE AND MAKE THE CURRENT FILE. THE RETRIEVED FILE CAN BE EITHER A LOCAL OR PERMANENT FILE. THE "TYPE" FIELD IN THE FILE NAME IS USED TO SPECIFY WHETHER A LOCAL OR PERMANENT FILE IS RETRIEVED. IF "TYPE" IS NOT SPECIFIED IN THE FILE NAME, THE DEFAULT "TYPE" (SEE THE "OPTION" COMMAND) IS USED. IF THE "SAVE" OPTION WAS IN EFFECT AT THE TIME WAS SAVED (SEE THE "OPTION" COMMAND), THIS INFORMATION OVERRIDES ANY COMMAND PARAMETERS. .LE N INDICATES DO NOT REMOVE TRAILING FILE/RECORD MARKS. BY DEFAULT, ANY TERMINATING / MARKS ARE ELIMINATED. .LX LINE NUMBERS ASSIGNED TO EACH LINE ARE NORMALLY OBTAINED FROM THE CARD IMAGE. SYSTEM "BASIC" FILES HAVE LEADING LINE NUMBERS, WHILE ALL OTHER SYSTEMS (IF SEQUENCING IS USED) MAINTAIN LINE NUMBERS IN COLUMNS 73-78 OF THE STATEMENT, EXCEPT FOR SYSTEM "S80" FILES, WHICH HAVE LINE NUMBERS IN COLUMNS 81-86. SEE THE "SYSTEM" COMMAND FOR FUTHER DETAILS. SYSTEM "DATA" FILES HAVE NEW LINE NUMBERS GENERATED EACH TIME THE FILE IS "OLD"ED. LINE NUMBERS ARE ALSO CREATED FOR LINES LACKING OR HAVING ILLEGAL LINE NUMBERS. IF A LINE IS OUT OF ORDER ACCORDING TO ITS LINE NUMBER, THE LINE NUMBER IS IGNORED AND THE LINE IS APPENDED TO THE FILE. IT IS ASSIGNED A NUMBER ONE GREATER THAN THE LARGEST LINE NUMBER IN THE FILE. IF THE FIRST LINE OF THE FILE LACKS PROPER SEQUENCING INFORMATION, THE FILE IS NUMBERED STARTING AT 100 IN INCREMENTS OF 10. IN ANY OTHER SITUATION, LINE NUMBERS ARE GENERATED BY ADDING ONE TO THE LARGEST LINE NUMBER ENCOUNTERED SO FAR. LINES EXCEEDING THE LINE LENGTH FOR THE SYSTEM IN EFFECT ARE TRUNCATED AND MARKED, AND A TOTAL COUNT OF TOO LONG LINES PRINTED. REFER TO "EDIT" DOCUMENTATION FOR DETAILS ON "MARK". AT THE END OF THE "OLD", INFORMATIVE MESSAGES MAY BE PRINTED. THEY INDICATE THE NUMBER OF ILLEGAL/GENERATED/OUT OF SEQUENCE LINES ENCOUNTERED, AS WELL AS THE NUMBER OF LINES AND / MARKS READ. .IF NOS .H 3 OPTION SET SENATOR PROCESSING OPTIONS. OPTION,SAVE,TYPE,PN,UN,PW,DEST PRC .E .EF .IF NOS/BE .H 3 OPTION SET SENATOR PROCESSING OPTIONS. OPTION,SAVE,TYPE,SN,ID,RD,TK,XR,RP,DEST PRC .E .EF THIS COMMAND TURNS VARIOUS OPTIONS ON OR OFF AND SETS CERTAIN DEFAULTS USED BY SENATOR. OPTIONS ARE LISTED AFTER THE COMMAND FOLLOWED BY AN "=" OR "-" FOLLOWED BY THEIR VALUE OR "ON" OR "OFF". IF NO VALUE FOLLOWS THE "=" OR "-" THE OPTION IS CLEARED. .C OPTION P1 .E .IF NOS/BE WHERE "P1" MAY BE: DEST, PRC, SAVE, TYPE, SN, ID, TK, XR, RP, OR RD. .EF .IF NOS WHERE "P1" MAY BE: DEST, PRC, SAVE, TYPE, PN, UN, OR PW. .EF EXAMPLES: .L .LE OPT,SAVE-ON ENABLE THE "SAVE" OPTION. .IF NOS .LE OPT,TYPE-I,UN=1234 SET THE FILE TYPE DEFAULT TO INDIRECT FILES, AND SET THE DEFAULT USER NUMBER TO 1234. .EF .IF NOS/BE .LE OPT,SN-,ID=PUBLIC CLEAR THE SETNAME AND SET THE DEFAULT ID TO "PUBLIC". .EF .LX .IF NOS/BE .H 4 DEST OPTION DEST .E SETS THE DESTINATION PRINTER FOR THE "OUT" AND "NOUT" COMMANDS. THE DEFAULT IS "C" FOR CENTRAL SITE. .EF .H 4 PRC OPTION PRC .E "PRC" STANDS FOR PERMIT READY COMMANDS. WHEN THIS OPTION IS "ON" ANY INPUT LINE WHICH IS NOT RECOGNIZED BY "EDIT" IS PASSED ON TO "READY" FOR PROCESSING. THIS FACILTY ALLOWS ONE TO REMAIN IN "EDIT" MODE AND STILL PERFORM "READY" COMMANDS. "PRC" IS INITIALLY "OFF". .H 4 SAVE OPTION SAVE .E THIS OPTION MAY BE "ON" OR "OFF", BUT DEFAULTS TO "OFF". WHEN SELECTED, SENATOR WRITES AN ADDITIONAL FILE AT THE END OF THE CURRENT FILE WHENEVER IT IS "SAVE"D OR "REPLACE"D. THIS FILE CONTAINS INFORMATION ABOUT THE CURRENT FILE SUCH AS ITS ASSOCIATED SYSTEM, TAB CHARACTER AND COLUMNS, OBJECT FILE NAME, AND SO ON. WHEN A FILE IS "OLD"ED INTO SENATOR WITH THIS "SAVE" INFORMATION PRESENT (EVEN IF THE OPTION IS "OFF"), IT IS USED TO SET UP THE FILE. THIS IS A VERY NICE FEATURE AND FREQUENT USERS OF SENATOR SHOULD CONSIDER ITS USE. .H 4 TYPE OPTION TYPE .E THIS OPTION SPECIFIES THE DEFAULT FILE TYPE USED WHEN SENATOR ACCESSES FILES (SEE "SENATOR FILE USAGE"). THE DEFAULT FILE TYPE IS "P" (PERMANENT). .IF NOS .H 4 DEST OPTION DEST .E SETS THE REMOTE USER NUMBER THAT THE "OUT/NOUT" COMMAND SENDS FILES TO. A NULL ENTRY DIVERTS "OUT/NOUT" OUTPUT TO THE CENTRAL SITE. WHEN THE "SUBMIT" COMMAND IS USED, THE JOB BECOMES ASSOCIATED WITH THE SPECIFIED USER NUMBER: ANY OUTPUT IS PLACED IN THE OUTPUT QUEUE FOR THAT TERMINAL. JOB OUTPUT GOES TO THE CENTRAL SITE IF NO "DEST"" OPTION IS IN EFFECT. THE *SUBMIT* COMMAND ALSO USES THIS OPTION TO SET THE FINAL DESTINATION OF THE SUBMITTED JOB. .H 4 PN OPTION PN .E SET DEFAULT PACKNAM FOR PERMANENT FILE OPERATIONS. THIS VALUE IS INITIALIZED TO THE CURRENT "PACKNAM" IN EFFECT WHEN SENATOR IS ENTERED. A NULL "PN" ENTRY CAUSES SENATOR TO USE THE CURRENT FAMILY WHEN SEARCHING FOR FILES. .H 4 PW OPTION PW .E THIS OPTION GIVES A PASSWORD TO BE USED ON ALL PERMANENT FILE COMMANDS. THE PASSWORD IS SPECIFIED ON ALL SUBSEQUENT PERMANENT FILE FETCHES. .H 4 UN OPTION UN .E SETS THE DEFAULT USER NUMBER USED IN PERMANENT FILE ACCESSES. "UN" IS INITIALIZED TO THE CURRENT USER NUMBER. .EF .IF NOS/BE .H 4 ID OPTION ID .E SETS THE DEFAULT ID USED IN PERMANENT FILE ACCESSES. "ID" IS INITIALIZED TO THE CURRENT USER ID (WHICH IS DISPLAYED WHEN THE USER LOGS ONTO THE SYSTEM). .H 4 RD OPTION RD .E SETS THE READ PASSWORD USED IN ALL PERMANENT FILE ACCESSES. THE DEFAULT READ PASSWORD IS NULL. .H 4 RP OPTION RP .E SETS THE RETENTION PERIOD, MEASURED IN DAYS, TO USE WHEN "SAVE"ING OR "REPLACE"ING A PERMANENT FILE. THE DEFAULT "RP" IS INFINITE. .H 4 SN OPTION SN .E THIS OPTION SETS THE DEFAULT SETNAME TO BE USED FOR ALL PERMANENT FILE OPERATIONS. THIS VALUE IS INITIALIZED TO THE DEFAULT PUBLIC PERMANENT FILE DEVICE SET. IF AN ALTERNATE SETNAME IS TO BE USED, EITHER IMPLICITLY BY SPECIFYING THE "SN" OPTION OR EXPLICITLY ON A FILE NAME SPECIFICATION, THE SET MUST BE MOUNTED BEFORE ENTERING SENATOR. .H 4 TK OPTION TK .E SETS THE TURNKEY PASSWORD TO BE USED FOR ALL PERMANENT FILE ACCESSES. THIS VALUE IS INITIALIZED TO NULL. .H 4 XR OPTION XR .E SETS THE XR PASSWORD TO BE USED FOR ALL PERMANENT FILE ACCESSES. THE XR PASSWORD COVERS THE CN, EX, AND MD PASSWORDS. THIS VALUE IS INITIALIZED TO NULL. .EF .H 3 OUT PRINT A COPY OF A FILE WITH SHIFTING. OUT,NOUT .E THIS COMMAND COPIES A GIVEN FILE (OR THE CURRENT FILE) WHILE SUPPLYING ONE SPACE AS CARRIAGE CONTROL (VIA "COPYSBF"). THE COPIED FILE IS THEN SENT TO THE PRINTER SPECIFIED BY THE "DEST" OPTION. REFER TO THE "NOUT" COMMAND TO PRINT FILES WITHOUT SHIFTING. .C OUT [] .E .L .LE THE FILE NAME TO COPY (CARRIAGE CONTROL PROVIDED) AND ROUTE TO THE PRINTER. IF NO IS SPECIFIED, USE THE CURRENT FILE. .LX EXAMPLES: .L .LE OUT THE CURRENT FILE IS "COPYSBF"ED AND DISPOSED TO THE CENTRAL SITE. .IF NOS IF AN "DEST" OPTION IS IN EFFECT, THE FILE IS PLACED IN THE OUTPUT QUEUE FOR THE SPECIFIED TERMINAL. .EF .LX .H 3 PUNCH PUNCH A COPY OF A FILE. PUNCH .E THIS COMMAND COPIES A GIVEN FILE (OR THE CURRENT FILE) AND SENDS IT TO THE CENTRAL SITE CARD PUNCH (CODED). .C PUNCH [] .E .L .LE SPECIFIES THE FILE TO PUNCH. IF NO FILE IS GIVEN, THE CURRENT FILE IS ASSUMED. .LX .H 3 PURGE PURGE A PERMANENT FILE. PURGE .E THIS COMMAND PURGES THE DISK COPY OF THE CURRENT FILE, OR THE PERMANENT FILE SPECIFIED AFTER THE COMMAND. .C PURGE [] .E .L .LE SPECIFIES THE FILE TO PURGE. IF NO FILE IS GIVEN, A FILE HAVING THE SAME NAME AS THE CURRENT FILE IS PURGED. IF A LOCAL FILE IS SPECIFIED, IT IS SIMPLY RETURNED. .IF NOS/BE NOTE: IF A PERMANENT FILE IS TO BE PURGED, THE LOWEST CYCLE OF THE SPECIFIED FILE IS THE ONE THAT GETS PURGED. .EF .LX .H 3 RENAME CHANGE THE NAME OF THE CURRENT FILE. RENAME .E THIS COMMAND GIVES A NEW NAME TO THE CURRENT FILE. THE SYSTEM CAN BE CHANGED AS WELL. .C RENAME .E .L .LE SPECIFIES THE NEW FILE NAME TO GIVE TO THE CURRENT FILE. THE CONTENTS OF THE CURRENT FILE IS NOT TOUCHED IN ANY MANNER. .LX .H 3 REPLACE REPLACE A PERMANENT FILE. REPLACE .E THIS COMMAND REPLACES AN EXISTING PERMANENT FILE WITH A NEW COPY OF THE CURRENT FILE. .IF NOS SENATOR ATTEMPTS TO CREATE AN INDIRECT ACCESS FILE, BUT, IF IT IS TOO LARGE, A DIRECT ACCESS REPLACE IS PERFORMED. .EF .IF NOS/BE IF A LOWER CYCLE OF THE PERMANENT FILE BEING REPLACED EXISTS, THAT LOWEST CYCLE IS PURGED. .EF A LOCAL FILE WITH THE SAME NAME AS THE CURRENT FILE IS AVAILABLE, LEFT REWOUND. .C REPLACE [] .E .L .LE IF IS SPECIFIED, IT IS THE NAME OF THE PERMANENT FILE TO USE WHEN DOING THE REPLACE. NOTE THAT DOES NOT INDICATE AN ALTERNATE FILE NAME TO REPLACE - INSTEAD IT IS THE (OPTIONAL) PERMANENT FILE NAME. IF IS NOT GIVEN, THE CURRENT FILE NAME IS USED. .H 3 RESEQ RESEQUENCE THE CURRENT FILE. RESEQ,RESEQUENCE .E THIS COMMAND RESEQUENCES ALL OR PART OF THE CURRENT FILE. LINE NUMBER REFERENCES IN SYSTEM "BASIC" FILES ARE ALTERED AS NECESSARY. .C RESEQ [] [N1] [N2] [F ] .E .L .LE SPECIFIES THE RANGE OF LINES TO BE RESEQUENCED, BUT, IF NOT GIVEN, DEFAULTS TO "A" - "Z" (E.G., THE ENTIRE CURRENT FILE). THE RANGE NEED NOT BE ENTERED IN ORDER, BUT THE LINES ARE RESEQUENCED IN A FORWARD DIRECTION. .LE N1 IS THE STARTING VALUE OF THE NEW RANGE. THE DEFAULT VALUE IS 100 OR THE FIRST LINE NUMBER IN THE , IF A RANGE IS SPECIFIED. .LE N2 IS THE INCREMENT BETWEEN ANY TWO CONSECUTIVE LINES IN THE NEW RANGE. IF "N2" IS GIVEN, HOWEVER, THEN "N1" MUST BE SUPPLIED AS WELL. .LE F THIS PARAMETER (WHICH STANDS FOR "FLAG") INDICATES THAT THE FOLLOWING LINE NUMBERS ARE TO BE FLAGGED. THESE LINE NUMBERS ARE PRINTED ALONG WITH THEIR NEW VALUE (IF ANY) AS A RESULT OF THE "RESEQ". A RANGE OF LINES TO FLAG IS ILLEGAL - ONLY SINGLE LINES CAN BE GIVEN. CURRENTLY, UP TO TEN LINES CAN BE FLAGGED. .LX THERE ARE SEVERAL RULES THAT MUST BE FOLLOWED CONCERNING THE GIVEN RANGES AND VALUES. THE RANGE CANNOT BE MOVED TO ANOTHER PORTION OF THE FILE (USE "MOVE" IF THIS IS DESIRED). THE LINES WITHIN , AFTER THE RESEQUENCE, MUST STILL FIT WITHIN THAT RANGE. SENATOR COMPLAINS IF ANY OF THESE CONDITIONS ARE DETECTED. IF, DURING A RESEQUENCE OF A SYSTEM "BASIC" PROGRAM, REFERENCES TO UNDEFINED LINE NUMBERS ARE FOUND, THEY ARE PREFIXED WITH A "?", AND A COUNT IS PRINTED INDICATING THIS FACT. FURTHER, IF A REFERENCE IS EXPECTED BUT NONE IS FOUND, THE LINE IN ERROR IS FLAGGED WITH A TRAILING STAR ("*"), AND A COUNT IS DISPLAYED. EXAMPLES: .L .LE RES RESEQ THE ENTIRE CURRENT FILE, STARTING AT 100 IN INCREMENTS OF 10. .LE RES,1000,5 RESEQ THE CURRENT FILE STARTING AT 1000 IN INCREMENTS OF 5. .LE RES,300-500,300,2 RESEQ THE RANGE OF LINES 300-500, STARTING AT 300 IN INCREMENTS OF 2. IF THE INCREMENT IS TOO LARGE AND THE RANGE DOEN'T FIT, THE COMMAND IS ABORTED. .LE RES,230-2556,F,2566 RESEQ THE INDICATED RANGE AND FLAG LINE 2566. .LX ./ .IF NOS/BE .H 3 RMT RETRIEVE REMOTE OUTPUT FILES. RMT .E THE "RMT" COMMAND IS USED TO RETRIEVE REMOTE OUTPUT FILES. .IF NOS A REMOTE OUTPUT FILE IS EITHER A FILE IN YOUR WAIT QUEUE (PRODUCED BY SUBMITTING A JOB) OR A REMOTE BATCH PRINT FILE. THE "RMT" COMMAND DEFAULTS TO DISPLAYING THE JOB DAYFILE AT THE TERMINAL. THE OPTIONAL PARAMETER AFFECTS HOW MUCH OF THE FILE IS DISPLAYED AT THE TERMINAL. THE ENTIRE REMOTE OUTPUT FILE IS PUT ON A LOCAL FILE NAMED "OOO". IF NO REMOTE OUTPUT FILE EXISTS, THE MESSAGE "NO FILE" IS PRINTED. WHEN RETRIEVING A REMOTE OUTPUT FILE, THE MESSAGE "GETTING XXXX" IS DISPLAYED, WHERE "XXXX" IS THE JSN OF THE REMOTE FILE. .EL THE "RMT" COMMAND DEFAULTS TO DISPLAYING THE DAYFILE AT THE TERMINAL. THE OPTIONAL PARAMETER AFFECTS HOW MUCH OF THE FILE IS DISPLAYED AT THE TERMINAL. THE ENTIRE REMOTE OUTPUT FILE IS PUT ON THE LOCAL FILE "OOO". IF NO REMOTE OUTPUT FILES EXIST, THE MESSAGE "NO FILE" IS PRINTED. WHEN RETRIEVING A REMOTE OUTPUT FILE, THE MESSAGE "GETTING XXXXXXX" IS DISPLAYED, WHERE "XXXXXXX" IS THE REMOTE OUTPUT FILE NAME. .EF .C RMT [P1] P1 = "A" OR "N" .E .L .LE A THE "A" OPTION TELLS SENATOR TO DISPLAY ALL OF THE REMOTE OUTPUT FILE AT THE TERMINAL. .LE N THE "N" OPTION TELLS SENATOR TO NOT DISPLAY ANY OF THE REMOTE OUTPUT FILE AT THE TERMINAL. .LX ./ .EF .H 3 RUN COMPILE AND EXECUTE A PROGRAM. RUN .E THIS COMMAND COMPILES/ASSEMBLES PROGRAMS AND EXECUTES THE OBJECT FILE. THERE ARE MANY PARAMETERS PERMITTED FOR THIS COMMAND DEPENDING ON THE SYSTEM IN EFFECT. THE "COMPILE" AND "EXECUTE" COMMANDS USE MANY OF THESE PARAMETERS TOO. THE "HELP" PARAMETER IS AVAILABLE ON ANY OF THESE COMMANDS - IT PRINTS THE PERMITTED PARAMETERS FOR THE PARTICULAR COMMAND/SYSTEM COMBINATION. .C RUN [] ["ARGUMENTS"] .E .L .LE SPECIFIES THE FILE TO "RUN" (OR "COMPILE" OR "EXECUTE"). IF NOT SPECIFIED, THE CURRENT FILE IS ASSUMED. THE ONLY RESTRICTION IMPOSED UPON IS THAT IT CANNOT BE THE SAME AS A PERMITTED PARAMETER FOR THE COMMAND/SYSTEM COMBINATION. IF THIS HAPPENS, SENATOR ASSUMES A PARAMETER AND NOT A FILE NAME. .LE "ARGUMENTS" ARE ZERO OR MORE ARGUMENTS FOR THE COMMAND. MOST PARAMETERS ARE SET TO SOME VALUE, INDICATED BY A TRAILING "=" OR "-", FOLLOWED BY THE VALUE OF THE PARAMETER. THE VALUE PORTION IS OPTIONAL, BUT THE EQUAL SIGN (OR DASH) MUST PRECEDE SUCH PARAMETERS. THE FOLLOWING PARAMETERS ARE AVAILABLE (BUT, OF COURSE, NOT IN EVERY SYSTEM OR FOR ALL THREE COMMANDS): .LE .LE .LE HELP LIST PERMITTED PARAMETERS FOR THE COMMAND. .LE CFL COMPILATION FIELD LENGTH. .LE EFL EXECUTION FIELD LENGTH. .LE LIB LIBRARY TO BE SPECIFIED. .LE PR PRINT OPTION - SEND A LISTING TO THE PRINTER. .LE PU PUNCH OPTION - SEND OBJECT FILE TO THE PUNCH. .LE DEBUG COMPILE DEBUG CODE FOR SYSTEMS FORTRAN, FTN, .LE @ AND COBOL. .LE SHOW SHOW OPTION - SHOW CONTROL CARDS TO BE EXECUTED. .LE R FTN REFERENCE MAP LEVEL (DEFAULT=0). .LE OPT FTN OPT LEVEL (DEFAULT=0). .IF NOS .LE S SYSTEMS TEXT (DEFAULT = 0). .EL .LE S SYSTEMS TEXT (DEFAULT = CPUTEXT). .EF .LE G SYSTEMS TEXT (DEFAULT = 0). .LE L LISTING FILE (DEFAULT = ZZZZZVL). .LE B BINARY OBJECT FILE (SEE BELOW FOR DEFAULT). .LE MAP MAP LEVEL FOR THIS LOAD. .LE LOAD LOAD FILE TO BE LOADED BEFORE THE OBJECT FILE. .LE U PERFORM AN UPDATE ON THE CURRENT FILE FIRST. .LE COPYL FILES CONTAINING OBJECT ROUTINES TO BE REPLACED .LE @ BY CURRENT COMPILATION. ./ ./ ./ YES THE @ SHOULD BE THERE..IT IS A FIXED SPACE FOR .LE ONL ./ ./ .LX UNLESS SPECIFIED OTHERWISE, THE DEFAULT OBJECT FILE NAME ON A "RUN" OR "COMPILE" IS OBTAINED BY PREFIXING THE CURRENT FILE NAME WITH "XX" AND TRUNCATING THE RESULT TO SEVEN CHARACTERS (IF NECESSARY). ANOTHER NAME CAN BE SELECTED BY USING THE "B" PARAMETER ON THE COMMAND. LIKE "SHOW" AND "HELP", THE "PR" AND "PU" ARGUMENTS STAND ALONE, THAT IS, NO EQUAL SIGN OR DASH IS EXPECTED TO FOLLOW. IF "PR" IS SUPPLIED ON A "RUN" OR "COMPILE" COMMAND, THE RESULTANT COMPILED LISTING IS SENT TO THE CENTRAL SITE PRINTER. IF "PU" IS SPECIFIED, THE OBJECT FILE PRODUCED IS DISPOSED TO THE CENTRAL SITE CARD PUNCH (BINARY). THE "DEBUG" ARGUMENT MAY BE SPECIFIED ON A "RUN", "COMPILE", OR "EXECUTE" COMMAND IN SYSTEMS "FTN", "COBOL" OR "FORTRAN". THIS OPTION CAUSES DEBUG CODE TO BE INCLUDED WITH THE PROGRAM BEING COMPILED. IN SYSTEM "FORTRAN" POST MORTEM DUMP CODE WILL DIAGNOSE AND GIVE POSSIBLE REASONS WHY A PROGRAM ENDED ABNORMALLY. IN SYSTEM "FTN" POST MORTEM DUMP CODE IS INCLUDED AS WELL AS FULL TRACEBACK, SUBSCRIPT BOUNDS CHECKING, CHARACTER SUBSTRING EXPRESSION CHECKING AND OBJECT TIME REPRIEVE CODE. IN SYSTEM "COBOL" EXECUTABLE CODE IS PRODUCED REGARDLESS OF ALL ERRORS IN THE SOURCE CODE, DEBUG LINES IN THE SOURCE CODE ARE COMPILED, AND REFERENCE MODIFICATION, SUBSCRIPT BOUNDS AND PARAGRAPH TRACE CODE ARE COMPILED. (NOTE, CYBER INTERACTIVE DEBUG CAN BE USED WITH SYSTEM "FTN" AND "COBOL". REFER TO THE "CID" REFERENCE MANUAL AND THE "DEBUG" CONTROL STATEMENT FOR COMPLETE DETAILS). TO INVOKE THESE FUNCTIONS SIMPLY INCLUDE A "DEBUG=T" OR A "DEBUG=F" PARAMETER ON A "RUN" COMMAND OR INCLUDE THE "DEBUG=" OPTION ON BOTH THE "COMPILE" AND "EXECUTE" COMMANDS. WITH "DEBUG=T" SPECIFIED ANY "PMD" OUTPUT IS DIRECTED TO THE TERMINAL. IN MOST CASES THIS ABBREVIATED OUTPUT WILL POINT OUT THE IMMEDIATE PROBLEM. IF FURTHER DEBUG HELP IS REQUIRED, THEN THE "DEBUG=F" OPTION CAN BE SELECTED TO GIVE A FULL "PMD" EXPLANATION OF THE PROBLEM. THE "PMD" OUTPUT IS WRITTEN TO THE FILE "PMDUMP" WHICH SENATOR AUTOMATICALLY COPIES TO THE LISTING FILE (IF THE "L=" PARAMETER IS NOT GIVEN ON THE "RUN" COMMAND, FILE "ZZZZZVL" IS USED INSTEAD). THERE IS NO "PMDUMP" PACKAGE FOR "COBOL 5"; INSTEAD THE UTILITY "C5TDMP" SHOULD BE USED. BECAUSE OF THIS THE "T" AND "F" PARAMETERS FOR THE "DEBUG=" OPTION HAVE NO MEANING; BUT, IN ANY CASE, ONE OR THE OTHER VALUE MUST BE SPECIFIED. AFTER EXECUTION THE TERMINATION DUMP ROUTINE "C5TDMP" CAN BE USED TO INSPECT "TDFILE" (SEE THE COBOL 5 REFERENCE MANUAL). THE "LIB" PARAMETER IS USED IN CONJUNCTION WITH THE "RUN" OR "EXECUTE" COMMANDS TO SPECIFY AN ALTERNATE LIBRARY FILE TO SATISFY EXTERNAL REFERENCES FROM. ON COMMANDS WHERE THE COMPILER PERFORMS A LOAD AND GO (SUCH AS BASIC), EITHER THE "EFL" OR THE "CFL" PARAMETER MAY BE USED: THEY ARE EQUIVALENT IN SUCH A CASE. THE "MAP" PARAMETER MAY BE EITHER "ON", "PART", "OFF", OR ONE OR MORE OF THE PERMITTED "LDSET,MAP=" VALUES. SEE THE LOADER REFERENCE MANUAL FOR PERMITTED OPTIONS. THE MAP IS WRITTEN TO THE LISTING FILE. MAP=SHORT IS A SPECIAL ENTRY. A CONDENSATION OF THE MAP,PART IS DISPLAYED BEFORE THE PROGRAM IS EXECUTED. THIS ENTRY PRINTS THE BLOCK NAMES AND ADDRESSES OF EACH ROUTINE AND COMMON BLOCK. IT IS A SHORT, FAST, CONVENIENT OUTPUT. THE "SHOW" PARAMETER LISTS THE CONTROL STATEMENTS THAT ARE ACTUALLY SENT TO THE SYSTEM. IT IS INCLUDED FOR REFERENCE AND DEBUGGING. THE "U" PARAMETER INDICATES THAT AN UPDATE IS TO BE PERFORMED BEFORE THE COMPILATION. WHEN SPECIFIED, THE "RUN" FILE IS USED AS INPUT TO UPDATE ("OLDPL" IS ASSUMED, AND MUST BE A LOCAL FILE) AND THE COMPILE FILE ("COMPILE") IS SENT TO THE APPROPRIATE COMPILER. THE RUN IS ABORTED IF UPDATE ERRORS OCCUR. THE UPDATE "L=1" LISTING IS DISPLAYED ON THE TERMINAL. AN "UPDATE,Q." IS PERFORMED. THE "COPYL" PARAMETER INDICATES THAT THE RESULTS OF THE COMPILATION/ASSEMBLY ARE TO BE "COPYL"ED USING THE GIVEN FILE TO YIELD THE DESIRED OBJECT FILE. THIS FEATURE MEANS THAT A LARGE FILE NEED ONLY BE COMPILED ONCE. THEN PARTICULAR SUBROUTINES MAY BE EXTRACTED AND REPEATEDLY COMPILED FOR DEBUGGING PURPOSES WITHOUT RE-COMPILING THE ENTIRE PROGRAM. WHEN DEBUGGING IS COMPLETED, THE SUBROUTINES MAY BE "MERGE"D BACK INTO THE ORIGINAL PROGRAM. SEE THE CYBER COMMON UTILITIES REFERENCE MANUAL FOR A DETAILED DESCRIPTION OF "COPYL". WHEN THIS PARAMETER IS USED, IT WILL AUTOMATICALLY BE USED ON ALL SUBSEQUENT RUNS OF THIS FILE UNTIL ANOTHER "COPYL" PARAMETER IS ENCOUNTERED. "LOAD" INDICATES THAT A SPECIFIED FILE IS TO BE LOADED WITH THE GENERATED OBJECT FILE BEFORE EXECUTION. LIKE "COPYL" A SPECIFIED "LOAD" FILE BECOME THE DEFAULT UNTIL ANOTHER "LOAD" ENTRY. NOT ALL THE PARAMETERS APPLY TO ALL SYSTEMS OR COMMANDS. AN ILLEGAL PARAMETER CAUSES SENATOR TO ISSUE AN ERROR MESSAGE. THE "HELP" PARAMETER CAN BE USED TO SEE WHAT PARAMETERS ARE LEGAL FOR THE COMMAND/SYSTEM PAIR. THE SYSTEM ALLOWS ROOM FOR A CERTAIN NUMBER OF CONTROL STATEMENTS AND NO MORE. IF TOO MANY OPTIONS ARE SELECTED, THERE WILL NOT BE ENOUGH ROOM TO PERFORM THE REQUIRED TASKS. IF THIS SITUATION OCCURS, THE MESSAGE "TOO MANY OPTIONS" WILL BE ISSUED AND THE COMMAND ABORTED. EXAMPLES: .L .LE RUN,SHOW,HELP,PR,CFL-45000,EFL-35000,OPT=2 THE CURRENT FILE IS COMPILED WITH A FIELD LENGTH OF 45000B WORDS, AND THE OPTIMIZATION LEVEL IS SET TO 2 (E.G., THIS IS A SYSTEM "FORTRAN" OR "FTN" FILE). THE OBJECT FILE IS EXECUTED WITH A FIELD LENGTH OF 35000B WORDS, ASSUMING THERE WERE NO COMPILATION ERRORS. CONTROL STATEMENTS ISSUED TO THE OPERATING SYSTEM ARE SHOWN, AND ALL PERMITTED PARAMETERS ARE LISTED AT THE TERMINAL. FINALLY, A COPY OF THE COMPILED LISTING IS DISPOSED TO THE CENTRAL SITE. .LE COM THE CURRENT FILE IS COMPILED USING THE CURRENT SYSTEM. DEFAULT OR PREVIOUSLY ASSIGNED VALUES FOR "CFL", "EFL", AND SO ON ARE USED. .LE RUN,B-MYBIN,L-FROG45 THE CURRENT FILE IS COMPILED AND EXECUTED. THE OBJECT FILE IS TO RESIDE ON FILE "MYBIN" AND THE COMPILED LISTING IS COPIED TO FILE "FROG45". .LE RUN,DEBUG-T THE CURRENT FILE IS COMPILED AND EXECUTED WITH DEBUG CODE AUTOMATICALLY INCLUDED (SYSTEMS FORTRAN, FTN OR COBOL). IF THE PROGRAM ENDS ABNORMALLY, "PMD" DISPLAYS DEBUG INFORMATION ON THE TERMINAL. .LX .H 3 SAVE SAVE THE CURRENT FILE. SAVE .E THIS COMMAND SAVES THE CURRENT FILE AS A LOCAL OR PERMANENT FILE. THE "TYPE" FIELD IN THE FILE NAME IS USED TO SPECIFY WHETHER THE FILE IS SAVED AS A LOCAL OR PERMANENT FILE. IF "TYPE" IS NOT SPECIFIED IN THE FILE NAME, THE DEFAULT "TYPE" (SEE THE "OPTION" COMMAND) IS USED. THE FILE IS LEFT REWOUND AFTER THE "SAVE". .C SAVE [] [] .E .L .LE SPECIFIES THE FILE NAME TO SAVE THE CURRENT FILE TO. IF NOT SUPPLIED, THE CURRENT FILE NAME IS USED. .LE OPTIONAL LINES TO SAVE. IF NO RANGES ARE GIVEN, SENATOR SAVES THE ENTIRE CURRENT FILE. .LX THE CURRENT SYSTEM INDICATES HOW LINE NUMBERS ARE HANDLED. IN SYSTEM "DATA", LINE NUMBERS ARE NOT WRITTEN TO THE FILE AT ALL, SO THAT ALL 160 CHARACTERS ARE AVAILABLE PER LINE. "BASIC" LINE NUMBERS ARE PLACED AT THE BEGINNING OF THE LINE, WHICH IS STANDARD. IN SYSTEM "S80" LINE NUMBERS ARE PLACED IN COLUMNS 81-86 OF EACH LINE. FOR ALL OTHER SYSTEMS, SENATOR STORES LINE NUMBERS IN COLUMNS 73-78. IN CASES WHERE LINE NUMBERS ARE ADDED TO THE SAVED FILE, CHARACTERS BEYOND COLUMN 72 (80 FOR SYSTEM "S80") ARE TRUNCATED WITHOUT NOTICE. SEE THE "SYSTEM" COMMAND FOR FURTHER DETAILS. LINES CONTAINING JUST "*EOR" OR "*EOF" STARTING IN COLUMN ONE GENERATE RECORD AND FILE MARKS, RESPECTIVELY. AN ADDITIONAL IS PLACED AT THE END OF THE FILE IF THE LAST LINE WAS NOT "*EOR" OR "*EOF". IF THE "SAVE" OPTION IS IN EFFECT (SEE THE "OPTION" COMMAND), THE SAVE INFORMATION IS APPENDED AS THE LAST FILE. EXAMPLES: .L .LE SAV THE ENTIRE CONTENTS OF THE CURRENT FILE IS SAVED. IN THIS CASE, THE CURRENT FILE NAME IS USED. .LE SAV,ALTFILE,100-200,300,550-570,99999 THE SPECIFIED LINES FROM THE CURRENT FILE ARE SAVED TO "ALTFILE". .LX .H 3 SCOPE ENTER "SCOPE" MODE. SCOPE,JCL,CCL .E THIS COMMAND TRANSFERS CONTROL TO "SCOPE", WHERE SYSTEM CONTROL STATEMENTS MAY BE PROCESSED. SEE "SCP/SCOPE" FOR DETAILS. .C SCOPE .E .H 3 SCP ENTER "SCP" MODE. SCP,JCL,CCL .E THIS COMMAND TRANSFERS CONTROL TO "SCP", WHERE SYSTEM CONTROL STATEMENTS MAY BE PROCESSED. "SCP" PERMITS SELECTED ABBREVIATIONS FOR COMMON ROUTINE AND FILE NAMES, BUT IN OTHER REGARDS FUNCTIONS SIMILARLY TO "SCOPE". SEE "SCP/SCOPE" FOR DETAILS. .C SCP .E .H 3 SCRATCH CLEAR THE CONTENTS OF THE CURRENT FILE. SCRATCH .E THIS COMMAND SIMPLY ERASES ALL THE LINES IN THE CURRENT FILE. ALL OTHER INFORMATION, INCLUDING THE FILE NAME, SYSTEM, TABS, AND SO ON, IS MAINTAINED. .C SCRATCH .E .H 3 SUBMIT ROUTE A FILE TO THE INPUT QUEUE. SUBMIT .E THIS COMMAND SUBMITS THE SPECIFIED FILE TO THE INPUT QUEUE FOR BATCH PROCESSING. .IF NOS OUTPUT NORMALLY GOES TO THE TERMINAL WAIT QUEUE. HOWEVER, IF AN "EXPORT" USER NUMBER IS IN EFFECT (SEE THE "OPTION" COMMAND), THEN ANY OUTPUT IS PLACED IN THE QUEUE ASSOCIATED WITH THE USER NUMBER. .EF .C SUBMIT [] .E .L .LE SPECIFIES THE FILE NAME TO SUBMIT. IF NOT GIVEN, THE CURRENT FILE IS USED. .LX SENATOR RESPONDS WITH THE .IF NOS/BE 7 CHARACTER JOBNAME .EL 4 CHARACTER JSN .EF OF THE SUBMITTED JOB. .H 3 SYSTEM SELECT A SYSTEM. SYSTEM,FORTRAN,BASIC,DATA,SDATA,COMPASS,S80 COBOL,SYMPL,PASCAL ALGOL,FTN,USA,USP,USF,USD,USS,SNOBOL .IF NOS/BE SCOPE .EF .E THIS COMMAND CHANGES THE CURRENT SYSTEM TO THE SYSTEM SPECIFIED. IF NO SYSTEM IS GIVEN, SENATOR ASKS FOR IT. IF TABS ARE DEFINED, THEY ARE INITIALIZED AS WELL. .C SYSTEM [NEWSYS] .E .L .LE NEWSYS IS ANY VALID SENATOR SYSTEM. IF LEFT BLANK, A SYSTEM NAME IS REQUESTED. .LX "NEWSYS" MAY BE ONE OF THE FOLLOWING SYSTEMS: ALGOL, BASIC, COBOL, COMPASS, DATA, FORTRAN, FTN, PASCAL, .IF NOS/BE SCOPE, .EF SDATA, SNOBOL, SYMPL, S80, USA, USD, USF, USP OR USS. .H 4 SYSTEM ALGOL ALGOL .E THIS SYSTEM CALLS THE ALGOL 5 COMPILER ON A "RUN" OR "COMPILE. SOURCE LINES ARE ENTERED USING TABS, LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. .H 4 SYSTEM BASIC BASIC .E THIS SYSTEM CALLS THE BASIC 3 COMPILER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED FREE FORM BUT TABS MAY BE USED TOO (SEE "BASIC-TYPE" REFORMATTING"). LINE LENGTHS ARE 160 CHARACTERS AND LINE NUMBERS ARE STORED AT THE BEGINNING OF THE CURRENT FILE WHEN IT IS SAVED. (NOTE, AT PRESENT SENATOR DOES NOT FULLY SUPPORT BASIC 3. THE "RESEQ" COMMAND IS NOT CAPABLE OF HANDLING SOME OF THE BASIC 3.0 CONTROL STRUCTURES.) .H 4 SYSTEM COBOL COBOL .E THIS SYSTEM CALLS THE COBOL 5 COMPILER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED FREE FORM (SEE "COBOL-TYPE REFORMATTING"). LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. THIS SYSTEM SUPPORTS THE "DEBUG" OPTION WHICH CAUSES DEBUG CODE TO BE COMPILED WITH THE COBOL PROGRAM. REFER TO THE CYBER INTERACTIVE DEBUG REFERENCE MANUAL AND THE "DEBUG" CONTROL STATEMENT FOR FURTHER INFORMATION. .H 4 SYSTEM COMPASS COMPASS .E THIS SYSTEM CALLS THE COMPASS 3 ASSEMBLER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED FREE FORM (SEE "ASSEMBLER-TYPE REFORMATTING"). LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. .H 4 SYSTEM DATA DATA .E THIS SYSTEM HAS NO COMPILER ASSOCIATED WITH IT: IT IS USED FOR PURELY DATA TYPE FILES. TABS MAY BE USED DURING THE INPUT PROCESS, LINE LENGTHS ARE 160 CHARACTERS AND NO LINE NUMBERS ARE WRITTEN TO THE CURRENT FILE WHEN IT IS SAVED. .H 4 SYSTEM FORTRAN FORTRAN .E THIS SYSTEM CALLS THE FTN 4 COMPILER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED FREE FORM (SEE "FORTRAN-TYPE REFORMATTING"). LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. THIS SYSTEM SUPPORTS THE "DEBUG" OPTION TO INVOKE "PMD" FOR EASE OF PROGRAM DEBUGGING. .H 4 SYSTEM FTN FTN .E THIS SYSTEM CALLS THE FTN 5 COMPILER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED FREE FORM (SEE "FORTRAN-TYPE REFORMATTING"). LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. THIS SYSTEM SUPPORTS THE "DEBUG" OPTION TO INVOKE "PMD" FOR EASE OF PROGRAM DEBUGGING. OPTIONALLY, CYBER INTERACTIVE DEBUG CAN BE USED AS WELL FOR SERIOUS BUG FIXING. REFER TO THE "CID" REFERENCE MANUAL AND THE "DEBUG" CONTROL STATEMENT FOR MORE DETAILS. .H 4 SYSTEM PASCAL PASCAL .E THIS SYSTEM CALLS THE PASCAL 3 COMPILER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED USING TABS, LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. .IF NOS/BE .H 4 SYSTEM SCOPE SCOPE .E IN RESPONSE TO A "RUN" COMMAND THE CURRENT FILE IN ITS ENTIRETY IS TRANSMITTED TO INTERCOM FOR PROCESSING. THE CURRENT FILE MAY CONTAIN UP TO 300 DECIMAL WORDS OF CONTROL STATEMENTS. IF THE FILE IS TOO LARGE A DIAGNOSTIC IS ISSUED. LINE LENGTHS OF 80 CHARACTERS ARE ALLOWED. .EF .H 4 SYSTEM SDATA SDATA .E THIS SYSTEM HAS NO COMPILER ASSOCIATED WITH IT. IT IS USED FOR DATA FILES, BUT LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. LINE LENGTHS ARE THEREFORE LIMITED TO 72 CHARACTERS. TABS MAY BE USED DURING INPUT. .H 4 SYSTEM SNOBOL SNOBOL .E THIS SYSTEM CALLS THE SNOBOL 4 INTERPRETER ON A "RUN". SOURCE LINES ARE ENTERED USING TABS, LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. .H 4 SYSTEM SYMPL SYMPL .E THIS SYSTEM CALLS THE SYMPL 1 COMPILER ON A "RUN" OR "COMPILE". SOURCE LINES ARE ENTERED USING TABS, LINE LENGTHS ARE 72 CHARACTERS AND LINE NUMBERS ARE STORED IN COLUMNS 73-78 OF THE CURRENT FILE WHEN IT IS SAVED. .H 4 SYSTEM S80 S80 .E THIS SYSTEM HAS NO COMPILER ASSOCIATED WITH IT. IT IS ANALAGOUS TO SYSTEM "SDATA", EXCEPT THAT 80 COLUMNS PER LINE MAY BE USED. AS A RESULT, LINE NUMBERS ARE STORED IN COLUMNS 81-86 OF THE CURRENT FILE WHEN IT IS SAVED. TABS MAY BE USED DURING INPUT. .H 4 SYSTEMS USA, USD, USF, USP, USS USA,USD,USF,USP,USS .E THESE SYSTEMS ALLOW THE USER TO SUPPLY HIS OWN "RUN", "COMPILE", AND "EXECUTE" COMMANDS TO SPECIAL SYSTEMS THAT USE THE VARIOUS SENATOR TEXT REFORMATTING ROUTINES. EACH OF THESE SYSTEMS PROVIDES TEXT REFORMATTING THAT CORRESPONDS TO A REGULAR SENATOR SYSTEM: .C USA ASSEMBLER REFORMATTING (LIKE SYSTEM COMPASS) USD UNSEQUENCED DATA ( SYSTEM DATA ) USF FORTRAN ( SYSTEM FORTRAN) USP PASCAL ( SYSTEM PASCAL ) USS SEQUENCED DATA ( SYSTEM SDATA ) .E FOR EXAMPLE, TEXT ENTERED IN SYSTEM "USA" WILL BE PROCESSED EXACTLY AS IF IT WERE IN SYSTEM "COMPASS". (SEE THE DESCRIPTIONS OF THE VARIOUS SYSTEMS FOR TEXT REFORMATTING.) WHEN "RUN", "COMPILE", OR "EXECUTE" IS INVOKED FOR ONE OF THESE SYSTEMS, SENATOR CALLS A USER-SUPPLIED PROCEDURE TO PERFORM THE "RUN", "COMPILE", OR "EXECUTE". THE NAME OF THE PROCEDURE CALLED HAS THE FORM: .C CCCSSS .E WHERE "SSS" IS THE SYSTEM AND "CCC" IS EITHER "RUN", "COM", OR "EXE". FOR EXAMPLE, A "RUN" IN SYSTEM "USP" WILL CALL PROCEDURE "RUNUSP". THE PROCEDURE IS CALLED WITH SEVERAL POSITIONAL PARAMETERS. THE CALLING CONTROL STATEMENT LOOKS LIKE THIS: .C BEGIN,RUNSSS,,I,L,B,CFL,EFL,MAP. BEGIN,COMSSS,,I,L,B,CFL. BEGIN,EXESSS,,B,EFL,MAP. .E .L .LE I INPUT FILE. THIS PARAMETER WILL ALWAYS BE SUPPLIED. IF THE "RUN", "COMPILE", OR "EXECUTE" REFERS TO THE CURRENT FILE, THE CURRENT FILE WILL BE SAVED TO A SCRATCH FILE AND THAT FILE NAME SUPPLIED. .LE L LISTING FILE. A FILE NAME WILL ALWAYS BE SUPPLIED. .LE B BINARY FILE NAME. IF THE USER DID NOT SUPPLY A BINARY FILE NAME, SENATOR WILL GENERATE ONE. .LE CFL COMPILATION FIELD LENGTH. IF THE USER DID NOT SPECIFY A "CFL", THIS PARAMETER WILL BE NULL. .LE EFL EXECUTION FIELD LENGTH. IF NOT SUPPLIED, THIS FIELD WILL BE NULL. .LE MAP THIS PARAMETER WILL CONTAIN THE APPROPRIATE "LDSET,MAP=XXX." LETTERS, IF ANY. .LX SEE THE "RUN" COMMAND FOR FURTHER DESCRIPTIONS OF THESE PARAMETERS. THE IMPORTANT FEATURE IS THAT THESE PARAMETER VALUES ARE AVAILABLE TO THE USER VIA THE PROCEDURE CALLS TO USE AS HE WISHES. EXAMPLE: SUPPOSE WE HAVE A CROSS-ASSEMBLER NAMED *CROSS*. WE WISH TO USE SENATOR TO PERFORM THE TEXT EDITING, BUT WE WANT SENATOR TO CALL OUR ASSEMBLER WHEN THE "COMPILE" COMMAND IS GIVEN. FOR THIS EXAMPLE, SYSTEM "USA" IS USED, BECAUSE IT PROVIDES ASSEMBLER-TYPE REFORMATTING. IF NEEDED, WE COULD SUPPLY DIFFERENT TAB COLUMNS TO CONFORM TO THE CONVENTIONS OF OUR PARTICULAR ASSEMBLER. WE MUST THEN SUPPLY A PROCEDURE WHICH SENATOR WILL CALL TO ASSEMBLE THE TEXT. A SAMPLE PROCEDURE FOLLOWS: .C .PROC,COMUSA,I,L,B,CFL. GET,CROSS. IFE,$CFL$.NE.$$,FL. RFL,CFL. ENDIF,FL. REWIND,I,L,B. CROSS,I,L,B. .E .H 3 TAB SET THE TAB CHARACTER AND COLUMNS. TAB .E THIS COMMAND CHANGES (OR SETS) THE TAB CHARACTER AND/OR THE TAB COLUMNS. .C TAB [=T] [TABS] .E .L .LE T TO CHANGE THE TAB CHARACTER, SPECIFY A SINGLE NON-ALPHANUMERIC CHARACTER "T" AFTER THE EQUAL SIGN. IF ONLY THE TAB COLUMNS ARE TO BE CHANGED, THEN DO NOT SUPPLY THIS PARAMETER. .LE TABS THE NEW TAB COLUMNS, ENTERED IN ASCENDING ORDER, SEPARATED FROM EACH OTHER BY A . TO CLEAR ALL TAB COLUMNS, DO NOT SUPPLY ANY TABS FOLLOWING THE COMMAND. A MAXIMUM OF 13 TABS IS ALLOWED. .LX THUS, THERE ARE ACTUALLY FOUR BASIC FORMS OF THIS COMMAND .L .LE TAB CLEAR THE TAB CHARACTER AND COLUMNS. .LE TAB=; SET THE TAB CHARACTER TO A SEMI-COLON BUT DO NOT CHANGE THE SETTINGS OF THE TAB COLUMNS. IF NO TAB CHARACTER IS SUPPLIED AFTER THE EQUAL SIGN, THE TAB CHARACTER IS CLEARED. .LE TAB,T1,T2,... SET TAB COLUMNS "T1", "T2", ETC., BUT DO NOT CHANGE THE TAB CHARACTER. .LE TAB=;,T1,T2,... THIS LAST FORM REDEFINES EVERYTHING. .LX THE RESULTING TAB INFORMATION BECOMES ASSOCIATED WITH THE CURRENT FILE, AND OVERRIDES ANY DEFAULT TAB SETTINGS FOR THE CURRENT SYSTEM. IF TABS OTHER THAN THE DEFAULT FOR THE SYSTEM ARE EMPLOYED, IT IS RECOMMENDED THAT THE "SAVE" OPTION BE USED (SEE THE "OPTION" COMMAND). .H 3 TIME DISPLAY ELAPSED CPU TIME. TIME .E THIS COMMAND PRINTS THE TOTAL CPU TIME USED SINCE LOGIN, AS WELL AS THE CPU TIME USED SINCE THE LAST "TIME" COMMAND. IT IS USEFUL FOR TIMING VARIOUS SENATOR COMMANDS. .C TIME .E .H 3 USE USE ANOTHER FILE FOR SENATOR INPUT. USE .E THIS COMMAND CAUSES SENATOR TO READ INPUT FROM AN ALTERNATE FILE. THE FILE IS REWOUND AND INPUT IS ACCEPTED AND PROCESSED UNTIL // OR ANOTHER "USE" COMMAND IS ENCOUNTERED. THE COMMANDS "END", "SCP" AND "SCOPE" TEMPORARILY SUSPEND "USE" PROCESSING. WHEN "READY" OR "EDIT" IS ENTERED AT A LATER TIME "USE" PROCESSING RESUMES FROM THE POINT OF SUSPENSION. .C USE .E .L .LE SPECIFIES THE ALTERNATE FILE FROM WHICH SENATOR IS TO READ INPUT FROM. .LX IF THE "BRIEF" FLAG IS OFF, EACH LINE READ IS ECHOED TO THE TERMINAL PRECEDED BY "READING--". AT THE END OF THE READ OPERATION, THE MESSAGE "*USE* COMPLETE." IS PRINTED. .H 1 EDIT MODE. .E .H 2 INTRODUCTION TO "EDIT". EDIT,DEFS,CONVENTIONS,DEFINITIONS .E "EDIT" MODE CONTAINS THE PRIMARY STRING-EDITING COMMANDS. THESE COMMANDS CAN FIND, MANIPULATE, DELETE, SEPARATE, AND SHUFFLE STRINGS OF CHARACTERS AND LINES CONTAINING THOSE STRINGS. IT CAN BE USED TO CORRECT TYPOGRAPHICAL ERRORS, MODIFY VARIABLE NAMES, EXTRACT DESIRED COLUMNS FROM A LINE, OR WRITE SELECTED LINES TO A SCRATCH FILE. SOME GENERAL "EDIT" TERMINOLOGY IS NEEDED FOR A COMPLETE UNDERSTANDING OF ITS CAPABILITIES. FAMILIARITY WITH THE MANUAL CONVENTIONS PRESENTED IN CHAPTER ONE IS ALSO ASSUMED. THE FOLLOWING DEFINITIONS ARE IMPORTANT: .L .LE AN INTERNAL POINTER INDICATING THE CURRENT EDITING LINE. THIS POINTER MAY BE MOVED EXPLICITLY BY THE USER OR IMPLICITLY BY CERTAIN COMMANDS. IN SOME SITUATIONS IT IS POSSIBLE THAT THE DOES NOT POINT TO ANY LINE AT ALL. GENERALLY, EDIT COMMANDS APPLY TO THE LINE SPECIFIED BY THE . WHEN A REPETITION COUNT IS USED IN CONJUNCTION WITH AN EDIT COMMAND, OPERATIONS START AT THE AND WORK DOWN THE FILE TOWARDS . .LE THE RANGE OF LINES WITHIN WHICH ALL EDIT COMMANDS ARE CONSTRAINED TO OPERATE. THE DEFAULT RANGE IS 0-999999. THE "RANGE" COMMAND CAN BE USED TO SELECT AN ALTERNATE . .LE THE FIRST LINE OF THE CURRENT . IF THE DEFAULT IS IN EFFECT, IS EQUIVALENT TO "A". .LE THE LAST LINE OF THE CURRENT . IF THE DEFAULT IS IN EFFECT, IS EQUIVALENT TO "Z". .LE A GROUP OF CHARACTERS DEFINED BY A STARTING AND FINAL WITH ZERO OR MORE INTERVENING CHARACTERS. AN MAY NOT EXTEND TO MORE THAN ONE LINE. IF THE STARTING IS NULL, THE STARTS AT THE BEGINNING OF THE LINE. IF THE FINAL IS NULL, THE ENDS AT THE END OF THE LINE. CONSIDER THE FOLLOWING EXAMPLES (A SLASH IS OUR DELIMITER): .LE .LE .LE /1//2/ .LE //// (E.G., START OF LINE THRU ) .LE //// (E.G., THRU END OF LINE) .LE A LIST OF USER SPECIFIED COLUMN RANGES THAT LIMITS A COMMAND TO THOSE COLUMNS. FOR STRING SEARCHES, THE ZONES INDICATE WHERE THE IS TO BE FOUND. FOR OTHER COMMANDS, THE ZONES ARE THE COLUMNS TO BE MANIPULATED. FOR EXAMPLE, "Z2-14" INDICATES COLUMNS 2 THROUGH 14. .LE EACH LINE IN AN EDIT FILE MAY BE MARKED FOR FURTHER PROCESSING. VARIOUS COMMANDS MAY USE, SET, OR CLEAR THE . MARKING IS USEFUL FOR DEFINING A SCATTERED SET OF LINES FOR SUBSEQUENT "EDIT" COMMANDS TO OPERATE UPON. WHEN MARKED LINES ARE DISPLAYED, A COLON (":") IS SHOWN BETWEEN THE LINE NUMBER AND THE START OF THE ACTUAL TEXT. .LX .H 2 TEXT ENTRY IN "EDIT". EDIT .E LINE-NUMBERED ENTRIES ARE HANDLED IN PRECISELY THE SAME MANNER AS IN "READY" MODE. LINES ARE REFORMATTED IN AN IDENTICAL FASHION USING THE CURRENT TAB AND SYSTEM INFORMATION. LINES MAY BE DELETED BY ENTERING JUST THE LINE NUMBER. SEE CHAPTER ONE, "TEXT REFORMATTING AND THE CURRENT FILE" FOR RELATED INFORMATION. AFTER MANUALLY ENTERING A LINE, THE IS SET TO THAT LINE. .H 2 "EDIT" MODE COMMAND SYNTAX. EDIT SYNTAX .E WHEN "EDIT" IS READY TO ACCEPT A COMMAND FROM THE TERMINAL, A PROMPTING .IF NOS/BE STAR ("*") .EL QUESTION MARK ("?") .EF IS ISSUED. .IF NOS/BE NO PROMPT IS DISPLAYED IF THE "BRIEF" FLAG IS SET. .EF AN EDIT COMMAND CONFORMS TO THE FOLLOWING GENERAL SYNTAX: .C COMMAND [PARAMETERS] .E "COMMAND" IS THE EDIT COMMAND (OR ITS ABBREVIATION), AND "PARAMETERS" IS A LIST OF ZERO OR MORE EDIT PARAMETERS FOR THE COMMAND, SEPARATED FROM EACH OTHER BY A COMMA OR SPACE. THE FOLLOWING MAY APPEAR BEFORE AN EDIT COMMAND: .L .LE . A DOT TOGGLES THE "BRIEF" FLAG. .LE SPACES AND COMMAS LEADING SPACES AND COMMAS ARE IGNORED. .LX EDIT COMMAND SYNTAX DIFFERS FROM THAT DESCRIBED FOR "READY" MODE COMMANDS, AS DETAILED BELOW. PARAMETERS MAY BE SEPARATED BY ONE OR MORE SPACES OR COMMAS. IN CASES WHERE THE MEANING IS NOT AMBIGUOUS, THE SEPARATOR (E.G., THE COMMA OR SPACE) MAY BE OMITTED COMPLETELY. NOTE THAT THE DEFINITION OF A SEPARATOR IN "EDIT" MODE IS NOT THE SAME AS THAT OF A "READY" MODE . ALPHABETIC PARAMETERS MAY BE FULLY SPELLED OUT, OR ABBREVIATED DOWN TO A SINGLE LETTER. MANY PARAMETERS MAY BE NEGATED BY PRECEDING THEM WITH A MINUS SIGN. ANY NON-ALPHANUMERIC, NON-MINUS, AND NON-SEPARATOR CHARACTER MAY BE USED AS A DELIMETER FOR A OR . A OR MUST BE CONTIGUOUS AND THE SAME DELIMITER MUST BE USED THROUGHOUT. SOME COMMANDS MAY PERMIT AS MANY AS TWO S/. AN INPUT LINE MAY CONTAIN MORE THAN ONE EDIT COMMAND, PROVIDING THE COMMANDS ARE SEPARATED BY A SEMICOLON. THE USER IS NOT PROMPTED UNTIL ALL THE COMMANDS ON A LINE ARE PERFORMED (ALTHOUGH "VETO" IS HONORED). IF A SYNTAX ERROR IS DETECTED A QUESTION MARK IS DISPLAYED AND THE REST OF THE INPUT LINE IS IGNORED. USUALLY THE ERROR IS OBVIOUS AND THE CORRECTED LINE IS RE-ENTERED. IF THE ERROR IS NOT OBVIOUS, ENTER ANOTHER QUESTION MARK AND AN ELABORATION OF THE LAST SYNTAX ERROR IS PRINTED. .H 2 "EDIT" PARAMETER SYNTAX. EDIT SYNTAX .E THERE ARE THREE TYPES OF PARAMETERS WHICH MAY FOLLOW AN EDIT COMMAND: SPECIAL, DEFAULTABLE, AND NON-DEFAULTABLE. SPECIAL PARAMETERS ARE THOSE FOUND ON SPECIAL EDIT COMMANDS (SEE BELOW). THEY FOLLOW THE SAME RULES AS PARAMETERS FOUND ON "READY" MODE COMMANDS. THIS CLASS OF PARAMETER INCLUDES LINE NUMBERS AND RANGES. DEFAULTABLE PARAMETERS ARE THOSE WHOSE DEFAULT VALUE MAY BE SET BY THE "DEFAULT" COMMAND. THESE INCLUDE VARIOUS PROCESSING INDICATORS AND SEARCH SPECIFICATIONS. DEFAULT VALUES ARE MAINTAINED THROUGHOUT A SENATOR SESSION, EVEN IF OTHER MODES ARE USED. DEFAULTABLE PARAMETERS MAY BE SET TO "ON" OR SOME VALUE OR "OFF". NON-DEFAULTABLE PARAMETERS MUST BE SPECIFIED EACH TIME THEY ARE USED. SUCH PARAMETERS MAY BE SET TO "YES", "NO", OR NOT SPECIFIED. .H 3 DEFAULTABLE "EDIT" PARAMETERS. EDIT ALL,DISPLAY,TOP,UNIT,VETO,ZONE .E DEFAULTABLE PARAMETERS ARE THOSE WHOSE DEFAULT VALUE MAY BE SET BY THE USER (SEE THE "DEFAULT" COMMAND). THE DEFAULT SETTINGS AFFECT ALL COMMANDS WHERE THE PARAMETER IS MEANINGFUL. FAVORITE SETTINGS MAY BE RE-INITIALIZED WITH THE "SENATOR,NEW." CONTROL STATEMENT CALL. DEFAULTABLE PARAMETERS MAY BE SET "ON" OR "OFF". A PARAMETER GIVEN WITHOUT A PRECEDING MINUS SIGN IS SET "ON", A PRECEDING MINUS SIGN TURNS THE PARAMETER "OFF". THE "STATUS,E" COMMAND LISTS THE PARAMETERS THAT ARE CURRENTLY "ON". IN THE CASE OF THE "DISPLAY" AND "ZONE" PARAMETERS, THE RELEVANT COLUMN RANGES ARE LISTED. THE DEFAULTABLE PARAMETERS ARE: ALL, DISPLAY, TOP, UNIT, VETO, AND ZONE. .H 4 ALL DO AN EDIT COMMAND AS OFTEN AS POSSIBLE. ALL .E "ALL" (OR "A") IS A MEANS OF SPECIFYING AN INFINITE COUNT ON EDIT COMMANDS. IF A COUNT IS GIVEN (SEE THE SECTION ON NON-DEFAULTABLE PARAMETERS) IT OVERRIDES THE "ALL" PARAMETER. DO NOT CONFUSE THE EDIT PARAMETER "A" WITH THE "READY" MODE LINE NUMBER "A"! .H 4 DISPLAY DISPLAY ALL OR PART OF A LINE. DISPLAY .E "DISPLAY" (OR "D") INDICATES THAT RELEVANT LINES ARE TO BE PRINTED DURING COMMAND PROCESSING. UP TO 10 COLUMN RANGES MAY IMMEDIATELY FOLLOW THE "DISPLAY" PARAMETER. THESE COLUMN RANGES MUST BE SEPARATED BY COMMAS - SPACES OR OTHER CHARACTERS TERMINATE THE "DISPLAY" PARAMETER. EACH COLUMN RANGE IS DENOTED BY TWO COLUMN NUMBERS SEPARATED BY A DASH. IF THE COLUMN NUMBER BEFORE THE DASH IS MISSING, THE START OF THE LINE IS USED. MISSING TRAILING COLUMN NUMBERS DEFAULT TO THE END OF THE LINE. IF A SINGLE COLUMN IS DESIRED, DO NOT USE A DASH AT ALL. WITHIN A COLUMN RANGE, THE COLUMN NUMBER TO THE RIGHT OF THE DASH MUST BE GREATER THAN THE ONE TO THE LEFT. A REPRESENTATIVE "DISPLAY" PARAMETER WOULD BE: "D1-9,26,55-72". "DISPLAY" WITHOUT ANY TRAILING COLUMN RANGES WILL DISPLAY THE ENTIRE LINE. IF THE PARAMETER IS PRECEDED BY A MINUS SIGN (THAT IS, DO NOT DISPLAY), IT IS ASSUMED THAT NO COLUMN RANGES FOLLOW THE PARAMETER. .H 4 TOP START AT . TOP .E THE "TOP" (OR "T") PARAMETER INDICATES THAT THE IS TO BE MOVED TO THE FIRST LINE OF THE () BEFORE EDIT COMMANDS ARE EXECUTED. SEE THE "TOP" COMMAND FOR DETAILS. .H 4 UNIT CONSIDER ONLY DELIMITED STRINGS. UNIT .E IF "UNIT" (OR "U") IS SPECIFIED, STRING SEARCHES ARE LIMITED TO THOSE S THAT ARE BOUNDED BY EITHER NON-ALPHANUMERICS OR BEGINNING OR END OF THE LINE. FOR INSTANCE, IF UNIT IS "ON", THE "YES" WILL NOT BE FOUND IN THE "YESTERDAY" BECAUSE THE "S" IN "YESTERDAY" IS FOLLOWED BY "T". IF AN ELLIPSIS SEARCH IS PERFORMED, BOTH PARTS OF THE MUST FOLLOW THE ABOVE RULE FOR THE TO MATCH. .H 4 VETO VETO LINES OR CHANGES. VETO .E "VETO" (OR "V") PROVIDES A MEANS FOR THE USER TO APPROVE OR REJECT A PARTICULAR EDIT CORRECTION. WHEN A LINE IS ALTERED BY AN EDIT COMMAND, THE MODIFIED LINE IS DISPLAYED FOR VETO APPROVAL. IF THE CHANGE IS APPROVED, IT IS APPLIED TO THE FILE. IF THE LINE WILL BE CHANGED SEVERAL TIMES BY THE COMMAND, IT IS RE-DISPLAYED FOR EACH CHANGE. SEVERAL RESPONSES ARE LEGAL WHEN "EDIT" IS AWAITING A VETO RESPONSE. ONLY THE FIRST CHARACTER OF THESE RESPONSES IS NEEDED. THE RESPONSES ARE .L .LE YES APPROVE THE EDIT ACTION. .LE NO VETO THE EDIT ACTION. .LE YES,NN APPROVE THE NEXT "NN" EDIT ACTIONS. .LE NO,NN VETO THE NEXT "NN" EDIT ACTIONS. .LE CONTIN APPROVE ALL FOLLOWING EDIT ACTIONS. IF "DISPLAY" IS "OFF", THE LINES ARE NOT DISPLAYED. .LE QUIT ANSWERS "NO", AND TERMINATES THE COMMAND. .LX NOTE, ANY OTHER ENTRY CAUSES "EDIT" TO REQUEST A VALID "VETO" TYPE-IN. PERMITTED RESPONSES ARE PRINTED AT THE TERMINAL. IF A "YES" OR "NO" RESPONSE IS GIVEN WITH A COUNT, THAT COUNT IS USED ONLY FOR THE REMAINDER OF THE GIVEN COMMAND. IF "VETO" IS SPECIFIED ON A COMMAND THAT DOES NOT ALTER THE TEXT OF A LINE, THE LINE IS DISPLAYED AND VETO APPROVAL IS REQUIRED BEFORE THE COMMAND IS PERFORMED - "ERASE" AND "FIND" ARE EXAMPLES OF THIS SITUATION. .H 4 ZONE SPECIFY EDITING ZONES. ZONE .E THE "ZONE" (OR "Z") PARAMETER IS USED TO SPECIFY THE USED BY THE COMMAND. THESE ZONES ARE USUALLY THE COLUMNS TO BE SEARCHED BY A STRING OR ELLIPSIS SEARCH, BUT SOME COMMANDS USE THE ZONES FOR OTHER PURPOSES. WHEN USED WITH A STRING/ELLIPSIS SEARCH, THE COLUMNS GIVEN ARE THOSE IN WHICH THE SOUGHT-AFTER / MUST BEGIN. WHEN SEARCHING, ZONES ARE USED TO RESTRICT THE SEARCH OR SIMPLY SPEED UP THE SEARCHING PROCESS. "ZONE" HAS THE SAME FORMAT AS THE "DISPLAY" PARAMETER EXCEPT THAT ALL COLUMN ZONES MUST BE IN INCREASING ORDER. .H 3 NON-DEFAULTABLE "EDIT" PARAMETERS. EDIT LIMIT,MARK,REMARK,NUMBER .E THE NON-DEFAULTABLE PARAMETERS DIFFER SOMEWHAT IN FORM AND USAGE FROM THE DEFAULTABLE PARAMETERS. THESE PARAMETERS MUST BE SPECIFIED EACH TIME THEY ARE NEEDED. MOST OF THE NON-DEFAULTABLE PARAMETERS MAY BE "ON", "NEGATED", OR "NOT RELEVANT". THE NON-DEFAULTABLE PARAMETERS ARE: LIMIT, MARK, REMARK, AND NUMBER. .H 4 LIMIT LIMIT AN EDIT COMMAND TO MARKED LINES. LIMIT .E THE "LIMIT" (OR "L") PARAMETER LIMITS THE LINES TO BE EDITED TO THOSE THAT HAVE THEIR INDICATOR SET. IF NEGATED, THE COMMAND OPERATES ONLY UPON UNMARKED LINES. .H 4 MARK MARK THE SUCCESSFUL LINES. MARK .E THE "MARK" (OR "M") PARAMETER CAUSES ALL ACCEPTED LINES TO BE MARKED. MARKED LINES MAY BE MARKED AGAIN. NEGATING THE "MARK" PARAMETER CLEARS THE FLAG ON ACCEPTED LINES. UNACCEPTED LINES ARE NOT AFFECTED BY THE "MARK" PARAMETER. WHEN MARKED LINES ARE DISPLAYED, A COLON (":") IS SHOWN BETWEEN THE LINE NUMBER AND THE START OF THE ACTUAL TEXT. .H 4 REMARK MARK A SUBSET OF MARKED LINES. REMARK .E WHEN USED IN CONJUNCTION WITH THE "LIMIT" PARAMETER, "REMARK" (OR "R") MARKS SUCCESSFUL LINES AND CLEARS UNACCEPTED LINES. THIS PARAMETER IS USEFUL FOR DEFINING SUBSETS OF SETS OF MARKED OR UNMARKED LINES. "REMARK" MAY NOT BE NEGATED. .H 4 NUMBER INDICATE A REPITITION COUNT. NUMBER .E A NUMBER MAY BE SUPPLIED AS A PARAMETER. THIS COUNT IS THE NUMBER OF TIMES THE COMMAND IS TO BE PERFORMED. IF OR IS ENCOUNTERED BEFORE THE COUNT IS EXHAUSTED, "TOP" OR "BOT" IS DISPLAYED. THE COUNT GIVEN IS THE NUMBER OF SUCCESSFUL OPERATIONS TO BE PERFORMED. IF A "VETO" "NO" IS ENTERED, THE COUNT IS NOT DECREMENTED. .H 2 SPECIAL "EDIT" COMMANDS. GOTO,RANGE .E THE FOLLOWING COMMANDS ARE SPECIAL IN "EDIT" MODE. THEY ARE TERMED "SPECIAL" ONLY BECAUSE THEIR ASSOCIATED PARAMETERS (IF ANY) CONFORM TO THE RULES LAID DOWN FOR "READY" MODE PARAMETERS. OTHERWISE, THEY MAY BE TREATED AS NORMAL EDIT COMMANDS. GENERALLY, THOUGH, THESE COMMANDS SHOULD BE ENTERED ON A ONE-PER-LINE BASIS. THE NOTABLE EXCEPTIONS ARE THE "GOTO" AND "RANGE" COMMANDS - OTHER EDIT COMMANDS MAY BE SPECIFIED AFTER EITHER (REMEMBER TO SEPARATE INDIVIDUAL COMMANDS BY A SEMICOLON). THE SPECIAL COMMANDS ARE: END, GOTO, RANGE, SCP, SCOPE, AND STATUS. .H 3 END EXIT TO THE TIMESHARING EXECUTIVE. .E THIS COMMAND TRANSFERS CONTROL FROM "EDIT" TO THE TIMESHARING EXECUTIVE. .H 3 GOTO EXPLICITLY POSITION THE . GOTO .E THIS COMMAND MOVES THE TO A GIVEN LINE. A SINGLE (OR "A" OR "Z") FOLLOWS THE COMMAND. THE IS MOVED TO THAT LINE. AN ERROR MESSAGE IS ISSUED IF THE LINE DOES NOT EXIST. EXAMPLES: .L .LE G1224 MOVE THE TO LINE NUMBER 1224. IN THIS CASE, NOTICE THAT THE SEPARATING COMMA OR SPACE IS NOT NEEDED. .LE G,A SET THE TO . IN THIS CASE, THE SEPARATOR IS NEEDED FOR THE SAKE OF THE SYNTAX. .LX .H 3 RANGE SPECIFY AN . RANGE .E THIS COMMAND DEFINES THE AND LINE OF THE EDIT FILE FOR ALL SUBSEQUENT EDITING COMMANDS. LINES OUTSIDE THIS ARE IGNORED DURING EDIT SEARCHES AND OPERATIONS. A FORWARD MAY BE ENTERED AFTER THIS COMMAND. "A" AND "Z" MAY BE USED TO INDICATE THE FIRST AND LAST LINES OF THE CURRENT EDIT FILE. IF NO IS GIVEN, 0-999999 IS ASSUMED. IF THE LIES OUTSIDE THE NEW RANGE, IT IS MOVED TO . OTHERWISE, IT IS NOT REPOSITIONED AT ALL. EXAMPLES: .L .LE RA SET THE TO 0-999999. .LE RA,-22030 SET THE TO "A" THROUGH LINE 22030. .LE RA,450- SET THE TO LINES 450 THROUGH "Z". .LE RA,100-305 SET THE TO LINES 100 THROUGH 305 (INCLUSIVE). .LX .H 3 READY EXIT TO "READY" MODE. .E THIS COMMAND TRANSFERS CONTROL FROM "EDIT" TO "READY" MODE. .H 3 SCOPE ENTER "SCOPE" MODE. .E THIS COMMAND TRANSFERS CONTROL TO "SCOPE", WHERE SYSTEM CONTROL STATEMENTS MAY BE PROCESSED. SEE "SCP/SCOPE" FOR DETAILS. .H 3 SCP ENTER "SCP" MODE. .E THIS COMMAND TRANSFERS CONTROL TO "SCP", WHERE SYSTEM CONTROL STATEMENTS MAY BE PROCESSED. "SCP" PERMITS SELECTED ABBREVIATIONS FOR COMMON ROUTINE AND FILE NAMES, BUT IN OTHER REGARDS FUNCTIONS SIMILARLY TO "SCOPE". SEE "SCP/SCOPE" FOR DETAILS. .H 2 PRIMARY "EDIT" COMMANDS. .E THE PRINCIPAL STRING EDITING COMMANDS ARE DESCRIBED BELOW. EACH DESCRIPTION EXPLAINS THE FUNCTIONS AND LIMITATIONS OF THE PARTICULAR COMMAND. A LIST OF REQUIRED AND PERMITTED EDIT PARAMETERS FOLLOWS, AS WELL AS WHETHER OR NOT THE COMMAND MAY BE REPEATED (SEE THE "AGAIN" COMMAND). FINALLY, SOME EXAMPLES WITH A BRIEF EXPLANATION ARE PRESENTED. ALL EXAMPLES USE THE MINIMUM ABBREVIATION FOR THE EDIT COMMAND AND ITS PARAMETERS. THE DELIMITER USED IS THE SLASH, AND NO DEFAULT PARAMETER SETTINGS ARE IN EFFECT - THEY ARE SHOWN EXPLICITLY. OUR SEPARATOR IS A COMMA, AND, WHERE LEGAL, IT IS OMITTED COMPLETELY. .H 3 AGAIN REPEAT LAST REPEATABLE "EDIT" COMMAND. AGAIN .E THIS COMMAND REPEATS THE LAST REPEATABLE COMMAND. PARAMETERS MAY FOLLOW THE "AGAIN" COMMAND THAT WILL SUPPLEMENT THE PARAMETERS ON THE OLD COMMAND. ANY PARAMETER EXCEPT A / MAY BE USED, PROVIDED IT WAS PERMITTED ON THE COMMAND BEING REPEATED. USING THIS COMMAND IS EXACTLY EQUIVALENT TO RETYPING THE OLD COMMAND LINE AND ADDING THE PARAMETERS GIVEN ON THE AGAIN COMMAND. A COMMAND MAY BE REPEATED MORE THAN ONCE. PARAMETERS GIVEN ON ANY PREVIOUS "AGAIN"S ARE ADDED TO THE REPEATED COMMAND. IF A PARAMETER IS SPECIFIED MORE THAN ONCE, EITHER EXPLICITLY ON A COMMAND OR IMPLICITLY THROUGH THE "AGAIN" COMMAND, THE MOST RECENTLY ENCOUNTERED SPECIFICATION IS USED. .C REQUIRED: NONE. PERMITTED: ANY REPEATABLE PARAMETER MAY BE USED PROVIDED IT WAS PERMITTED ON THE REPEATABLE COMMAND. REPEATABLE: NOT APPLICABLE. .E EXAMPLES: .L .LE A REPEAT (PRECISELY) THE LAST REPEATABLE EDIT COMMAND. .LE A,4 DO THE LAST REPEATABLE COMMAND AND ADD THE SPECIFIED COUNT OF FOUR TO IT. .LX .H 3 BLANK BLANK SELECTED PORTIONS OF A LINE. BLANK .E "BLANK" CHANGES *EITHER* A / *OR* SELECTED ZONES IN A LINE TO BLANKS (OR SPACES). IF NO / IS SUPPLIED WITH THE COMMAND THEN ONE OR MORE ZONES AND/OR ZONE RANGES MUST BE SPECIFIED; THOSE COLUMNS ARE THEN BLANKED. IF A / IS PRESENT THEN THAT / IS REPLACED WITH SPACES (ANY "ZONE" PARAMETER SIMPLY LIMITS EDIT'S SEARCH FOR THE / IN THE USUAL MANNER). THE LINE IS NOT SHIFTED IN ANY WAY BY THIS COMMAND. THUS, "BLANK"ING BY ZONE AND "BLANK"ING BY / ARE MUTUALLY EXCLUSIVE OPERATIONS. .C REQUIRED: ONE / OR "ZONE". PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "VETO", "ZONE", AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE BL/ER< TO . BOTTOM .E "BOTTOM" MOVES THE TO THE BOTTOM OF THE CURRENT EDITING RANGE. IF THE IS EMPTY, "RANGE EMPTY" IS ISSUED AND THE POINTER IS NOT MOVED. THE LINE MAY BE DISPLAYED AND MARKED. .C REQUIRED: NONE. PERMITTED: "DISPLAY" AND "MARK". REPEATABLE: NO. .E EXAMPLES: .L .LE B,D3-24,36-55 MOVE TO AND DISPLAY ZONES 3-24 AND 36-55 OF THE LINE. .LE B-D,M MOVE TO , SET THE INDICATOR BUT DO NOT DISPLAY THE LINE. .LX .H 3 CHANGE CHANGE A OR . CHANGE .E "CHANGE" IS USED TO CHANGE GIVEN S OR . IT IS PROBABLY THE MOST IMPORTANT COMMAND IN "EDIT". A OR MAY BE CHANGED TO A , OR AN MAY BE CHANGED TO ANOTHER . THE LATTER FEATURE ALLOWS A FORM OF CONTEXT-SENSITIVE STRING MANIPULATION. IT IS ILLEGAL TO CHANGE A TO AN . .C REQUIRED: TWO S OR . PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "VETO", "ZONE", AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE C/YES/NO/A,T,U,V CHANGE ALL UNIT OCCURRENCES OF THE "YES" TO "NO", BEGINNING AT , AND WITH VETO. .LE C/TAG2.1/TAG5/A,-T,Z1-36 CHANGE EVERY "TAG2.1" TO "TAG5", STARTING AT THE CURRENT POSITION OF THE , WHILE LIMITING THE SEARCH TO COLUMNS 1-36. .LE C/'//'/"//"/27,V HERE WE HAVE AN ELLIPSIS TYPE "CHANGE". EFFECTIVELY, S BOUNDED BY SINGLE QUOTES ARE CHANGED TO AN IDENTICAL BUT SURROUNDED BY DOUBLE QUOTES. VETO IS REQUESTED, AND A MAXIMUM OF 27 OPERATIONS ARE PERFORMED. .LE C/ / /Z14-21,A,L LIMITING THE CHANGE TO ONLY LINES WITH THEIR INDICATOR SET, SQUEEZE OUT 4 SPACES IN COLUMNS 14-21 OF ALL MARKED LINES. IN THIS CASE, THE "REMOVE" COMMAND IS ACTUALLY MORE APPROPRIATE, BUT IT HASN'T BEEN INTRODUCED YET. .LX .H 3 CLEAR CLEAR INDICATORS. CLEAR .E "CLEAR" REMOVES THE INDICATORS ON THE GIVEN LINES. STARTING AT THE LINE INDICATED BY THE , ALL ACCEPTABLE LINES HAVE THEIR FLAGS CLEARED. A STRING/ELLIPSIS SEARCH MAY BE USED, AS WELL AS "VETO". THE IS *NOT* MOVED BY THIS COMMAND. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "LIMIT", "REMARK", "TOP", "UNIT", "VETO", "ZONE", /, AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE CLE,A,T CLEAR ALL INDICATORS IN THE , FROM THRU . .LE CLE/INTEGER/U,A CLEAR THE FROM ALL LINES CONTAINING THE "INTEGER" AS A UNIT. .LX .H 3 DEFAULT SET DEFAULT EDIT PARAMETERS. DEFAULT .E THE CURRENT PARAMETER DEFAULTS ARE MODIFIED AS INDICATED ON THE "DEFAULT" COMMAND AND THE RESULTS ARE MADE THE NEW DEFAULTS. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "TOP", "UNIT", "ZONE", AND "VETO". REPEATABLE: NO. .E EXAMPLES: .L .LE DEF,V,U,A-D DEFAULT "VETO", "UNIT", AND "ALL" TO "ON". TURN "DISPLAY" "OFF". .LE DEF,-V,D20-30 SET THE DEFAULT "DISPLAY" ZONES TO COLUMNS 20-30 AND TURN "VETO" "OFF". .LX .H 3 DOWN MOVE THE DOWN TOWARDS . DOWN .E "DOWN" MOVES THE DOWN THE FILE. IF "LIMIT" OR A IS GIVEN, ONLY LINES SATISFYING THOSE CONDITIONS ARE COUNTED IN THE "DOWN". MARKING AND REMARKING ARE PERMITTED. NOTE: "VETO" IS IGNORED BY THIS COMMAND. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "ZONE", /, AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE D MOVE THE DOWN ONE LINE. .LE D,2,L MOVE THE DOWN TO THE SECOND LINE WITH ITS INDICATOR SET. .LE D/ATLANTIC MOVE THE DOWN UNTIL THE NEXT OCCURRENCE OF "ATLANTIC". .LX .H 3 ERASE DELETE LINES FROM THE CURRENT FILE. ERASE .E "ERASE" REMOVES ONE OR MORE LINES FROM THE EDIT FILE. DELETIONS START FROM THE CURRENT AND MAY BE RESTRICTED TO MARKED, UNMARKED, OR LINES CONTAINING A GIVEN /. THIS IS A DANGEROUS COMMAND AND SHOULD BE USED WITH CARE. "VETO" IS RECOMMENDED. WHEN A LINE IS ERASED, THE IS MOVED TO THE NEXT LINE IN THE FILE. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "LIMIT", "TOP", "UNIT", "VETO", "ZONE", /, AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE ERA DELETE THE LINE POINTED TO BY THE . .LE ERA,A,T,V-L STARTING AT , ERASE ALL LINES WITHOUT THEIR INDICATOR SET, SUBJECT TO VETO APPROVAL. .LE ERA/***(/2,Z1-4 DELETE THE NEXT 2 LINES HAVING THE "***(" IN COLUMNS 1-4. .LX .H 3 FIND FIND A OR . FIND .E STARTING AT THE LINE AFTER THE , "FIND" SEARCHES DOWN THROUGH THE FILE FOR A GIVEN /. THE IS LEFT AT THE LAST APPROVED LINE. MARKING OPERATIONS ARE PERMITTED. .C REQUIRED: /. PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "VETO", "ZONE", AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE F/CARBON DIOXIDE/V,U SEARCH FOR THE INDICATED UNIT . A "VETO" "NO" CAN BE ENTERED UNTIL THE DESIRED OCCURRENCE IS LOCATED, AFTER WHICH A "QUIT" CAN BE TYPED TO TERMINATE THE "FIND". THE IS THEN POSITIONED AT THE APPROPRIATE LINE. .LE F/(//)/A,V,M FIND ALL LINES CONTAINING THE "( ... )". IF VETO APPROVAL IS GRANTED, THEN THE LINE IS MARKED. .LE F/SUBSET/A,T,V,L,R STARTING FROM , LIMITED TO LINES WITH THEIR INDICATOR SET, AND WITH VETO ENABLED, FIND ALL OCCURRENCES OF THE "SUBSET". BECAUSE THE "REMARK" PARAMETER IS SPECIFIED, LINES WHICH ARE GRANTED VETO APPROVAL HAVE THEIR FLAG SET (SO WHAT IF THEY'RE ALREADY SET!); UNACCEPTED LINES HAVE THEIR S CLEARED. .LX .H 3 INSERT INSERT A AT A SPECIFIC COLUMN. INSERT .E THIS COMMAND INSERTS A SPECIFIED INTO A LINE AT A SPECIFIC COLUMN. THE REST OF THE LINE IS SHIFTED TO THE RIGHT TO MAKE ROOM FOR THE . .C REQUIRED: ONE "ZONE" AND ONE . PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "VETO", AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE I/. /Z1,A,T PLACE THE THREE CHARACTERS ". " IN COLUMNS 1-3 OF EVERY LINE IN THE . EACH LINE IS SHIFTED RIGHT TO MAKE ROOM FOR THE INSERTED . .LE I/NOW IS THE TIME/Z24 INSERT THE AT COLUMN 24. .LX .H 3 MARK SET INDICATORS. MARK .E "MARK" PERFORMS EXACTLY LIKE THE "CLEAR" COMMAND EXCEPT THE LINES ARE MARKED. SEE "CLEAR" FOR DETAILS. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "LIMIT", "REMARK", "TOP", "UNIT", "VETO", "ZONE", /, AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE MAR SET THE INDICATOR FOR THE LINE POINTED TO BY THE . .LE MAR/ABC/A MARK ALL LINES CONTAINING THE SPECIFIED "ABC". .LX .H 3 OVERLAY OVERLAY A AT A SPECIFIC COLUMN. OVERLAY .E "OVERLAY" PLACES A IN A LINE STARTING ON A PRECISE COLUMN. ANY CHARACTERS PREVIOUSLY IN THE AREA ARE OVERWRITTEN; THE LINE IS NOT SHIFTED. IF A IS OVERLAYED BEYOND THE END OF THE EXISTING LINE, BLANKS ARE APPENDED TO THE LINE OUT TO THE OVERLAYING . .C REQUIRED: ONE AND ONE "ZONE". PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "VETO", AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE O/FROGS LACKING LIPOPHORES ARE BLUE/Z30 THE IS OVERLAYED STARTING AT COLUMN 30. .LE O/SPECIFIC GRAVITY = /Z45,V-L CONSTRAINED TO UNMARKED LINES AND SUBJECT TO VETO APPROVAL, THE IS PLACED AT COLUMN 45 OF THE LINE. .LX .H 3 PRINT DISPLAY LINES IN THE CURRENT FILE. PRINT .E STARTING AT THE CURRENT EDIT LINE, THIS COMMAND DISPLAYS LINES IN THE CURRENT FILE. THE IS NOT MOVED. NOTE: "VETO" IS IGNORED BY THIS COMMAND. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", AND A COUNT. REPEATABLE: NO. .E EXAMPLES: .L .LE P PRINT THE LINE IMPLIED BY THE . .LE P4T PRINT 4 LINES BEGINNING AT . .LE P,A,T,L FROM , PRINT ALL LINES WITH THEIR FLAG SET. .LE P,A,D70-72 PRINT ALL LINES FROM THE CURRENT POSITION, BUT SHOW ONLY THE THREE COLUMNS 70-72. .LX A DISPLAYED LINE CONSISTS OF A SIX-DIGIT LINE NUMBER FOLLOWED BY A ONE-CHARACTER INDICATOR AND THEN THE TEXT LINE. THE COLUMN IS BLANK IF THE LINE IS NOT MARKED - OTHERWISE IT CONTAINS A COLON (:). .H 3 REMOVE REMOVE SELECTED PORTIONS OF A LINE. REMOVE .E "REMOVE" IS USED TO REMOVE *EITHER* A / *OR* SELECTED ZONES FROM A LINE. IF NO / IS SUPPLIED WITH THE COMMAND THEN ONE OR MORE ZONES AND/OR ZONE RANGES MUST BE SPECIFIED; THOSE COLUMNS ARE THEN REMOVED. IF A / IS PRESENT THEN THAT / IS REMOVED (ANY "ZONE" PARAMETER SIMPLY LIMITS EDIT'S SEARCH FOR THE / IN THE USUAL MANNER). THE LINE IS SHIFTED LEFT AFTER THE COMMAND TO FILL THE BLANK SPACE CREATED. THUS, "REMOVE"ING BY ZONE AND "REMOVE"ING BY / ARE MUTUALLY EXCLUSIVE OPERATIONS. .C REQUIRED: ONE / OR "ZONE". PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "VETO", "ZONE", AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE R/GRABAGE REMOVE THE "GRABAGE" FROM THE LINE AT THE . .LE R/THI///D REMOVE THE INDICATED AND DISPLAY THE RESULT. .LE R Z1,50 REMOVE COLUMNS 1 AND 50 FROM THE LINE. .LX .H 3 SUFFIX ADD A TO THE END OF A LINE. SUFFIX .E "SUFFIX" ADDS TEXT TO THE END OF A LINE. THE GIVEN IS SIMPLY APPENDED TO THE END OF THE CURRENT LINE. .C REQUIRED: ONE . PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "VETO" AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE S/. ADD A DOT TO THE END OF THE LINE. .LE S/PARTICLE INTERACTION./V SUFFIX THE WITH VETO. .LE S/)/A ADD A RIGHT PARENTHESIS TO THE END OF ALL LINES IN THE . .LX .H 3 TOP SET THE TO . TOP .E "TOP" MOVES THE TO THE TOP OF THE CURRENT EDITING RANGE. IF THE IS EMPTY, THE MESSAGE "RANGE EMPTY" IS ISSUED AND THE POINTER IS SET TO THE TOP OF THE FILE. THE TOP LINE MAY BE DISPLAYED AND MARKED. .C REQUIRED: NONE. PERMITTED: "DISPLAY" AND "MARK". REPEATABLE: NO. .E EXAMPLES: .L .LE T,D MOVE THE TO AND DISPLAY THE LINE. .LE T,M,-D GOTO , MARK THE LINE, BUT DO NOT DISPLAY IT. .LX .H 3 UP MOVE THE UP TOWARDS . UP .E "UP" MOVES THE UP THE FILE. THE PROCESSING IS THE SAME AS "DOWN" EXCEPT THE POINTER GOES UP THE FILE. SEE "DOWN" FOR PROCESSING DETAILS. .C REQUIRED: NONE. PERMITTED: "ALL", "DISPLAY", "LIMIT", "MARK", "REMARK", "TOP", "UNIT", "ZONE", /, AND A COUNT. REPEATABLE: YES. .E EXAMPLES: .L .LE U MOVE THE UP ONE LINE. .LE U/FROG/L,3 MOVE THE TOWARDS , STOPPING AT THE THIRD MARKED LINE CONTAINING THE "FROG". .LX .H 3 ZONE SHOW ZONE RANGE OF A /. ZONE .E "ZONE" SERVES TO PRINT THE ZONES OCCUPIED BY A OR . THIS COMMAND OPERATES ONLY ON THE LINE INDICATED BY THE AND DISPLAYS THE BEGINNING AND ENDING COLUMNS OF ALL OCCURRENCES OF THE GIVEN /. THIS INFORMATION IS PARTICULARLY NICE WHEN USED IN CONJUNCTION WITH THE "BLANK", "INSERT", "OVERLAY" AND "REMOVE" COMMANDS. .C REQUIRED: ONE OR . PERMITTED: "DISPLAY", "UNIT", AND "ZONE". REPEATABLE: NO. .E EXAMPLES: .L .LE Z/*/Z50- DISPLAY ZONE RANGE FOR ALL OCCURRENCES OF THE '*'. THE MUST INDICATE THE LINE TO USE. THE "ZONE" PARAMETER (Z50-) SPECIFIED WITH THE "ZONE" COMMAND LIMITS THE STRING SEARCH TO COLUMNS 50 AND BEYOND. .LE Z/// THIS COMMAND EFFECTIVELY DETERMINES THE LENGTH IN CHARACTERS OF THE CURRENT LINE. THE AS SPECIFIED INDICATES BEGINNING OF LINE THROUGH END OF LINE (NOTE THE TRAILING DELIMITER HAS BEEN OMITTED). .LX .H 2 MACRO DEFINE AN EXECUTABLE SEQUENCE OF "EDIT" COMMANDS. MACRO,X .E A MACRO IN "EDIT" MODE PERFORMS A FUNCTION SIMILAR TO THE "AGAIN" COMMAND. HOWEVER, WHEREAS THE "AGAIN" COMMAND IS USEFUL FOR PERFORMING A SINGLE EDIT COMMAND A NUMBER OF TIMES, A MACRO CAN REPETITIVELY EXECUTE A NUMBER OF EDIT COMMANDS. FIRST, THE SEQUENCE OF COMMANDS MUST BE DEFINED. THE BODY OF THE MACRO (E.G., THE PRE-DEFINED EDIT COMMANDS) IS THEN INVOKED BY TYPING THE NAME OF THE MACRO AS AN EDIT COMMAND. A MACRO IS ESTABLISHED BY TYPING THE WORD "MACRO" WHEN "EDIT" IS READY FOR INPUT, FOLLOWED BY ANY NUMBER OF EDIT COMMANDS, TERMINATED WITH ANOTHER "MACRO" ENTRY. ONCE THE SECOND "MACRO" LINE HAS BEEN ENTERED, "EDIT" IS READY TO PROCESS NORMAL EDIT COMMANDS, OR THE MACRO JUST DEFINED. TO INVOKE THE MACRO, THE EDIT COMMAND "X" IS ENTERED. "X" IS TREATED LIKE ANY OTHER COMMAND, SO THAT PARAMETERS (FOR INSTANCE, A REPETITION COUNT) MAY BE SUPPLIED IF DESIRED. PROVISIONS ARE MADE FOR ONE AND ONLY ONE MACRO, AND ITS NAME IS "X". A SAMPLE MACRO DEFINITION FOLLOWS: .C MACRO D,L D C/123.456/122.9/VETO MACRO .E THUS, THE MACRO DEFINITION CONSISTS OF THREE EDIT COMMANDS. TYPING "X" AT A LATER TIME INITIATES THE EXECUTION OF THESE COMMANDS. THIS EXAMPLE IS NOT INTENDED TO BE USEFUL, THAT'S YOUR JOB! .A COMMANDS AVAILABLE IN "READY" MODE. READY .E THE "READY" COMMAND TRANSFERS CONTROL TO "READY" MODE, WHERE THE FOLLOWING COMMANDS ARE AVAILABLE: .C ALARM SET OR CLEAR THE ALARM TIME. APPEND ADD A FILE TO THE END OF THE CURRENT FILE. BEGIN CALL A CCL PROCEDURE. .IF NOS BYE SAME AS LOGOUT. .EF CATLIST LIST USER PERMANENT FILES. COMPILE COMPILE/ASSEMBLE A PROGRAM. DELETE DELETE RANGES OF LINES FROM THE CURRENT FILE. DUP DUPLICATE A LINE RANGE WITHIN THE CURRENT FILE. EDIT ENTER "EDIT" MODE. END RETURN TO THE TIMESHARING EXECUTIVE. EXECUTE LOAD AND EXECUTE AN OBJECT FILE. EXTRACT EXTRACT LINES FROM THE CURRENT FILE. FORMAT FORMAT THE CURRENT FILE. .IF NOS/BE GOODBYE QUIET LOGOUT. .EF HELP PROCESS ON-LINE HELP REQUESTS. INPUT HIGH-SPEED TEXT ENTRY INTO THE CURRENT FILE. LENGTH DISPLAY LENGTH IN LINES OF CURRENT FILE. LIST LIST THE CURRENT FILE. LOGOUT TERMINATE THE TERMINAL SESSION. MERGE MERGE A FILE WITH THE CURRENT FILE. MOVE MOVES A LINE RANGE WITHIN THE CURRENT FILE. NEW ESTABLISH A NEW CURRENT FILE. NOUT SEND A COPY OF A FILE TO A PRINTER, NO SHIFTING. OLD MAKE AN EXISTING FILE THE CURRENT FILE. OPTION SET SENATOR PROCESSING OPTIONS. OUT SEND A COPY OF A FILE TO A PRINTER, WITH SHIFTING. PUNCH PUNCH A COPY OF A FILE. PURGE PURGE A PERMANENT FILE. RENAME CHANGE THE NAME OF THE CURRENT FILE. REPLACE REPLACE A PERMANENT FILE. RESEQ RESEQUENCE THE CURRENT FILE. ./ .IF NOS/BE RMT FETCH AND DISPLAY A REMOTE OUTPUT FILE. ./ .EF RUN COMPILE AND EXECUTE A PROGRAM. SAVE SAVE THE CURRENT FILE. SCOPE ENTER "SCOPE" MODE. SCP ENTER "SCP" MODE. SCRATCH CLEAR THE CONTENTS OF THE CURRENT FILE. STATUS DISPLAY STATUS INFORMATION. SUBMIT SUBMIT A FILE TO THE INPUT QUEUE. SYSTEM SET THE CURRENT SYSTEM. TAB SET THE TAB CHARACTER AND COLUMNS. TIME DISPLAY TOTAL AND ELAPSED CPU SECONDS. USE USE ANOTHER FILE FOR SENATOR INPUT. .E .A COMMANDS AVAILABLE IN "EDIT" MODE. EDIT .E THE "EDIT" COMMAND TRANSFERS CONTROL TO "EDIT" MODE, WHERE THE FOLLOWING COMMANDS ARE AVAILABLE: .C AGAIN REPEAT AN EDIT COMMAND. BLANK BLANK OUT A . BOTTOM MOVE TO . CHANGE CHANGE A . CLEAR CLEAR FLAGS. DEFAULT SET "EDIT" DEFAULTS. DOWN MOVE THE DOWN. END RETURN TO THE TIMESHARING EXECUTIVE. ERASE DELETE LINES FROM THE CURRENT FILE. FIND FIND A . GOTO POSITION THE . HELP PROCESS ON-LINE HELP REQUESTS. INSERT INSERT A . MACRO DEFINE A PROCEDURE OF "EDIT" COMMANDS. MARK SET FLAGS. OVERLAY OVERLAY A . PRINT DISPLAY LINES. RANGE SET THE . READY ENTER "READY" MODE. REMOVE REMOVE A . SCOPE ENTER "SCOPE" MODE. SCP ENTER "SCP" MODE. STATUS DISPLAY STATUS INFORMATION. SUFFIX SUFFIX A . TOP SET THE TO . UP MOVE THE UP. X EXECUTE A PREVIOUSLY DEFINED MACRO. ZONE SHOW ZONE RANGE OF A . .E *DECK,ALIAS IDENT ALIAS,101B,ALIAS ABS ORG 101B SST SYSCOM B1 TITLE ALIAS - CHANGE ENTRY POINT NAMES IN AN OVERLAY. SPACE 4,10 XTEXT COMCMAC SPACE 4,10 *** ALIAS - CHANGE OVERLAY NAMES. * WRITTEN 78/11/27, B. CHESWICK, SCT. SPACE 4,10 *** ALIAS. * * THIS PROGRAM CHANGES THE PROGRAM AND/OR ENTRY POINT NAME * OF AN OVERLAY. IT IS USED TO ALLOW SYSEDITING OR OTHER * LIBRARY MANIPULATION OF OVERLAYS CREATED BY LANGUAGES * THAT DO NOT PRODUCE SENSIBLE NAMES FOR THEIR BINARIES * (E.G. PASCAL OR BASIC). SPACE 4,10 *** CONTROL CARD CALL. * * ALIAS,LFN,PNAME,ENAME. * * WHERE LFN IS THE FILE CONTAINING THE OVERLAY (DEFAULT = LGO) * PNAME IS THE NEW PROGRAM NAME (OPTIONAL) * ENAME IS THE NEW ENTRY POINT NAME (OPTIONAL) * * IF AN OPTIONAL PARAMETER IS OMITTED, THE CORRESPONDING * NAME IS NOT CHANGED. NOTE: ALIAS IS NOT A COPY ROUTINE. * IT SIMPLY REWRITES THE LOADER INFORMATION ON THE EXISTING * FILE. * * ALIAS DISPLAYS THE OLD PROGRAM NAME AND ENTRY POINT IN * THE DAYFILE. HENCE, * * ALIAS,LFN. * * SIMPLY DISPLAYS THE PROGRAM NAME AND ENTRY POINT ON FILE * LFN. * * * NOTES: THE FILE MUST CONTAIN EITHER A 51 OR A 54 TABLE. * A LEADING 77 TABLE IS IGNORED. OTHER TABLES WILL CAUSE THE * JOB TO ABORT. FOR ALIAS'S PURPOSES, THE ENTRY POINT IN A * 54 TABLE IS THE FIRST ENTRY POINT WHOSE FOURTH CHARACTER * IS NOT AN "=" SIGN. HENCE, ALIAS WILL HANDLE BINARIES * HAVING ENTRY POINTS SUCH AS "RFL=" AND "SSJ=". * * THE DEFAULT FILE NAME IS "LGO". TITLE DATA AREA. ** FETS AND BUFFERS. LGO RFILEB BUF,101B,(FET=8) BUF BSS 101B READS THE FIRST PRU ONLY SPACE 2,4 ** GLOBAL DATA. PN DATA 0 PROGRAM NAME EN DATA 0 ENTRY POINT NAME PNA DATA 0 POINTER TO PROGRAM NAME ENA DATA 0 POINTER TO ENTRY POINT NAME TITLE MAIN PROGRAM. ** ENTRY POINT. ALIAS SB1 1 RJ INI INITIALIZE RJ FRN FIND RELEVANT NAMES RJ DOI DISPLAY OLD INFO SA1 PN CHECK FOR NAME CHANGE SA2 EN BX6 X1+X2 ZR X6,ALI1 IF NO NAME CHANGES, DONE RJ CBF CHANGE BINARY FILE ALI1 ENDRUN TITLE SUBROUTINES. ** INI - INITIALIZE ALIAS. * * SETS UP CALLING PARAMETERS AND REWINDS THE LGO FILE. INI SUBR SA1 ACTR GET ARGUMENT COUNT SB7 X1 ZR B7,INI2 IF NO CONTROL CARD PARAMETERS SA5 ARGR MX0 42 BX5 X0*X5 ZR X5,INI1 IF NO *LFN* PARAMETER SX0 3B COMPLETION BITS BX6 X0+X5 SA6 LGO INI1 EQ B7,B1,INI2 IF ONLY ONE PARAMETER MX0 42 SA5 ARGR+1 BX6 X0*X5 SA6 PN SAVE PROGRAM NAME, IF ANY SB6 B1+B1 EQ B7,B6,INI2 IF ONLY TWO PARAMETERS SA5 ARGR+2 BX6 X0*X5 SA6 EN SAVE ENTRY POINT NAME SB6 B6+B1 EQ B7,B6,INI2 IF THREE PARAMETERS MESSAGE (=C* ALIAS - TOO MANY PARAMETERS*) ABORT INI2 EQ INIX EXIT SPACE 4,10 ** FRN - FIND RELEVANT NAMES. * * THIS ROUTINE READS THE FIRST PRU OF THE LGO FILE AND * SEARCHES FOR THE NEEDED LOADER TABLES. A 51 OR 54 TABLE * IS NEEDED. IF NEITHER OF THESE TABLES IS FOUND WITHIN * THE FIRST PRU OF THE FILE, ALIAS ABOPTS. FRN SUBR REWIND LGO,R READ LGO,R SA1 LGO+2 MAKE SURE WE GOT DATA SA2 A1+B1 IX0 X1-X2 SX0 X0-100B NZ X0,FRN99 IF NOT A FULL PRU SA5 X2 GET (OUT) MX0 6 BX6 X0*X5 EXTRACT TABLE TYPE LX6 0-54 SX6 X6-77B NZ X6,FRN99 IF NO 77 TABLE SX6 A5+B1 SAVE ADDRESS OF PROGRAM NAME SA6 PNA SX2 X2+16B+1 SKIP REST OF 77 TABLE SA5 X2 GET TABLE NAME MX0 6 BX6 X0*X5 LX6 0-54 POSITION TABLE NAME SX0 X6-51B SX7 X6-54B ZR X7,FRN3 IF 54 TABLE NZ X0,FRN99 IF NOT 51 TABLE * 51 TABLE. SX7 X5 GET NUMBER OF ENTRY POINTS MX0 -6 FRN1 SA5 A5+B1 GET AN ENTRY POINT NAME BX4 X5 CHECK FOR AN XXX= ENTRY POINT LX4 0-36 BX4 -X0*X4 EXTRACT 4TH CHARACTER SX4 X4-1R= NZ X4,FRN2 IF WE HAVE OUR ENTRY POINT NAME SX7 X7-1 COUNT THE ENTRY POINT NZ X7,FRN1 TRY AGAIN MESSAGE (=C* ALIAS - NO VALID ENTRY POINT (51 TABLE)*) ABORT FRN2 SX6 A5 SAVE ENTRY POINT ADDRESS SA6 ENA EQ FRNX EXIT * 54 TABLE. FRN3 SX6 A5+10B SA6 ENA EQ FRNX EXIT * ERROR FRN99 MESSAGE (=C*ALIAS - UNRECOGIZED LOADER TABLE*) ABORT SPACE 4,10 ** DOI - DISPLAY OLD INFORMATION * * DAYFILES THE OLD PROGRAM NAME AND ENTRY POINT. DOI SUBR SA1 PNA SA1 X1 GET PROGRAM NAME RJ SFN SPACE-FILL NAME SA6 DOIA+1 PLUG MESSAGE SA1 ENA SA1 X1 GET ENTRY POINT NAME MX0 42 BX6 X0*X1 SA6 DOIA+3 MESSAGE DOIA EQ DOIX EXIT DOIA DIS ,*OLD NAME- NNNNNNN ENTRY- EEEEEEE* SPACE 4,10 ** CBF - CHANGE BINARY FILE. * * CHANGES THE ENTRY POINT AND/OR THE PROGRAM NAME IN THE * BUFFER AND REWRITES PRU 1. CBF SUBR SA1 PN CHECK PROGRAM NAME ZR X1,CBF1 IF NO CHANGE DESIRED BX6 X1 SA1 PNA GET THE ADDRESS IN THE 77 TABLE SA6 X1 STORE IT CBF1 SA1 EN ZR X1,CBF2 IF NO NEW ENTRY POINT NAME BX6 X1 SA1 ENA SA1 X1 GET OLD ENTRY NAME SX2 X1 EXTRACT ADDRESS BX6 X6+X2 FORM NEW ENTRY SA6 A1 UPDATE IT CBF2 SX6 B1 PRU ONE SA6 LGO+6 REWRITE LGO,R EQ CBFX EXIT, OK SPACE 4,10 ** COMDECKS. XTEXT COMCCIO XTEXT COMCSYS XTEXT COMCSFN SPACE 2,4 END *CWEOR *DECK ERRALG (*$U+ UPDATE SEQUENCING *) (*$A- SCIENTIFIC CHARACTER SET *) (*$T-,P- NO RUNTIME CHECKS *) PROGRAM ERRALG(INPUT, OUTPUT); (* ERRALG - EXTRACT ERRORS FROM AN ALGOL LISTING *) (* WRITTEN 78/12/22 BY DAVID K. KLOUSER *) CONST LINELEN = 140; (* MAXIMUM LENGTH OF A LINE *) MAXLINES = 5000; (* MAXIMUM LENGTH OF A ROUTINE *) TYPE ALFA6 = PACKED ARRAY [1 .. 6] OF CHAR; VAR CC: CHAR; (* CARRIAGE CONTROL OF CURRENT LINE *) LINE: ARRAY [1 .. LINELEN] OF CHAR; (* CURRENT LINE *) LEN: 0 .. LINELEN; (* LENGTH OF CURRENT LINE *) DONE: BOOLEAN; ERRS: BOOLEAN; LISTING: BOOLEAN; NUM: INTEGER; NLINES: 0 .. MAXLINES; (* NUMBER OF LINES IN THIS ROUTINE *) LINETABLE: ARRAY [1 .. MAXLINES] OF ALFA6; PROCEDURE READLINE; BEGIN IF NOT EOF THEN BEGIN IF EOLN THEN READLN; LEN := 0; WHILE NOT EOLN DO IF LEN < LINELEN THEN BEGIN LEN := LEN + 1; READ(LINE[LEN]); END; IF LEN > 0 THEN CC := LINE[1] ELSE CC := #?#; END END (*READLINE*); FUNCTION DECODENUM: BOOLEAN; VAR I, J: INTEGER; BEGIN DECODENUM := TRUE; I := NUM; NUM := 0; FOR J := I TO I + 4 DO IF LINE[J] <> # # THEN NUM := 10 * NUM + (ORD(LINE[J]) - ORD(#0#)); IF (NUM > NLINES) AND (NUM < MAXLINES) THEN LINETABLE[NUM] := #??????# ELSE IF (NUM = 0) OR (NUM >= MAXLINES) THEN DECODENUM := FALSE; END (*DECODENUM*); PROCEDURE PROCESSLISTING; VAR I: INTEGER; ERRMSG: BOOLEAN; BEGIN ERRMSG := FALSE; REPEAT READLINE; IF EOF THEN DONE := TRUE ELSE BEGIN IF (LINE[6] IN [#0# .. #9#]) THEN BEGIN NLINES := NLINES + 1; FOR I := 83 TO 88 DO LINETABLE[NLINES, I - 82] := LINE[I]; END ELSE IF (LINE[1] <> #1#) AND (LEN > 40) THEN ERRMSG := TRUE; END; UNTIL DONE OR ERRMSG; END (*PROCESSLISTING*); PROCEDURE PROCESSERRMSG; VAR I, LIM: INTEGER; BEGIN IF NOT DONE THEN BEGIN READLINE; REPEAT IF (LINE[20] IN [#0# .. #9#]) THEN BEGIN ERRS := TRUE; NUM := 16; IF DECODENUM THEN WRITE(# #, LINETABLE[NUM], # #) ELSE WRITE(# ?????? #); WHILE (LINE[LEN] = # #) DO LEN := LEN - 1; FOR I := 31 TO LEN DO WRITE(LINE[I]); WRITELN; READLINE; END ELSE BEGIN IF (LINE[30] IN [#0# .. #9#]) THEN BEGIN ERRS := TRUE; NUM := 26; IF DECODENUM THEN WRITE(# #, LINETABLE[NUM], # #) ELSE WRITE(# ?????? #); LIM := 114; WHILE (LINE[LIM] = # #) DO LIM := LIM - 1; FOR I := 41 TO LIM DO WRITE(LINE[I]); NUM := 115; IF DECODENUM THEN WRITE(# #, LINETABLE[NUM], # #) ELSE WRITE(# ?????? #); WRITELN; READLINE; END ELSE READLINE; END; UNTIL EOF; END; END (*PROCESSERRMSG*); BEGIN (* MAIN *) CC := # #; ERRS := FALSE; DONE := FALSE; NLINES := 0; WHILE NOT EOF AND (CC <> #1#) DO READLINE; IF EOF THEN MESSAGE(#ERRALG - FILE EMPTY#) ELSE BEGIN PROCESSLISTING; PROCESSERRMSG; IF ERRS THEN MESSAGE(#ERRALG - ERRORS FOUND.#) ELSE MESSAGE(#ERRALG - NO ERRORS FOUND#); END; END (*ERRALG*). *CWEOR *DECK ERRCOB4 (*$U+ UPDATE SEQUENCING *) (*$A- SCIENTIFIC CHARACTER SET *) (*$T-,P- NO RUNTIME CHECKS *) PROGRAM ERRCOB4(INPUT, OUTPUT); (* ERRCOB4 - EXTRACT ERRORS FROM A COBOL4 LISTING *) (* WRITTEN 78/12/22 BY DAVID K. KLOUSER *) CONST LINELEN = 136; (* MAXIMUM LENGTH OF A LINE *) MAXLINES = 5000; (* MAXIMUM LENGTH OF A ROUTINE *) TYPE ALFA6 = PACKED ARRAY [1 .. 6] OF CHAR; VAR CC: CHAR; (* CARRIAGE CONTROL OF CURRENT LINE *) LINE: ARRAY [1 .. LINELEN] OF CHAR; (* CURRENT LINE *) LEN: 0 .. LINELEN; (* LENGTH OF CURRENT LINE *) DONE: BOOLEAN; ERRS: BOOLEAN; LISTING: BOOLEAN; NLINES: 0 .. MAXLINES; (* NUMBER OF LINES IN THIS ROUTINE *) LINETABLE: ARRAY [1 .. MAXLINES] OF ALFA6; PROCEDURE READLINE; BEGIN IF NOT EOF THEN BEGIN IF EOLN THEN READLN; LEN := 0; WHILE NOT EOLN DO IF LEN < LINELEN THEN BEGIN LEN := LEN + 1; READ(LINE[LEN]); END; IF LEN > 0 THEN CC := LINE[1] ELSE CC := #?#; NLINES := NLINES + 1; END END (*READLINE*); PROCEDURE DECODENUM; VAR I, J: INTEGER; NUM: INTEGER; BEGIN IF LISTING THEN BEGIN NUM := 0; FOR I := 11 TO 15 DO NUM := 10 * NUM + (ORD(LINE[I]) - ORD(#0#)); IF NUM < MAXLINES THEN BEGIN FOR I := 93 TO 98 DO LINETABLE[NUM, I - 92] := LINE[I]; END ELSE BEGIN DONE := TRUE; MESSAGE(# ERRCOB4 - MAXIMUM LINES EXCEEDED#); END; END ELSE BEGIN I := 32; WHILE (LINE[I] IN [#0# .. #9#]) AND (I < LEN) DO BEGIN NUM := 0; FOR J := I TO I + 4 DO NUM := 10 * NUM + (ORD(LINE[J]) - ORD(#0#)); IF (NUM >= NLINES) OR NOT (LINETABLE[NUM, 1] IN [#0# .. #9#]) THEN WRITE(#??????#) ELSE WRITE(LINETABLE[NUM]); FOR J := I + 5 TO I + 7 DO WRITE(LINE[J]); WRITE(# #); I := I + 10; END; END; END (* DECODENUM *); PROCEDURE PRINTERRLINE; VAR I, LIM: INTEGER; BEGIN WRITE(# #); FOR I := 93 TO 98 DO WRITE(LINE[I]); WRITE(# #); LIM := 92; WHILE (LINE[LIM] = # #) AND (LIM > 21) DO LIM := LIM - 1; FOR I := 21 TO LIM DO WRITE(LINE[I]); WRITELN; DECODENUM; END (* PRINTERRLINE *); PROCEDURE PROCESSLISTING; VAR LSTDONE: BOOLEAN; BEGIN LSTDONE := FALSE; REPEAT READLINE; IF EOF THEN DONE := TRUE ELSE BEGIN IF LINE[2] = #E# THEN BEGIN PRINTERRLINE; ERRS := TRUE; END ELSE IF (LINE[2] = #*#) OR (LINE[12] = #L#) THEN LSTDONE := TRUE; END; UNTIL DONE OR LSTDONE; END (*PROCESSLISTING*); PROCEDURE PROCESSERRMSG; VAR I: INTEGER; BEGIN LISTING := FALSE; IF NOT DONE THEN BEGIN READLINE; REPEAT IF (LINE[2] = #*#) AND (LINE[10] IN [#0# .. #9#]) THEN BEGIN WRITE(# #); FOR I := 7 TO 10 DO WHILE (LINE[LEN] = # #) AND (LEN > 20) DO LEN := LEN - 1; WRITE(LINE[I]); FOR I := 20 TO LEN DO WRITE(LINE[I]); WRITELN; READLINE; WHILE (LINE[2] = #*#) AND (LINE[3] <> #*#) DO BEGIN WRITE(# #); FOR I := 21 TO 31 DO WRITE(LINE[I]); DECODENUM; WRITELN; READLINE; END; END ELSE BEGIN IF (LINE[20] = #.#) OR EOF THEN DONE := TRUE; READLINE; END; UNTIL DONE; WHILE NOT EOF DO READLINE; END; END (*PROCESSERRMSG*); BEGIN (* MAIN *) CC := # #; ERRS := FALSE; DONE := FALSE; LISTING := TRUE; NLINES := 0; WHILE NOT EOF AND (CC <> #1#) DO READLINE; IF EOF THEN MESSAGE(#ERRCOB4 - FILE EMPTY#) ELSE BEGIN PROCESSLISTING; PROCESSERRMSG; IF ERRS THEN MESSAGE(#ERRCOB4 - ERRORS FOUND.#) ELSE MESSAGE(#ERRCOB4 - NO ERRORS FOUND#); END; END (*ERRCOB4*). *CWEOR *DECK ERRCOM (*$U+ UPDATE SEQUENCING *) (*$A- SCIENTIFIC CHARACTER SET *) (*$T-,P- NO RUN-TIME CHECKS *) PROGRAM ERRCOM(INPUT+, OUTPUT); (* ERRCOM - EXTRACT ERRORS FROM A COMPASS LISTING *) (* WRITTEN 78/09/15 BY B.CHESWICK, SCT *) CONST LINELEN = 136; (* MAXIMUM LENGTH OF A LINE *) VAR LINE: ARRAY[1..LINELEN] OF CHAR; (* CURRENT LINE *) LEN: 0..LINELEN; (* LENGTH OF CURRENT LINE *) ERRS: BOOLEAN; PROCEDURE READLINE; BEGIN IF NOT EOS THEN BEGIN IF EOLN THEN READLN; LEN := 0; WHILE NOT EOLN DO IF LEN < LINELEN THEN BEGIN LEN := LEN + 1; READ(LINE[LEN]); END; END END (*READLINE*); PROCEDURE WRITEERROR; VAR I: INTEGER; BEGIN IF LEN < 113 THEN WRITE(# ??????#) (* NO LINE NUMBER PRESENT *) ELSE BEGIN WRITELN(# #); FOR I := 113 TO LEN DO WRITE(LINE[I]); LEN := 112; WHILE (LEN > 40) AND (LINE[LEN] = # #) DO LEN := LEN - 1; (* IGNORE TRAILING BLANKS *) END; WRITE(# #); IF LEN > 5 THEN FOR I := 2 TO 5 DO WRITE(LINE[I]); (* DISPLAY ERROR CHARACTERS *); IF LEN > 40 THEN FOR I := 41 TO LEN DO (* DISPLAY BAD LINE *) WRITE(LINE[I]); WRITELN; END (*WRITEERROR*); BEGIN (*MAIN*) IF EOS THEN MESSAGE (#ERRCOM - FILE EMPTY#) ELSE BEGIN REPEAT (* SEARCH FOR COMPASS LISTING *) IF EOS THEN GETSEG(INPUT); READLINE UNTIL EOF OR ((LINE[1]=#1#) AND (LINE[71]=#C#)); ERRS := FALSE; REPEAT READLINE; IF NOT EOS AND (LINE[2] <> # #) THEN BEGIN ERRS := TRUE; WRITEERROR; END; UNTIL EOS; IF ERRS THEN MESSAGE(#ERRCOM - ERRORS FOUND#) ELSE MESSAGE(#ERRCOM - NO ERRORS FOUND#) END END. *CWEOR *DECK ERRFTN (*$U+ UPDATE SEQUENCING *) (*$A- SCIENTIFIC CHARACTER SET *) PROGRAM ERRFTN(INPUT,OUTPUT); (* ERRFTN - EXTRACTS ERRORS FROM A FORTRAN V4 LISTING *) (* WITH/WITHOUT - REFERENCE MAP, ERRORS, UNDEFINED *) (* LABELS, OR FORTRAN SUBPROGRAMS *) (* WRITTEN BY - STEVE PETCHON 8-16-79 *) (* FOR S.C.T. *) CONST LINELEN = 136; MAXLINES = 5000; TYPE ALFA6 = PACKED ARRAY [1..6] OF CHAR; VAR CC : CHAR; LINE : ARRAY [1..LINELEN] OF CHAR; LEN : 0..LINELEN; ERRS : BOOLEAN; NLINES : 0..MAXLINES; LINETABLE : ARRAY[1..MAXLINES] OF ALFA6; I : INTEGER; FUNCTION SYMREF : BOOLEAN; BEGIN SYMREF := FALSE; IF (LINE[11] = #S#) AND (LINE[12] = #Y#) THEN SYMREF := TRUE; END; FUNCTION UNDEFS : BOOLEAN; BEGIN UNDEFS := FALSE; IF (LINE[12] = #U#) AND (LINE[13] = #N#) THEN UNDEFS := TRUE; END; FUNCTION ERRORLIST : BOOLEAN; BEGIN ERRORLIST := FALSE; IF LINE[3] = #C# THEN ERRORLIST := TRUE; END; FUNCTION NEWSUB : BOOLEAN; BEGIN NEWSUB := FALSE; IF (LINE[9] = # #) AND (LINE[10] = #1#) AND (LINE[11] = # #) THEN NEWSUB := TRUE; END; FUNCTION NUMERLINE : BOOLEAN; VAR I : INTEGER; DUM : BOOLEAN; BEGIN I := 2; DUM := TRUE; WHILE (DUM) AND (I <= LEN) DO BEGIN IF NOT ((LINE[I] IN [#0#..#9#]) OR (LINE[I] = # #)) THEN DUM := FALSE; I := I + 1; END; NUMERLINE := DUM; END; (* READLINE - READS IN ONE LINE OF TEXT UNTIL EOLN OR *) (* LEN > LINELEN IS SATISFIED *) PROCEDURE READLINE; BEGIN IF NOT EOF THEN BEGIN IF EOLN THEN READLN; LEN := 0; WHILE NOT EOLN DO IF LEN < LINELEN THEN BEGIN LEN := LEN + 1; READ(LINE[LEN]); END; IF LEN > 0 THEN CC := LINE[1] ELSE CC := #?#; END END (* READLINE *); (* SKIPREF - SKIPS REFERENCE MAP *) (* READS IN LINES OF TEXT UNTIL A NEW ROUTINE OR EOF *) (* IS ENCOUNTERED *) PROCEDURE SKIPREF; BEGIN REPEAT READLINE; UNTIL EOF OR NEWSUB; END; (* SKIPREF *) (* UNDEFLABELS - PRINTS OUT UNDEFINED LABELS *) (* PROCESSES UNTIL REFERENCE MAP, NEW ROUTINE, OR EOF IS *) (* ENCOUNTERED *) PROCEDURE UNDEFLABELS; BEGIN READLINE; WRITELN; WRITELN(# UNDEFINED LABELS -#); REPEAT IF (LEN > 10) AND (NUMERLINE) THEN BEGIN FOR I := 1 TO LEN DO WRITE(LINE[I]); WRITELN; END; READLINE; UNTIL EOF OR NEWSUB OR SYMREF; END; (* UNDEFLABELS *) (* PROCESSERRORS - PROCESSES ERRORS UNTIL A *) (* REFERENCE MAP, UNDEFINED LABELS, NEW ROUTINE, OR EOF IS *) (* ENCOUNTERED *) PROCEDURE PROCESSERRORS; VAR INDEX : INTEGER; FUNCTION DECODENUM : INTEGER; VAR J, NUM : INTEGER; BEGIN NUM := 0; FOR J := 6 TO 10 DO IF LINE[J] IN [#0#..#9#] THEN NUM := NUM * 10 + (ORD(LINE[J]) - ORD(#0#)); DECODENUM := NUM; END; (* DECODENUM *) BEGIN ERRS := TRUE; READLINE; IF LEN <= 14 THEN READLINE; REPEAT IF (LEN > 9) AND (LINE[10] IN [#0#..#9#]) THEN BEGIN INDEX := DECODENUM; IF (INDEX <= MAXLINES) AND (NOT (INDEX = 0)) THEN BEGIN WRITE(# #,LINETABLE[INDEX],# #); FOR I := 14 TO LEN DO WRITE(LINE[I]); WRITELN; END ELSE BEGIN WRITE(# ?????? #); FOR I := 14 TO LEN DO WRITE(LINE[I]); WRITELN; END END; READLINE; UNTIL EOF OR SYMREF OR NEWSUB OR UNDEFS; END; (* PROCESSERRORS *) (* ADDTEXT - READS PROGRAM LINES UNTIL EOF OR PAGE HEADING *) (* IS ENCOUNTERED *) (* STORES SENATOR LINE #'S IN AN ARRAY TO LATER BE USED BY *) (* PROCESSERRORS. THIS ROUTINE MAY BE REPEATEDLY INVOKED *) (* IF PROGRAM LISTING SPANS PAGES *) PROCEDURE ADDTEXT; VAR NUM : BOOLEAN; BEGIN IF NLINES < MAXLINES THEN REPEAT NUM := TRUE; NLINES := NLINES +1; IF (LEN > 97) THEN BEGIN FOR I := 93 TO 98 DO BEGIN LINETABLE[NLINES,I-92] := LINE[I]; IF NOT (LINE[I] IN [#0#..#9#]) THEN NUM := FALSE; END END; IF (LEN < 98) OR (NOT NUM) THEN LINETABLE[NLINES] := #??????#; READLINE; UNTIL (NLINES = MAXLINES) OR (EOF) OR (CC <> # #) ELSE READLINE; READLINE; IF NOT ERRORLIST THEN READLINE; END; (* ADDTEXT *) (* MAIN - CONTROLS PROCESSING *) (* EACH PROCEDURE STOPS WHEN ANOTHER PORTION OF THE LISTING *) (* OCCURS. THEY ARE - NEW HEADING, SYMBOLIC REFERENCE MAP, *) (* ERROR LISTING, UNDEFINED LABELS, NEW ROUTINE, EOF, OR *) (* NEXT PAGE OF LISTING. *) (* PROGRAM TERMINATES AT EOF AND ISSUES DAYFILE MESSAGE *) BEGIN (* MAIN *) ERRS := FALSE; CC := #?#; WHILE NOT((CC = #1#) OR (EOF)) DO READLINE; IF EOF THEN MESSAGE(#ERRFTN - INPUT FILE EMPTY#) ELSE BEGIN ERRS := FALSE; READLINE; READLINE; NLINES := 0; WHILE NOT EOF DO BEGIN IF SYMREF THEN SKIPREF ELSE IF UNDEFS THEN UNDEFLABELS ELSE IF ERRORLIST THEN PROCESSERRORS ELSE IF NEWSUB THEN BEGIN NLINES := 0; ADDTEXT; END ELSE ADDTEXT END; IF ERRS THEN MESSAGE(#ERRFTN - ERRORS, SEE LISTING#) ELSE MESSAGE(#ERRFTN - NO ERRORS#); END END. *CWEOR *DECK ERRPAS (*$U+ UPDATE SEQUENCING *) (*$A+ ASCII CHARACTER SET *) (*$T-,P- NO RUNTIME CHECKS *) PROGRAM ERRPAS (INPUT+, OUTPUT); (* ERRPAS - EXTRACT ERRORS FROM A PASCAL LISTING *) (* WRITTEN 78/09/15 BY B.CHESWICK, SCT *) CONST LINELEN = 136; (* MAXIMUM LENGTH OF A LINE *) VAR LINE, OLDLINE: ARRAY[1..LINELEN] OF CHAR; (* CURRENT LINE *) LEN, OLDLEN: 0..LINELEN; (* LENGTH OF CURRENT LINE *) STARTCOL: INTEGER; ERRS: BOOLEAN; I: INTEGER; PROCEDURE READLINE; BEGIN IF NOT EOS THEN BEGIN IF EOLN THEN READLN; LEN := 0; WHILE NOT EOLN DO IF LEN < LINELEN THEN BEGIN LEN := LEN + 1; READ(LINE[LEN]); END; END END (*READLINE*); PROCEDURE WRITELINE; VAR I: INTEGER; BEGIN IF LEN > 0 THEN FOR I := 1 TO LEN DO WRITE(LINE[I]); WRITELN END (* WRITELINE *); PROCEDURE WRITEERROR; VAR START: INTEGER; (* STARTING COLUMN OF LINE *) BEGIN START := 9; REPEAT START := START + 1; UNTIL LINE[START] <> '*'; START := START + 1; IF OLDLEN > 0 THEN BEGIN IF OLDLEN > START+72 THEN OLDLEN := START + 72; WHILE (OLDLINE[OLDLEN] = ' ') AND (OLDLEN > START) DO OLDLEN := OLDLEN - 1; FOR I := 9 TO OLDLEN DO WRITE(OLDLINE[I]); WRITELN; OLDLEN := 0; END; WRITE(' ': START-9); FOR I := START TO LEN DO WRITE(LINE[I]); WRITELN END (*WRITEERROR*); BEGIN (*MAIN*) IF EOS THEN MESSAGE('ERRPAS - FILE EMPTY') ELSE BEGIN ERRS := FALSE; OLDLEN := 0; STARTCOL := 9; REPEAT READLINE; IF NOT EOS THEN IF LINE[9] = '*' THEN (* ERROR MESSAGE FOUND *) BEGIN ERRS := TRUE; WRITEERROR; OLDLEN := 0; (* DON-T PRINT A LINE TWICE *) END ELSE BEGIN OLDLEN := LEN; IF LEN > 0 THEN OLDLINE := LINE; END UNTIL EOS; IF EOS THEN GETSEG(INPUT); IF NOT EOS THEN BEGIN WRITELN; REPEAT (* COPY ERROR ELABORATION *) READLINE; IF NOT EOS THEN WRITELINE UNTIL EOS; END; IF ERRS THEN MESSAGE('ERRPAS - ERRORS FOUND') ELSE MESSAGE('ERRPAS - NO ERRORS FOUND') END END. *DECK SENSEQ IDENT SENSEQ,111B ABS ORG 111B ENTRY SENSEQ ENTRY RFL= SYSCOM B1 TITLE SENSEQ - MOVE SENATOR SEQUENCE NUMBERS. SPACE 4,10 *** SENSEQ - MOVE SENATOR SEQUENCE NUMBERS. * B.CHESWICK, SCT, 82/11/10. * IDEA AND ORIGINAL CODE BY J. ANDERSON, LEHIGH U. SPACE 4,10 *** SENSEQ. * * THIS ROUTINE IS CALLED BY SENATOR TO COPY SENATOR * SEQUENCE NUMBERS FROM COLUMN 73-78 TO THE BEGINNING * OF THE LINE. A NUMBER OF COMPILERS HANDLE ERRORS * NICELY WHEN THE LINE NUMBERS APPEAR AT THE BEGINNING * OF THE LINE. * * FTN5 ROUTINES MAY CONTAINS IMBEDDED COMPASS ROUTINES, * WHICH ARE COPIED WITHOUT REFORMATTING. A COMPASS ROUTINE * IS IDENTIFIED BY THE SYMBOL *IDENT* BEGINNING IN * COLUMN 11 AND TERMINATED BY *END* IN COLUMN 11. SPACE 4,10 *** CONTROL STATEMENT CALL. * * SENSEQ,I,O,S. * * WHERE I IS THE INPUT FILE * O IS THE OUTPUT FILE, WITH THE LINE NUMBERS MOVED * S IS THE SYSTEM CODE - * P = PASCAL * F = FTN5 * C = COBOL SPACE 4,10 ** ASSEMBLY CONSTANTS. IBUFL EQU 2001B INPUT BUFFER LENGTH OBUFL EQU 2001B OUTPUT BUFFER LENGTH IF -DEF,CMUR CMUR EQU RA.CMU ENDIF TITLE MACROS. MVC SPACE 4,10 ** MVC MACRO - MOVE CHARACTERS. * * THIS MACRO MOVES CHARACTER FIELDS. * * MVC N,FA,FC,D * * WHERE N IS NUMBER OF CHARACTERS TO MOVE * SA IS THE ADDRESS OF THE SOURCE STRING * FC IS THE STARTING CHARACTER IN *SA* (BEGINS WITHONE) * D IS THE DESTINATION COLUMN IN *JN* MVC MACRO N,FA,FC,D LOCAL A,B * SO SET FC-1 SW SET SO/10 SOURCE WORD SC SET SO-10*SW SOURCE COLUMN * DO SET D-1 DW SET DO/10 DESTINATION WORD DC SET DO-10*DW DESTINATION COLUMN * * SA1 CMUR TEST FOR PRESENCE OF *CMU* * MI X1,A IF *CMU* PUTI DW+JN,DC+1 PUTF (SW+FA),SC+1,N * EQ B * A BSS 0 * DM N,SW,SC,DW,DC * B BSS 0 ENDM SPACE 4,10 XTEXT COMCMAC *CALL COMCPTM SPACE 4,10 ** GLOBAL VARIABLES. ORG 111B TSYN BSS 0 TABLE OF SYSTEM NAMES LOC 0 PASY DATA 1LP PASCAL CBSY DATA 1LC COBOL 5 FTSY DATA 1LF FORTRAN 5 CMSY DATA 0 EMBEDDED COMPASS LOC *O SPACE 2,4 TMXL BSS 0 TABLE OF MAXIMUM LINE NUMBERS LOC 0 PASY DATA 99999 CBSY DATA 65255 FTSY DATA 99999 CMSY DATA 999999 LOC *O SPACE 2,4 SY BSS 1 CURRENT SYSTEM LN DATA -1 MOST RECENT LINE NUMBER OV DATA 0 NZ IF OVERFLOWED LINE NUMBERS FOUND LG DATA 0 COUNT OF LINE NUMBERS GENERATED BL DATA 0 COUNT OF BAD LINE NUMBERS IN BSS 8+1 INPUT WSA PLUS TERMINATOR ZERO JN BSS 8+1+1 OUTPUT WSA SPACE 2,4 ** FETS. I FILEC IBUF,IBUFL O FILEC OBUF,OBUFL TITLE MAIN PROGRAM. SENSEQ RJ PRS PRESET READ I SEQ1 READC I,IN,8 NZ X1,SEQ2 IF EOR/EOF/EOI SX6 B6-IN INPUT LINE LENGTH (IN WORDS) RJ GLN GET LINE NUMBER RJ RFL REFORMAT LINE WRITEC O,JN WRITE THE LINE EQ SEQ1 SEQ2 WRITEF O,R REWIND O,R RJ RER REPORT ERRORS ENDRUN TITLE SUBROUTINES. GLN SPACE 4,10 ** GLN - GET LINE NUMBER. * * THIS ROUTINE FINDS AND VERIFIES THE LINE NUMBER. * THE LINE NUMBER SHOULD APPEAR IN COLUMNS 73-78, SHOULD * BE GREATER THAN THE PREVIOUS LINE NUMBER, AND LESS * THAN THE MAXIMUM NUMBER FOR THIS SYSTEM. IF ANY * OF THESE ERRORS IS ENCOUNTERED, THE APPROPRIATE COUNT * IS INCREMENTED. * * ENTRY *IN* HAS THE INPUT LINE * X6 HAS INPUT LINE LENGTH, IN WORDS * * EXIT *LN* HAS THE LINE NUMBER GLN0 SA1 LN GENERATE A LINE NUMBER SX0 B1 IX6 X0+X1 SA6 LN SA1 LG SX6 X1+B1 COUNT LINE NUMBER GENERATED SA6 A1 GLN SUBR SX0 X6-8 NZ X0,GLN98 IF LINE TOO LONG SA1 IN+7 MX0 -12 BX6 -X0*X1 CHECK COLS 79 AND 80 NZ X6,GLN98 IF LINE TOO LONG LX1 2*6 POSITION LINE NUMBER BX6 X6-X6 LINE NUMBER ACCUMULATOR MX0 -6 SB7 6 DIGIT COUNT GLN1 LX1 6 BX2 -X0*X1 EXTRACT CHARACTER SX2 X2-1R0 NG X2,GLN98 IF ALPHABETIC, NO GOOD SX3 X2-9-1 PL X3,GLN98 IF NON-NUMERIC LX3 X6,B1 *2 LX6 3 *8 IX6 X6+X3 *10 IX6 X6+X2 *10 + NEW DIGIT SB7 B7-B1 COUNT IT NZ B7,GLN1 IF MORE TO CHECK SA1 SY COMPARE LINE NUMBER TO MAXIMUM SA1 X1+TMXL GET MAX FOR THIS SYSTEM IX0 X1-X6 NG X0,GLN97 IF LINE NUMBER TOO LARGE SA6 LN EQ GLNX * ERRORS. GLN97 SA1 OV SX6 X1+B1 COUNT THE OVERFLOW SA6 A1 EQ GLN0 GENERATE NEW LINE NUMBER GLN98 SA1 BL BAD LINE NUMBER SX6 X1+B1 SA6 A1 EQ GLN0 GENERATE NEW LINE NUMBER RER SPACE 4,10 ** RER - REPORT ERRORS. * * REPORT SEQUENCING ERRORS (IF ANY). RER SUBR SA1 BL ZR X1,RER1 IF NO BAD LINE NUMBERS PUTI JN PUTD LG PUTT ( BAD LINE NUMBERS.) PUTZ MESSAGE JN RER1 SA1 OV ZR X1,RER2 IF NO LINE NUMBERS OVERFLOWED PUTI JN PUTD OV PUTT ( LINE NUMBERS TOO LARGE.) PUTZ MESSAGE JN RER2 SA1 LG ZR X1,RERX IF NO LINE NUMBERS GENERATED PUTI JN PUTD LG PUTT ( LINE NUMBERS GENERATED.) PUTZ MESSAGE JN EQ RERX RFL SPACE 4,10 ** RFL - REFORMAT LINE. * * REFORMAT THE LINE ACCORDING TO THE CURRENT SYSTEM. RFL SUBR SA1 SY SB7 X1 JP RFL1+B7 JUMP TO PROCESSOR RFL1 BSS 0 REFORMAT PROCESSOR JUMP TABLE LOC 0 PASY JP RFL2 PASCAL CBSY JP RFL3 COBOL FTSY JP RFL5 FORTRAN CMSY JP RFL4 COMPASS (ACTUALLY FORTRAN) LOC *O * PASCAL RFL2 MVC 5,IN,74,1 LINE NUMBER RJ TRM TRIM THE INPUT LINE MVC 1,(=1L ),1,6 SA5 TRMA MVC X5,IN,1,7 TEXT EQ RFLX EXIT * COBOL. RFL3 MVC 6,IN,73,1 LINE NUMBER RJ TRM TRIM THE INPUT LINE SA5 TRMA MVC X5-6,IN,7,7 EQ RFLX * COMPASS. RFL4 MOVE 8,IN,JN COPY THE COMPASS LINE SA1 IN+1 CHECK FOR *END* MX0 4*6 BX1 X0*X1 SA2 =4LEND IX0 X1-X2 NZ X0,RFLX IF NOT END OF COMPASS ROUTINE SX6 FTSY SWITCH BACK TO FORTRAN NEXT TIME SA6 SY EQ RFLX EXIT * FORTRAN. THERE ARE SEVERAL CONSIDERATIONS, BECAUSE * SEQUENCED FORTRAN IS A LITTLE WIERD - * * - IF *IDENT* IS FOUND IN COLUMN 11, SWITCH TO COMPASS * AND DON-T REFORMAT THE LINE. * - NORMAL FORTRAN LINE IS SEPARATED FROM THE LINE NUMBER * BY A BLANK * - CONTINUATION LINES HAVE A *+* IMMEDIATELY FOLLOWING * THE LINE NUMBER * - COMMENTS (*** AND *C*) HAVE THE COMMENT CHARACTER * IMMEDIATELY FOLLOWING THE LINE NUMBER RFL5 SA1 IN+1 MX0 6*6 BX1 X0*X1 SA2 =6LIDENT IX0 X1-X2 NZ X0,RFL6 IF NOT *IDENT*, NOT COMPASS ROUTINE SX6 CMSY SA6 SY SWITCH SYSTEMS... MOVE 8,IN,JN COPY THE COMPASS LINE EQ RFLX ... AND DON-T REFORMAT * CHECK FOR COMMENT. RFL6 MVC 5,IN,74,1 ENTER LINE NUMBER RJ TRM TRIM THE INPUT LINE SA1 IN CHECK COLUMN 1 MX0 -6 LX1 6 POSITION COLUMN 1 BX2 -X0*X1 SX3 X2-1RC ZR X3,RFL7 IF *C*, COMMENT SX3 X2-1R* NZ X3,RFL8 IF NOT ***, NOT COMMENT RFL7 SA5 TRMA MVC X5,IN,1,6 MOVE COMMENT EQ RFLX * CHECK FOR CONTINUATION. RFL8 LX1 5*6 POSITION COLUMN 6 BX2 -X0*X1 SX3 X2-1R ZR X3,RFL9 IF BLANK, NOT CONTINUATION SX3 X2-1R0 ZR X3,RFL9 IF *0*, NOT CONTINUATION MVC 1,(=1L+),1,6 APPEND *+* TO LINE NUMBER SA5 TRMA MVC X5-6,IN,7,7 ... AND CONTINUATION TEXT EQ RFLX * NORMAL LINE. RFL9 MVC 1,(=1L ),1,6 APPEND BLANK TO LINE NUMBER SA5 TRMA MVC X5,IN,1,7 ... AND ADD THE TEXT EQ RFLX EXIT TRM SPACE 4,10 ** TRM - TRIM THE INPUT LINE. * * THIS ROUTINE DELETES THE LINE NUMBER (COLS 73-78) * OF THE INPUT LINE AND DETERMINES THE LINE LENGTH * IN CHARACTERS. THE LENGTH OF THE LINE RETURNED * INCLUDES 66 ZERO BITS, WHICH ARE NEEDED TO TERMINATE * THE OUTPUT LINE. * * ENTRY (IN) HAS TEXT * * EXIT (TRMA) HAS NEW LENGTH OF LINE, INCLUDING * *Z* TERMINATOR. TRM SUBR SA1 IN+7 MX0 2*6 EXTRACT COLUMNS 71 AND 72 BX6 X0*X1 SB6 72D CHARACTERS ON THIS LINE SB5 12 SHIFT COUNT IN CURRENT WORD BX7 X7-X7 SA7 IN+8 ENSURE 66 ZERO BITS MX0 6 LX0 -6 POSITION ZEROING MASK TRM1 BX2 X0*X6 EXTRACT CURRENT CHARACTER LX2 B5 POSITION THE CHAR SX1 X2-1R NZ X1,TRM2 IF NON-BLANK, END TRIMMING BX6 -X0*X6 ZERO THE COLUMN SB6 B6-B1 SHORTEN THE LINE SB5 B5-6 LX0 6 POSITION THE MASK NZ B5,TRM1 IF MORE IN THIS WORD ZR B6,TRM2 IF NOTHING MORE TO ZERO SA6 A1 STORE ZERO-ED WORD SA1 A1-B1 TRY PREVIOUS WORD BX6 X1 SB5 60 NEW SHIFT COUNT EQ TRM1 TRM2 SA6 A1 STORE PARTIALLY ZEROED WORD SX6 B6+11 LENGTH OF LINE, INCLUDING ZERO BITS SA6 TRMA EQ TRMX EXIT TRMA BSS 1 LENGTH OF LINE, IN CHARS, INCLUDING *Z* TITLE COMMON DECKS. XTEXT COMCCIO XTEXT COMCCDD XTEXT COMCMVE XTEXT COMCRDC XTEXT COMCRDW XTEXT COMCSYS XTEXT COMCWTC XTEXT COMCWTW *CALL COMCPTI *CALL COMCPTN *CALL COMCPTZ TITLE BUFFERS AND PRESET. USE LITERALS IBUF BSS 0 OBUF EQU IBUF+IBUFL RFL= EQU OBUF+OBUFL PRS SPACE 4,10 ** PRS - PRESET. * PRS SUBR SB1 1 SA1 ACTR SX0 X1-3 NZ X0,PRS99 IF NOT THREE PARAMETERS SA1 ARGR GET INPUT FILE NAME MX0 42 BX6 X0*X1 JUST FILE NAME ZR X6,PRS98 IF NO FILE NAME SX2 B1 COMPLETION BIT BX6 X2+X6 SA6 I SA1 ARGR+1 GET OUTPUT FILE NAME BX6 X0*X1 ZR X6,PRS98 IF NO FILE NAME GIVEN BX6 X6+X2 SA6 O SA1 ARGR+2 GET SYSTEM BX1 X0*X1 JUST SYSTEM NAME SA2 TSYN PRS1 IX0 X1-X2 ZR X0,PRS2 IF FOUND SA2 A2+B1 ZR X2,PRS97 IF END OF TABLE, SYSTEM NOT FOUND EQ PRS1 PRS2 SX6 A2-TSYN COMPUTE SYSTEM ORDINAL SA6 SY ... AND SAVE IT OPEN I,READ OPEN O,WRITE EQ PRSX EXIT, DONE * ERRORS. PRS97 MESSAGE (=C* SENSEQ - ILLEGAL SYSTEM*) ABORT PRS98 MESSAGE (=C* SENSEQ - FILE NAMES ARE REQUIRED*) ABORT PRS99 MESSAGE (=C* SENSEQ - NEEDS THREE PARAMETERS*) ABORT END