TITLE SETSRC - CUSP TO MANIPULATE SEARCH LISTS AND DEFAULT PATHS V12B(47) SUBTTL D BLACK/TW 19MAR79 ;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974,1984,1986. ALL RIGHTS RESERVED. ; ; ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ;TRANSFERRED. ; ;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ;CORPORATION. ; ;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. VSETSR==12 VUPDATE==2 VEDIT==47 VCUSTOM==0 SEARCH MACTEN,UUOSYM ;UNIVERSAL FILES LOC 137 B2+B11+B17+VEDIT OCT VSETSR RELOC COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974,1986. ALL RIGHTS RESERVED. \;END COPYRIGHT MACRO INTERN VSETSR TTY==0 F=0 A=1 B=2 C=3 D=4 N=5 N1=N+1 N2=N1+1 I=N2+1 O=I+1 ICH=O+1 OCH=ICH+1 P=17 ; F BITS S.WRTL==1B0 S.NOCR==1B1 S.SWIT==1B35 ;1 IF ANY FS SWITCH SEEN S.BITS==S.WRTL!S.NOCR!S.SWIT F.LIB==1B2 ;/LIB F.NLIB==1B3 ;/NOLIB F.SYS==1B4 ;/SYS F.NSYS==1B5 ;/NOSYS F.NEW==1B6 ;/NEW F.NNEW==1B7 ;/NONEW F.SCN==1B8 ;/SCAN F.NSCN==1B9 ;/NOSCAN F.SLS==1B10 ;S.L. SWITCHES ARE LEGAL F.STAR==1B11 ;'*' IS LEGAL F.SARG==1B12 ;'*' SEEN IN ARGUMENT SCAN F.TYO==1B13 F.SSL==1B14 ;0: JOB'S SRC.LST 1: SYS SRC.LST F.TYPE==1B15 ;BIT USED BY TYPE F.NORB==1B16 ;BIT USED BY GETPP F.SL==F.LIB!F.NLIB!F.SYS!F.NSYS!F.NEW!F.NNEW F.FS==S.BITS F.PT==F.SCN!F.NSCN F.COM==F.SSL!F.SLS!F.STAR!F.SARG!F.SL!F.PT MAXFS==9 ;MAX # FILESTRUCTURES IN A S.L. ALTMOD==.CHESC ;RECOGINIZED ALTMODE ;GETTAB CONSTANTS MON503==2 ;MON.VERS. FOR 503 OR LATER (ST%TDS OF %CNSTS (STATES)) ;PATH. CONSTANTS SFDLEN==6 ;MAX LEVEL OF NESTED SFD'S PT.SYS==1 ;/SYS BIT PT.NEW==2 ;/NEW BIT ;SOME SYMOBLS NOT IN C.MAC YET (6-1-72) IFNDEF .FSDJN,<.FSDJN==1> IFNDEF .FSDPP,<.FSDPP==2> IFNDEF .FSDFL,<.FSDFL==3> SETSRC: JFCL ;IN CASE OF CCL RESET SETZM F COMERR: ;HERE IF COMMAND ERROR (AFTER ERROR MSG.) MOVE P,PDP ST1: INIT TTY, SIXBIT .TTY. XWD WH.TTY,RH.TTY EXIT ;EXIT IF NO TTY MOVEI A,B.TTY MOVEM A,.JBFF## INBUF TTY,1 OUTBUF TTY,1 MOVEI I,R.TTY SETZM ICH MOVEI O,W.TTY MOVX A,%CNSTS ;GET MONITOR 'VERSION' GETTAB A, JSP A,NEVERR LDB A,[POINTR (A,ST%TDS)] MOVEM A,MONVER GETPPN A, ;GET JOBS PPN JFCL MOVEM A,PPN PJOB A, ;GET JOB # MOVEM A,JOB LISTEN: PUSHJ P,STAR ;TELL USER WE ARE HERE TXZ F,F.COM MOVE C,[CAOBJ] PUSHJ P,GETNAM JRST [JUMPE C,NXTCOM JUMPE A,NXTCOM MOVEI N,[ASCIZ/?ILLEGAL COMMAND /] PUSHJ P,MSG6BA JRST COMERR ] PUSHJ P,@COFSET(C) ;HERE (POPJ) ON SUCCESSFUL COMPLETION OF COMMAND NXTCOM: PUSHJ P,EOLSKP JRST STXERR CAIN ICH,.CHCNZ EXIT SETZM ICH JRST LISTEN STYPE: PUSHJ P,SSLCHK JRST TYPE JTYPE: PUSHJ P,SLBITS ;SET F BITS ACCORDING TO S.L. SPECIFICATIONS JRST COMERR TXNE F,F.LIB ;PRINT BITS AS SWITCHES PUSHJ P,[MOVEI N,[ASCIZ\/LIB:\] PUSHJ P,MSG MOVE B,LIBPPN PJRST TYPPPN ] TXNE F,F.SYS PUSHJ P,[MOVEI N,[ASCIZ\/SYS\] PJRST MSG ] TXNE F,F.NEW PUSHJ P,[MOVEI N,[ASCIZ\/NEW\] PJRST MSG ] TXNE F,F.LIB!F.SYS!F.NEW ;IF ANY TYPED, FOLLOW WITH SPACE PUSHJ P,SPACE TYPE: TXZ F,F.TYPE ;BIT TO CONTROL TYPING OF COMMAS PUSHJ P,NEXFSI ;INIT NEXFS PUSHJ P,NEXFS JRST COMERR JRST TYP4 TYP1: PUSHJ P,NEXFS ;GET NEXT FS JRST COMERR AOJE N,TYPEND ;JUMP IF NO MORE SOS N TYP4: JUMPE N,[TXNE F,F.SSL ;QUIT IF SYS.S.L. JRST TYPEND MOVE A,['FENCE '] ;CHECK FOR FENCE PUSHJ P,TYPFS JRST TYP1 ] MOVE A,N PUSHJ P,TYPFS ;TYPE FILE STRUCTURE NAME ; MOVE B,N1 ;TYPE DIRECTORY ; PUSHJ P,TYPPPN PUSHJ P,COLON TXNE N2,S.WRTL ;NO SKIP IF WRITE PROTECTED PUSHJ P,[JSP N,MSG ASCIZ\/NOWRITE\ ] TXNE N2,S.NOCR ;NO SKIP IF NO CREATE PUSHJ P,[JSP N,MSG ASCIZ\/NOCREATE\ ] JRST TYP1 ;GO GET NEXT FILE STRUCTURE TYPEND: POPJ P, ;END OF COMMAND TYPFS: TXON F,F.TYPE ;IF NOT 1ST NAME PJRST SIXMSG PUSHJ P,COMMA ;TYPE PRECEEDING COMMA PUSHJ P,SPACE PJRST SIXMSG ;CREATE SYSTEM SEARCH LIST SCREAT: PUSHJ P,SSLCKP ;CHECK FOR SYS.S.L. CONSTRAINTS TXO F,F.STAR ;'*' OK JRST CREAT ;CREATE JOB SEARCH LIST JCREAT: TXO F,F.STAR!F.SLS ;'*' & S.L. SWITCHES OK CREAT: PUSHJ P,FSLIST ;READ LIST JRST COMERR JUMPE B,CREAT9 ;JUMP IF NO F.S.'S TYPED PUSHJ P,DEFSLI ;INIT STRUUO ARG LIST ;HERE FROM ADD COMMAND ALSO CREAT1: MOVNS B ;B=AOBJN IDX ON FSNAM/FSBIT HRLZS B ; PROCESS LEADING FS'S (THOSE BEFORE '*') CREAT2: MOVE N,FSNAM(B) ;GET NEXT FS SETZM N1 MOVE N2,FSBIT(B) CAMN N,['* '] ;HANDLE STAR AND FS'S AFTER STAR DIFFERNETLY JRST CREAT4 PUSHJ P,FSADD1 ;ADD FS TO LIST & CHK FOR DUPLICATES JRST COMERR PUSHJ P,CREATW AOBJN B,CREAT2 ;LOOP ON ALL FS'S IN FSNAM JRST CREAT8 ; HERE IF '*' CREAT4: PUSHJ P,FSADD1 ;DONT CHANGE STATUS OF FS'S ALREADY LISTED JRST COMERR JFCL ; JUST IGNORE THEM JRST CREAT7 ;GO LOOK FOR ANY FS'S FOLLOWING * ; PROCESS TRAILING FS'S (THEY MUST FIRST BE REMOVED) CREAT6: MOVE N,FSNAM(B) SETZM N1 MOVE N2,FSBIT(B) CAMN N,['* '] ;WARN OF DUPLICAT *'S JRST [PUSHJ P,CREATW JRST CREAT7 ] PUSHJ P,FSSUB ;REMOVE THIS FS IF ALREADY IN LIST JRST COMERR JFCL PUSHJ P,FSADD1 ;AND THEN ADD TO END JRST COMERR JSP A,NEVERR CREAT7: AOBJN B,CREAT6 ;LOOP ON ALL FS'S IN FSNAM CREAT8: PUSHJ P,DEFSL ;DEFINE THE S.L. JRST COMERR CREAT9: PUSHJ P,SLSWIT ;ATTEND TO S.L. SWITHCES (IN F) JRST COMERR POPJ P, ;END OF COMMAND CREATW: PUSH P,A MOVE A,N ;WARN OF DUPLICAT MOVEI N,[ASCIZ/%DUPLICATE STRUCTURE /] PUSHJ P,MSG6BA POP P,A POPJ P, ;ADD TO SYSTEM SEARCH LIST SADD: PUSHJ P,SSLCKP JRST ADDD ;ADD TO JOBS SEARCH LIST JADD: TXO F,F.SLS ADDD: TXO F,F.STAR ;'*' OK PUSHJ P,FSLIST ;GET NEW F.S.'S JRST COMERR JUMPE B,[PUSHJ P,SLSWIT ;IF NO FS'S JUST DO S.L. SWITCHES JRST COMERR POPJ P, ;END OF COMMAND ] PUSHJ P,DEFSLI ;INIT STRUUO ARG LIST TXNE F,F.SARG ;IF '*' NOT TYPED: JRST CREAT1 PUSHJ P,INSTAR ;SIMULATE ONE JRST COMERR JRST CREAT1 ;PUT INITIAL '*' IN STRUUO ARG LIST INSTAR: PUSHJ P,DEFSLI ;INIT STRUUO ARGLIST MOVX N,'* ' SETZM N1 MOVX N2,0 PUSHJ P,FSADD0 POPJ P, JSP A,NEVERR JRST CPOPJ1 ;;MODIFY SYSTEM SEARCH LIST SMODIF: PUSHJ P,SSLCKP JRST MODIFY ;MODIFY JOBS SEARCH LIST JMODIF: TXO F,F.SLS MODIFY: TXO F,F.STAR PUSHJ P,FSLIST ;READ LIST JRST COMERR JUMPE B,MODIF9 ;JUMP IF NO F.S.'S TYPED PUSHJ P,INSTAR ;SIMULATE INITIAL '*' JRST COMERR MOVNS B ;B=AOBJN IDX ON FSNAM/FSBIT HRLZS B MODIF2: MOVE N,FSNAM(B) ;GET NEXT FS SETZM N1 MOVE N2,FSBIT(B) PUSH P,A ;SAVE LENGTH OF CURRENT S.L. PUSHJ P,FSADD0 ;ADD FS TO LIST & CHANGE STATUS IF ALREADY THERE JRST [POP P,A JRST COMERR ] SKIPA ;OK IF ALREADY IN LIST PUSHJ P,MODIFW ;WARN IF NOT IN LIST POP P,A AOBJN B,MODIF2 ;LOOP ON ALL FS'S IN FSNAM MODIF8: PUSHJ P,DEFSL ;DEFINE THE S.L. JRST COMERR MODIF9: PUSHJ P,SLSWIT ;ATTEND TO S.L. SWITHCES (IN F) JRST COMERR POPJ P, ;END OF COMMAND MODIFW: CAMN N,['* '] ;IF NOT IN LIST POPJ P, ; AND NOT '*' PUSH P,A MOVE A,N ;ITS NOT OK--WARN USER MOVEI N,[ASCIZ/%STRUCTURE NOT IN SEARCH LIST /] PUSHJ P,MSG6BA POP P,A POPJ P, ;REMOVE FROM SYSTEM SEARCH LIST SREMOV: PUSHJ P,SSLCKP JRST REMOVE ;REMOVE FROM JOBS SEARCH LIST JREMOV: TXO F,F.SLS REMOVE: TXO F,F.STAR PUSHJ P,FSLIST ;GET LIST OF F.S. TO REMOVE JRST COMERR JUMPE B,REMOV9 ;JUMP IF NONE PUSHJ P,INSTAR ;GET CURREN S.L. JRST COMERR ; REMOVE F.S. IN FSNAM FROM S.L. IN FSBLOK MOVNS B HRLZS B REMOV2: MOVE N,FSNAM(B) ;GET NEXT FS CAMN N,['* '] ;'*' MEANS ALL JRST [PUSHJ P,DEFSLI JRST REMOV6 ] PUSHJ P,FSSUB JRST COMERR PUSHJ P,MODIFW ;WARN USER IF NOT IN LIST AOBJN B,REMOV2 REMOV6: PUSHJ P,DEFSL JRST COMERR REMOV9: PUSHJ P,SLSWIT JRST COMERR POPJ P, ;END OF COMMAND ;COMMANDS THAT LOOK LIKE S.L. SWITCHES JSYS: TXOA F,F.SYS ;SYS JNSYS: TXO F,F.NSYS ;NOSYS JRST JSLS JNEW: TXOA F,F.NEW ;NEW JNNEW: TXO F,F.NNEW ;NONEW JRST JSLS JLIB: SETZM C ;LIB:[PPN] PUSHJ P,LIBARG JUMPE C,JSLS MOVEI N,[ASCIZ/?ILLEGAL ARGUMENT/] PUSHJ P,MSGTTY JRST COMERR JNLIB: TXO F,F.NLIB ;NOLIB JSLS: PUSHJ P,SLSWIT JRST COMERR POPJ P, ;END OF COMMAND ;CHECK TO SEE IF OK TO DO SOMETHIN WITH SYS.SEARCH LST ;RET+1 IF OK (F.SSL SET) SSLCKP: ;HERE TO CHECK IF NEED PRIVILEGES ;STRUUO WILL CHECK AND GIVE ERROR RETUURN SSLCHK: MOVX A,MON503 ;5.03 OR LATER? CAMLE A,MONVER JRST [MOVEI N,[ASCIZ/?COMMAND REQUIRES 5.03 OR LATER/] PUSHJ P,MSGTTY JRST COMERR ] TXO F,F.SSL ;YES-SET SYS.S.L BIT POPJ P, ;INITILIZATION FOR NEXFS NEXFSI: TXNN F,F.SSL ;SYS.SRC LST? JRST [SETOM SLBLOK POPJ P, ] SETZM SLBLOK+.DFGJN ;YES-SETUP FOR GOBSTR SETZM SLBLOK+.DFGPP SETOM SLBLOK+.DFGNM POPJ P, ;SUBROUTINE TO GET NEXT F.S. IN SRC.LST ;CALL F.SSL BIT=1 IF SYS.SRC.LST ;RET+1 ERROR--MESSAGE TYPED ;RET+2 N=F.S. NAME (OR -1) IF END ; N1=PPN ENTRY ; N2=STATUS BITS ; A,B,C PRESERVED NEXFS: TXNE F,F.SSL ;SYS.SRC.LST? JRST NEXSS ;YES MOVE D,[.DFJST+1,,SLBLOK] ;NO--USE JOBSTR JOBSTR D, PJRST STRUER MOVE N,SLBLOK+.DFJNM MOVE N1,SLBLOK+.DFJDR MOVE N2,SLBLOK+.DFJST JRST CPOPJ1 NEXSS: MOVE D,[XWD .DFGST+1,SLBLOK] GOBSTR D, POPJ P, MOVE N,SLBLOK+.DFGNM MOVE N1,SLBLOK+.DFGDR MOVE N2,SLBLOK+.DFGST JRST CPOPJ1 ;INIT FOR DEFSL DEFSLI: TXNE F,F.SSL ;SYS.S.L.? JRST DEFSSI ;YES MOVX A,.FSSRC ;NO--USE .FSSRC FUNCTION MOVEM A,FSBLOK MOVX A,1 POPJ P, DEFSSI: MOVX A,.FSDSL MOVEM A,FSBLOK SETZM FSBLOK+.FSDJN ;0 JOB# & PPN INDICATES SYS.S.L. SETZM FSBLOK+.FSDPP MOVX A,DF.SRM ;BIT TO CAUSE FS'S TO BE REMOVED FROM S.L. MOVEM A,FSBLOK+.FSDFL MOVX A,.FSDFL+1 POPJ P, ;DEFINE NEW SEARCH LIST ;CALL A=NUMBER OF WDS USED IN FSBLOK ; F.SSL=1 IF SYS.SEARCH-LIST =0 OTHERWISE ;RET+1 ERROR (MSG TYPED) ;RET+2 OK DEFSL: MOVSS A ;MAKE STRUUO AC HRRI A,FSBLOK STRUUO A, PJRST STRUER JRST CPOPJ1 ;PERFORM S.L. SWITCHES IN F (E.G. F.NEW,F.NNEW,F.LIB,ETC) SLSWIT: TXNN F,F.SL ;IF NO S.L. SWITCHES SPECIFIED JRST CPOPJ1 ; RETURN IMMEDIATELY MOVE A,F ;GET CURRENT STATE OF /NEW/SYS/LIB TXZ F,F.LIB!F.SYS!F.NEW MOVE B,LIBPPN PUSHJ P,SLBITS JRST COMERR EXCH A,F AND A,[F.LIB!F.SYS!F.NEW] ;A=CURRENT /SYS/LIB/NEW BITS EXCH B,LIBPPN ;B=CURRENT LIB-PPN (IF ANY) TXNE F,F.LIB ;IF LIB-PPN TYPED MOVE B,LIBPPN ; USE IT IORM F,A ;OR CURRENT AND NEW SO WONT TURN ANYTHING OFF TXNE F,F.NNEW ;UNLESS EXPLICITLY REQUESTED (E.G. /NONEW) TXZ A,F.NEW TXNE F,F.NSYS TXZ A,F.SYS TXNE F,F.NLIB TXZ A,F.LIB SETZB N1,N2 TXNE A,F.LIB MOVE N2,B TXNE A,F.SYS TXO N1,PT.SYS TXNE A,F.NEW TXO N1,PT.NEW MOVX A,N MOVNI N,3 ;DEFINE /LIB/SYS/NEW FUNCTION PATH. A, PUSHJ P,[MOVEI N,[ASCIZ\%/LIB/SYS/NEW NOT SUPPORTED IN THIS MONITOR\] PJRST MSGTTY ] JRST CPOPJ1 ;SET F.LIB,F.SYS,F.NEW BITS FOR THIS JOB ; IF F.LIB=1 PUT PPN IN LIBPPN ; PERSERVES A,B SLBITS: MOVNI N,4 MOVEI C,N PATH. C, JRST CPOPJ1 ;DONT SET ANY BITS IF NO /LIB/SYS/NEW TXNE N1,PT.SYS TXO F,F.SYS TXNE N1,PT.NEW TXO F,F.NEW JUMPE N2,CPOPJ1 ;JUMP IF NO LIB MOVEM N2,LIBPPN TXO F,F.LIB JRST CPOPJ1 ;TYPE DEFAULT PATH PTYPE: MOVE A,[PTHLEN,,PTHBLK] SETOM PTHBLK ;-1 TO READ THE CURRENT PATH PATH. A, ;GET THE PATH JRST ERRPTH ;OOPS PUSHJ P,RBRAK ;TYPE "[" HLRZ N,PTHPPN ;PROJECT PUSHJ P,OCTPRT ;TYPE IT PUSHJ P,COMMA ;"," HRRZ N,PTHPPN ;PROGRAMMER PUSHJ P,OCTPRT ;TYPE IT MOVE D,[XWD -SFDLEN,PTHSFD] PTYP1: SKIPN A,(D) ;NEXT SFD NAME JRST PTYP2 ;DONE PUSHJ P,COMMA PUSHJ P,SIXMSG ;TYPE THE SFD AOBJN D,PTYP1 ;AND GET THE NEXT PTYP2: PUSHJ P,LBRAK ;"]" MOVX A,3 ANDM A,PTHSSW SOSN PTHSSW ;SCAN SWITCH=1 IF NOT SCANNING PUSHJ P,[MOVEI N,[ASCIZ\/NOSCAN\] PJRST MSGTTY ] SOSN PTHSSW ;SCN SWITCH =2 IF SCANNING PUSHJ P,[MOVEI N,[ASCIZ\/SCAN\] PJRST MSGTTY ] JRST TYPEND ;SCAN NOSCAN COMMANDS PSCAN: TXOA F,F.SCN PNSCAN: TXO F,F.NSCN MOVE A,[PTHLEN,,PTHBLK] SETOM PTHBLK PATH. A, JRST ERRPTH JRST PCREA8 ;CREATE DEFAULT PATH PCREAT: MOVE C,PTAOBJ ;LEADING SWITCHES MOVEI D,PTXCT PUSHJ P,SWITCH JRST SWIERR TXO F,F.NORB ;TELL GETPP R.BRACKET NOT NECESSARY PUSHJ P,GETPP ;GET PPN JRST PTHERR MOVEM A,PTHPPN MOVE D,[-SFDLEN,,PTHSFD] CAIE ICH,"," ;SFDS COMMING? JRST PCREA6 ;NO PCREA4: PUSHJ P,GETARG ;YES-GET NEXT ONE JUMPE A,PTHERR ;ERROR IF NONE MOVEM A,(D) ;STORE IT AOBJP D,[MOVEI N,[ASCIZ/?TOO MANY SFDS/] PUSHJ P,MSGTTY JRST COMERR ] CAIN ICH,"," ;MORE SFDS ? JRST PCREA4 ;YES CAIN ICH,"]" ;END OF PATH? SETZM ICH ;YES-FLUSH BRACKET PCREA6: SETZM (D) ;TERMINAL 0 TO SFD LIST MOVE C,PTAOBJ ;LOOK FOR TERMINAL SWITCHES MOVEI D,PTXCT PUSHJ P,SWITCH JRST SWIERR PUSHJ P,EOLSKP ;END OF LINE? JRST PTHERR ;NO--SHOULD BE PCREA8: MOVEI A,0 TXNE F,F.SCN ;SET SCAN SWITCH MOVEI A,2 TXNE F,F.NSCN MOVEI A,1 MOVEM A,PTHSSW MOVNI A,2 MOVEM A,PTHBLK MOVE A,[PTHLEN,,PTHBLK] PATH. A, JRST [AOSE A JRST ERRPTH MOVEI N,[ASCIZ/%NON-EXISTENT SFD/] PUSHJ P,MSGTTY JRST COMERR ] POPJ P, ;END OF COMMAND PTHERR: JRST STXERR ERRPTH: MOVEI N,[ASCIZ/?THIS MONITOR DOES NOT SUPPORT SFD'S/] PUSHJ P,MSGTTY JRST COMERR ;ADD ENTRY TO FSBLOK ; IF N='*' ADD ALL FS'S OF CURRENT SEARCH LIST TO FSBLOK ;CALL FSADD0: STORE NEW STATUS (N2) IF NAME ALREADY IN FSBLOK ; FSADD1: IGNORE CALL (INCLUDING STATUS) IF NAME ALREADY IN FSBLOK ; A=INDEX OF LAST ENTRY IN FSBLOK ; N=SIXBIT NAME (OR '*') ; N1=PPN ARG (UNUSED) ; N2=STATUS BITS ;RET+1 ERROR CODE IN C: (SEE FSLIST) ;RET+2 SUCCESSFUL. FS WAS ALREADY IN LIST (THIS RETURN NEVER TAKEN IF N='*') ;RET+3 SUCCESSFUL. FS WAS NOT ALREADY IN LIST ; A (IDX ON FSBLOK) IS UPDATED IF FS ADDED ; B,N,N1,N2 PRESERVED FSADD0: SKIPA D,[1,,1] ;LH=FLAG TO INGNORE DUPLICATES FSADD1: MOVX D,1 ;SEARCH FSBLOK FOR THIS NAME CAMN N,['* '] ;IF '*' CALL FSTAR TO EXPAND JRST [PUSHJ P,FSTAR POPJ P, JRST CPOPJ2 ] FSADD: ;ENTERED HERE BY FSTAR WITH D SETUP FSADD2: CAIG A,(D) JRST FSADD3 CAMN N,FSBLOK(D) JRST [TLNN D,-1 ;ALREADY THERE--STORE STATUS? JRST CPOPJ1 MOVX C,S.WRTL!S.NOCR ;REMOVE NON-STRUUO BITS AND C,N2 MOVEM C,FSBLOK+2(D) JRST CPOPJ1 ;AND RETURN ] ADDI D,3 JRST FSADD2 FSADD3: CAIL A,FSBLKL-2 ;NOT THERE--IS THERE ROOM? JRST [MOVEI C,7 ;ERROR CODE 7 MOVEI A,[ASCIZ/?TOO MANY FILE STRUCTURES/] PJRST ERRM ] MOVEM N,FSBLOK(A) ;YES-STORE 3 WORDS SETZM FSBLOK+1(A) MOVX C,S.WRTL!S.NOCR ;REMOVE NON-STRUUO BITS AND C,N2 MOVEM C,FSBLOK+2(A) ADDI A,3 ;BUMP A CPOPJ2: AOS (P) ;RETURN + 3 JRST CPOPJ1 ;EXPAND '*' (WITH JOBSTR) AND PUT ENTRIES IN FSBLOK ;CALL LH(D)=0 IF IGNORE DUPLICATE ENTRIES ; =1 TO STORE NEW STATUS FOR DUPLICATES ;RET+1 ERROR ;RET+2 SUCCESS--A UPDATED AS NECESSARY (B,N,N1,N2 PRESERVED) FSTAR: PUSH P,N2 ;SAVE EVERYTHING PUSH P,N1 PUSH P,N HRRI D,1 ;SET D FOR CALL TO FSADD PUSH P,D PUSHJ P,NEXFSI ;INITILIZE JOBSTR ARG. FSTAR2: PUSHJ P,NEXFS JSP N,NEVERR AOJE N,FSTAR8 ;RETURN IF -1 (END OF LIST) SOJE N,FSTAR8 ;RETURN IF 0 (FENCE) MOVX D,S.SWIT ;IF SWITCHES TYPE WITH * TDNE D,-3(P) MOVE N2,-3(P) ; USE THEM INSTEAD OF JOBSTR'S MOVE D,0(P) ;GET D PUSHJ P,FSADD ;AND STORE IN FSBLOK JRST FSTAR9 JFCL JRST FSTAR2 ;LOOP FOR WHOLE SEARCH LIST FSTAR8: AOS -4(P) ;SKIP RETURN FSTAR9: POP P,D POP P,N POP P,N1 POP P,N2 POPJ P, ;REMOVE ENTRY FROM FSBLOK ;CALL N=NAME OF FS TO BE REMOVED ;RET+1 ERROR ;RET+2 NAME NOT IN LIST ;RET+3 NAME FOUND AND REMOVED ; B,N,N1,N2 PRESERVED FSSUB: MOVX C,1 ;C=INDEX ON FSBLOK CAIGE A,4 JRST CPOPJ1 ;RET+2 IF EMPTY LIST FSSUB2: CAME N,FSBLOK(C) ;SEARCH FSBLOK FOR NAME JRST [ADDI C,3 CAMGE C,A JRST FSSUB2 JRST CPOPJ1 ;NOT IN LIST--RET+2 ] SUBI A,3 ;FOUND IT--BLT OVER IT CAMG A,C ;IS THIS LAST ENTRY? JRST CPOPJ2 ;YES-WERE FINISHED MOVEI C,FSBLOK(C) HRLI C,3(C) BLT C,FSBLOK-1(A) JRST CPOPJ2 ;READ A LIST OF FILE STRUCTURES & SWITCHES ;CALL F.STAR=1 IF '*' IS LEGAL ; F.SLS =1 IF S.L. SWITCHES ARE LEGAL ;RET+1 ERROR -- CODE IN C ; 1-4: SWITCHES (MSG TYPED) ; 7 : TOO MANY F.S.'S (MSG TYPED) ; 10 : OTHER (MSG TYPED) ;RET+2 SUCCESSFULL SCAN ; B=NUMBER OF F.S.'S (MAY BE 0) ; F= GLOBAL SWITCHES ; FSNAM(I) = 6BIT F.S. NAMES (OR '*') ; FSBIT(I) = SWITCH BITS FSLIST: TXZ F,F.SL ;CLEAR S.L. BITS MOVX B,0 ;INIT F.S. COUNTER PUSHJ P,FSLIS9 ;GET INITIAL F.S. POPJ P, ;ERRORS JUMPE A,FSLIS6 ;NO F.S. IS OK FSLIS1: CAMN A,['* '] ;'*' ? JRST FSLIS2 ;YES--DONT CHECK IT PUSHJ P,BLESFS ;CK F.S. & GET STRUCTURE NAME POPJ P, ;ERRORS FSLIS2: AOS B ;BUMP COUNT MOVEM A,FSNAM-1(B) ;STORE NAME MOVX A,S.BITS ; AND BITS (ONLY THOSE FOR F.S.) AND A,F MOVEM A,FSBIT-1(B) CAIL B,FSNAML ;REACHED LIMIT ON F.S. ? JRST [PUSHJ P,FSLIS9 ;YES-IS THERE MORE? POPJ P, ;ERRORS JUMPE A,CPOPJ1 ;NO-OK RETURN MOVX C,7 ;YES-ERROR CODE 7 MOVEI A,[ASCIZ/?TOO MANY FILE STRUCTURES/] PJRST ERRM ] CAIN ICH,"," ;MORE F.S.'S EXPECTED? JRST [SETZM ICH ;YES-FLUSH DELIMITOR PUSHJ P,FSLIS9 ;GET NEXT F.S. POPJ P, ;ERRORS JUMPE A,GETFS7 ;ERROR IF NONE JRST FSLIS1 ;AND LOOP ] FSLIS6: PUSHJ P,NELSKP ;END OF LINE? JRST CPOPJ1 ;YES-OK RETURN GETFS7: PUSHJ P,NELSKP ;HERE ON GARBAGE OR MISSING F.S. JRST [MOVEI A,[ASCIZ/? MISSING FILE STRUCTURE/] PJRST ERRM2 ] JUMPN A,GETFS8 ; IF NO NAME-TYPE OFFENDING CHARACTER MOVEI A,-40(ICH) ROT A,-6 GETFS8: MOVEI N,[ASCIZ/?ILLEGAL NAME OR CHARACTER /] PJRST MSG6BA FSLIS9: ;RETURN A F.S. IN A TXZ F,F.FS ;CLEAR PER-F.S. BITS PUSH P,B PUSHJ P,GETFS ;LOOK FOR A F.S. SOS -1(P) ;ERRORS POP P,B JRST CPOPJ1 ;RET+2 IF NO MORE ;CHECK NAME TO SEE IF ITS A DISK THAT USER CAN ACCESS ; ALSO MAP TO FILE STRUCTURE NAME IF NECESSARY ;CALL A=6BIT NAME ;RET+1 ERROR: C=10, MSG TYPED ;RET+2 SUCCESSFUL: (WARNING MAY HAVE BEEN TYPED) ; A=EQUIVALENT STRUCTURE NAME BLESFS: PUSH P,A DEVCHR A, ;WHAT IS IT? TXNN A,DV.DSK ;DISK? PJRST BLESF8 ;NO TXNN A,DV.AVL ;AVAILABLE? JRST [MOVEI N,[ASCIZ/?UNAVAILABLE /] PJRST BLESF9 ] MOVE A,(P) ;NOW DO A DSKCHR MOVEM A,DSKCHA+.DCNAM MOVE A,[.DCSAJ,,DSKCHA] DSKCHR A, PJRST BLESF8 ;NOT A DSK? TXNE A,DC.NNA ;ACCESS ALLOWED? JRST [MOVEI N,[ASCIZ/?NO NEW ACCESS ALLOWED /] PJRST BLESF9 ] TXNE A,DC.STS ;DOWN? JRST [MOVEI N,[ASCIZ/?UNUSABLE /] PJRST BLESF9 ] SKIPLE A,DSKCHA+.DCSAJ ;SINGLE ACCESS? JRST [CAMN A,JOB ;YES-FOR THIS JOB? JRST BLESF4 ;YES-OK MOVEI N,[ASCIZ/?SINGLE ACCESS /] PJRST BLESF9 ] BLESF4: TXNN A,DC.HWP!DC.AWL ;WRITABLE? JRST BLESF2 ;YES TXNN F,S.WRTL ;NO--WAS /NOWRIT SPECIFIED? PUSHJ P,[MOVEI N,[ASCIZ/%READ-ONLY /] ;NO WARN USER PJRST BLESF6 ] BLESF2: POP P,A ;GET ORIGINAL ARG CAME A,DSKCHA+.DCSNM ;SAME AS STRUCTURE NAME? PUSHJ P,[PUSHJ P,MSGQUO MOVEI N,[ASCIZ/ IS NAME FOR /] MOVE A,DSKCHA+.DCSNM PJRST MSG6BA ] MOVE A,DSKCHA+.DCSNM ;GET STRUCTURE NAME JRST CPOPJ1 BLESF6: EXCH A,(P) ;GET NAME AND SAVE A PUSHJ P,MSG6BA EXCH A,(P) POPJ P, BLESF8: MOVEI N,[ASCIZ/?UNDEFINED STRUCTURE /] BLESF9: POP P,A MOVEI C,10 PJRST MSG6BA ;GET A FILE STRUCTURE ;CALL F.STAR=1 IF '*' IS LEGAL ; F.SLS =1 IF S.L. SWITCHES ARE LEGAL ;RET+1 ERRORS: ; C=1-4: SWITCH ERRORS (MSG TYPED) ; 10: OTHER ERROR (MSG TYPED) ;RET+2 F.S. AND/OR SWITCHES FOUND: ; A=0 IF NO F.S. FOUND (MAY BE SWITCHES) ; A=NAME (OR '*') ; ICH=DELIMITING CHARACTER ; F=BITS CORRESPONDING TO SWITCHES SEEN GETFS: TXNN F,F.SLS ;S.L. SWITCHES OK? JRST GETFS1 ;NO MOVE C,CMAOBJ ; CK FOR LEADING SWITCHES MOVEI D,CMXCT PUSHJ P,SWITCH JRST GETFSE GETFS1: PUSHJ P,GETAR0 ;READ FILE STRUCTURE NAME JUMPN A,GETFS2 ;JUMP IF NO NAME TXNE F,F.STAR ;'*' LEGAL? CAIE ICH,"*" ; IF SO, IS IT '*'? JRST CPOPJ1 ;NO--RETURN MOVX A,'* ' ;MAKE A=6BIT * TXO F,F.SARG ;REMEMBER THAT * WAS SEEN JRST GETFS3 GETFS2: CAIN ICH,":" ;NO PENALTY FOR : GETFS3: SETZM ICH ; JUST FLUSH IT PUSH P,A ;SAVE FS NAME MOVE C,FSAOBJ ;LOOK FOR SWITCHES TXNE F,F.SLS MOVE C,F2AOBJ MOVEI D,FSXCT TXNE F,F.SLS MOVEI D,F2XCT PUSHJ P,SWITCH JRST [POP P,D ;ERROR-POP A JRST GETFSE ;SWITCH ERROR ] POP P,A JRST CPOPJ1 GETFSE: PJRST SWIERR ;SWITCH ERROR -- PRINT MSG & RETURN ;GET A PPN ;CALL PPN=JOBS PPN (FOR DEFAULTING) ; F.NORB=1 IF DONT REQUIRE TERMINATING RIGHT BRACKET ;RET+1 ERROR ;RET+2 A=PPN GETPP: PUSHJ P,SST GETPP0: CAIE ICH,"[" ;MUST BE ENCLOSED IN BRACKETS POPJ P, SETZM ICH ;FLUSH "[" PUSHJ P,SOCTIN ;GET PROJECT SKIPN N ;IF 0 USE USER'S PROJ MOVS N,PPN HRLZ A,N PUSHJ P,SST ;IGNORE SPACES CAIN ICH,"]" ;IF THIS IS THE END: JRST GETPP2 ; USE JOBS PROG.NO. CAIE ICH,"," ;OTHERWISE MUST BE A COMMA POPJ P, PUSHJ P,SOCTIN ;GET PROGRAMMER SKIPN N ;IF 0 USE JOBS PROG. GETPP2: MOVE N,PPN HRR A,N PUSHJ P,SST ;IGNORE SPACES CAIE ICH,"]" ;MUST END WITH BRACKET JRST [TXNN F,F.NORB ;REQUIRE TERMINAL BRACKET? POPJ P, ;YES-ERROR RET JRST CPOPJ1 ;NO ] SETZM ICH ;FLUSH BRACKET JRST CPOPJ1 ;TYPE PPN IN B WITH BRACKETS TYPPPN: PUSHJ P,RBRAK ;TYPE [ HLRZ N,B PUSHJ P,OCTPRT ;PROJECT PUSHJ P,COMMA HRRZ N,B PUSHJ P,OCTPRT ;PROGRAMMER PJRST LBRAK ;] GETARG: PUSHJ P,SSST GETAR0: PUSHJ P,SST MOVE N,[POINT 6,A] SETZ A, JRST GETAR3 ;ALREADY HAVE A CHAR GETAR1: PUSHJ P,(I) POPJ P, GETAR3: CAIL ICH,"A" CAILE ICH,"Z" SKIPA ;SKIP IF NOT A LETTER JRST GETAR2 CAIL ICH,"0" CAILE ICH,"9" POPJ P, ;EXIT FIRST NON-ALPHANUMERIC GETAR2: SUBI ICH,40 ;MAKE SIXBIT TLNE N,770000 IDPB ICH,N JRST GETAR1 SOCTIN: PUSHJ P,SSST SETZ N, OCTINL: CAIL ICH,"0" CAILE ICH,"7" POPJ P, ;EXIT FIRST NON-OCTAL DIGIT ASH N,3 ADDI N,-60(ICH) PUSHJ P,(I) JRST [MOVX ICH,.CHCNZ POPJ P, ] JRST OCTINL ;SCAN A LIST OF SWITCHES ;CALL C=AOBJN PTR TO 6BIT NAME TABLE ; D=ADDRESS OF CORRESPONDING XCT TABLE ;RET+1 ERROR: ; C=1: NON UNIQUE SWITCH (NAME IN A) ; 2: UNDEFINED SWITCH (NAME IN A) ; 3: BLANK SWITCH (LONE '/') ; 4: SWITCH ARGUMENT ERROR ;RET+2 NO SWITCHES OR ALL OK SWITCH: SUB D,C ;CALC. OFFSET TO XCT TABLE PUSH P,D ; AND SAVE IT ON STAACK PUSH P,C SWITC2: PUSHJ P,GETSWI ;GET A SWITCH JRST SWITC3 MOVE B,C SETZM C ;C=0 IS OK RETURN FROM XCT BELOW ADD B,-1(P) ;MAKE ADDRESS OF CORRESP. XCT XCT (B) JUMPN C,SWITC4 ;JUMP IF ERROR MOVE C,(P) ;RELOAD C AND DO IT AGAIN JRST SWITC2 SWITC3: SKIPN C ;IF 'NO SWITCH' RETURN AOS -2(P) ; GIVE SKIP RETURN SWITC4: POP P,D ;THROW AWAY TOP 2 ITEMS ON PDL POP P,D POPJ P, ;READ AND MATCH A SWITCH ;CALL C=AOBJN PTR TO 6BIT NAME TABLE ;RET+1 NO SWITCH OR ERRRORS ; C=0: NO SWITCH ; 1: SWITCH NOT UNIQUE (NAME IN A) ; 2: SWITCH UNDEFINED (NAME IN A) ; 3: BLANK SWITCH (LONE '/') ;RET+2 SWITCH OK: C=CORRESPONDING AOBJN PTR GETSWI: PUSHJ P,SST ;SPACE PAST NOISE CAIE ICH,"/" JRST GETSW7 ;NO SLASH--NO SWITCH SETZM ICH ;FLUSH "/" PUSHJ P,GETNA0 ;AND LOOKUP NAME JRST GETSW8 ;ERRORS JRST CPOPJ1 ;GOOD RETURN GETSW7: SETZM C ;NO SWITCH--RETURN+1 C=0 POPJ P, GETSW8: CAIN C,0 ;NO NAME IS ERROR 3 MOVX C,3 POPJ P, ;TYPE SWITCH ERROR MESSAGES ;CALL C=1: NOT UNIQUE (NAME IN A) ; 2: UNDEFINED (NAME IN A) ; 3: BLANK (LONE '/') ; 4: ARGUMENT ERROR SWIERR: CAIE C,3 ;BLANK? JRST SWIER2 ;NO MOVEI N,[ASCIZ/?BLANK SWITCH /] PJRST MSGTTY SWIER2: CAIN C,1 ;GET APPROPRIATE MSG. MOVEI N,[ASCIZ/?NON-UNIQUE/] CAIN C,2 MOVEI N,[ASCIZ/?UNDEFINED/] CAIN C,4 MOVEI N,[ASCIZ/?ILLEGAL ARG FOR/] PUSHJ P,MSGTTY MOVEI N,[ASCIZ/ SWITCH '/] PUSHJ P,MSGTTY PUSHJ P,SIXMSG PUSHJ P,QUOTE PJRST CRLF ;READ AND MATCH A NAME ;CALL C=AOBJN PTR TO 6BIT NAME TABLE ;RET+1 ERROR OR NO NAME: ; C=0: NO NAME ; 1:NOT UNIQUE ; 2:NO MATCH ;RET+2 MATCHED: C=MATCHING AOBJN PTR GETNAM: PUSHJ P,SSST ;IGNORE NOISE GETNA0: PUSHJ P,SST PUSHJ P,GETAR0 JUMPN A,GETNA1 ;IF NO NAME: SETZM C ; RETURN+1 C=0 POPJ P, GETNA1: SETOM B ;MAKE A MASK FOR A IN B LSH B,-6 TDNE B,A JRST .-2 SETCMM B SETZM N ;REMEMBER PARTIAL MATCHES IN N GETNA3: CAMN A,(C) ;EXACT MATCH? JRST CPOPJ1 ;YES MOVE D,(C) ;NO-PARTIAL (MASKED) MATCH? AND D,B CAME D,A JRST GETNA5 ;NO JUMPE N,GETNA4 ;YES-1ST PARTIAL MATCH? MOVX C,1 ;NO--ERROR 1 POPJ P, GETNA4: MOVE N,C ;YES-REMBER ITS AOBJN GETNA5: AOBJN C,GETNA3 SKIPE C,N ;END OF TABLE--MATCH? JRST CPOPJ1 ;YES MOVX C,2 ;NO--ERROR 2 POPJ P, SSST: PUSHJ P,(I) MOVX ICH,.CHCNZ ;EOF SST: JUMPE ICH,SSST CAIE ICH,11 ;TAB CAIN ICH,40 ;OR SPACE JRST SSST ;IGNORE POPJ P, OCTPRT: IDIVI N,10 HRLM N1,(P) ;SAVE NEXT DIGIT ON STACK SKIPE N ;SKIP IF NO MORE DIGITS PUSHJ P,OCTPRT HLRZ OCH,(P) ;GET LAST DIGIT ADDI OCH,"0" ;MAKE ASCII PJRST (O) ;OUTPUT IT AND POP A LEVEL SIXMSG: MOVE N,[POINT 6,A] SIXMS1: ILDB OCH,N JUMPE OCH,CPOPJ ADDI OCH,40 PUSHJ P,(O) TLNE N,770000 JRST SIXMS1 POPJ P, ;TYPE ERROR MSG WITH 6BIT ARGUMENT ;CALL N=ASCIZ MESSAGE ADDRESS; A=6BIT ARG ;RET+1 C PRESERVED MSG6BA: PUSHJ P,MSGTTY PUSHJ P,MSGQUO PJRST CRLF ;TYPE 6BIT IN A ENCLOSED IN QUOTES MSGQUO: PUSHJ P,QUOTE PUSHJ P,SIXMSG PJRST QUOTE ;RET+1 NOT END OF LINE ;RET+2 END OF LINE EOLSKP: PUSHJ P,NELSKP JRST CPOPJ1 POPJ P, ;RET+1 END OF LINE ;RET+2 NOT END OF LINE NELSKP: PUSHJ P,SST NELSK0: CAIE ICH,.CHLFD ;LF? CAIN ICH,ALTMOD POPJ P, CAIN ICH,.CHCNZ ;^Z? POPJ P, JRST CPOPJ1 ;COMMAND TABLES DEFINE CTAB (AOBJ,OFFSET)< XLIST DEFINE CC (NAM,ADDR) CTABX==. CLIST AOBJ==CTABX-.,,CTABX DEFINE CC (NAM,ADDR) ;[47]MACRO V50 COMPATIBILITY OFFSET==.-CTABX CLIST LIST > DEFINE CLIST< CC ,JCREAT CC ,JREMOV CC ,JADD CC ,JMODIF CC ,JTYPE CC ,JSYS CC ,JNSYS CC ,JNEW CC ,JNNEW CC ,JLIB CC ,JNLIB CC ,SCREAT CC ,SREMOV CC ,SADD CC ,SMODIF CC ,STYPE CC ,PCREAT CC ,PTYPE CC ,PSCAN CC ,PNSCAN CC ,HELPCM > CTAB (CAOBJ,COFSET) ;SWITCH TABLES DEFINE STAB (AOBJ,XCTAD)< XLIST DEFINE SS (NAM,XCT) XCTAD: SLIST AOBJ: XCTAD-.,,.+1 DEFINE SS (NAM,XCT) SLIST LIST > ; FILE STRUCTURE SWITCHES DEFINE SLIST< SS , SS , SS , SS , SS , SS , SS , SS , > STAB FSAOBJ,FSXCT; ; SEARCH LIST SWITCHES DEFINE SLIST< SS , SS , SS , SS , SS , SS , > STAB CMAOBJ,CMXCT ; SEARCH LIST AND FILE STRUCTURE SWITCHES DEFINE SLIST< SS , SS , SS , SS , SS , SS , SS , SS , SS , SS , SS , SS , SS , SS , > STAB F2AOBJ,F2XCT ; PATH SWITCHES DEFINE SLIST< SS , SS , > STAB PTAOBJ,PTXCT; SWCREA: TXZA F,S.NOCR SWWRIT: TXZ F,S.WRTL TXO F,S.SWIT POPJ P, LIBARG: CAIE ICH,":" ;OPTIONAL ":"? JRST LIBAR2 PUSHJ P,(I) ;YES-FLUSH IT MOVEI ICH,.CHCNZ LIBAR2: PUSHJ P,GETPP0 ;GET PPN JRST LIBAR3 ;ERROR MOVEM A,LIBPPN TXOA F,F.LIB ;SET BIT IN F LIBAR3: MOVX C,4 ;RETURN ERROR 4 POPJ P, HELPCM: MOVEI N,HELPMS PUSHJ P,MSGTTY JRST ST1 HELPMS: ASCIZ \Src.Lst.Commands: C M A R T LIB NOLIB SYS NOSYS NEW NONEW Sys.Src.Lst.Commands: CS MS AS RS TS Path Commands: CP TP SCAN NOSCAN File Str. Switches: /WRITE /NOWRITE /CREATE /NOCREATE Src.Lst.Switches: /LIB:[ppn] /NOLIB /SYS /NOSYS /NEW /NONEW Path Switches: /SCAN /NOSCAN * = Current Src.Lst. For complete description type monitor command 'HELP SETSRC' \ STXERR: MOVEI N,[ASCIZ/?SYNTAX ERROR /] PUSHJ P,MSGTTY STXER1: PUSHJ P,NELSK0 JRST COMERR MOVE OCH,ICH PUSHJ P,W.TTY PUSHJ P,(I) MOVEI ICH,.CHCNZ JRST STXER1 STRUER: MOVE N,[IOWD STRERL,STRERM] PJRST ERCOD1 ERRM: PUSHJ P,CRLF ERRM2: MOVE N,A PUSHJ P,MSGTTY PJRST CRLF STRERM: ;STRUUO ERROR TABLE (XWD ERROR CODE, MSG. ADDR) ; XWD FSSNF%,[ASCIZ/?FILE STRUCTURE NOT FOUND/] ; XWD FSSSA%,[ASCIZ/?FILE STRUCTURE IS SINGLE-ACCESS/] ; XWD FSTME%,[ASCIZ/?TOO MANY FILE STRUCTURES/] XWD FSNPV%,[ASCIZ/?REQUIRES PRIVILEGED JOB/] ; XWD FSRSL%,[ASCIZ/?FILE STRUCTURE REPEATED IN LIST/] XWD 0,[ASCIZ/?STRUUO ERROR CODE /] STRERL==.-STRERM NEVERR: PUSH P,A MOVEI N,[ASCIZ/ ? SYSTEM ERROR AT LOC - /] OCTERR: PUSHJ P,MSGTTY POP P,N ;GET ROTTEN LOCATION HRRZS N PUSHJ P,OCTPRT JRST COMERR ;LOOKUP ERROR CODE MSG AND TYPE IT ;CALL A=EROR CODE ; N=AOBJ PTR TO ERROR MSG'S (XWD CODE,MSG-ADDRESSES) ; LAST ENTRY IN LIST IS TYPED IF CODE MATCH NOT FOUND ERCOD0: PUSHJ P,CRLF ERCOD1: AOBJP N,ERCOD5 ERCOD2: HLRZ C,(N) CAMN C,A JRST [HRRZ N,(N) PUSHJ P,MSGTTY PJRST CRLF ] AOBJN N,ERCOD2 ERCOD5: HRRZ N,(N) PUSHJ P,MSGTTY MOVE N,A PUSHJ P,OCTPRT PJRST CRLF CRLF: JSP N,MSGTTY ASCIZ . . COLON: JSP N,MSG ASCIZ/:/ COMMA: MOVX OCH,<","> PJRST (O) RBRAK: MOVX OCH,<"["> PJRST (O) LBRAK: MOVX OCH,<"]"> PJRST (O) SPACE: MOVX OCH,<" "> PJRST (O) QUOTE: JSP N,MSG ASCIZ/'/ STAR: JSP N,MSGTTY ASCIZ . *. QUES: MOVEI N,[ASCIZ . ?.] ; PJRST MSGTTY ;FALL INTO MSGTTY MSGTTY: MOVEI O,W.TTY MSG: HRLI N,440700 MSGL: ILDB OCH,N JUMPE OCH,CPOPJ PUSHJ P,(O) JRST MSGL R.TTY: TXZE F,F.TYO OUTPUT TTY, SOSLE RH.TTY+2 JRST TTYOKR INPUT TTY, STATZ TTY,20000 JRST TTYEOF TTYOKR: ILDB ICH,RH.TTY+1 JUMPE ICH,R.TTY CAIE ICH,.CHDEL ;DELETE? CAIN ICH,.CHCRT ;CAR.RET? JRST R.TTY CAIL ICH,.CHALT ;OLD ALTMODE? MOVX ICH,ALTMOD CAIL ICH,140 TRZ ICH,40 CPOPJ1: AOS (P) CPOPJ: POPJ P, TTYEOF: MOVX ICH,.CHCNZ POPJ P, W.TTY: SOSG WH.TTY+2 OUTPUT TTY, IDPB OCH,WH.TTY+1 TXO F,F.TYO CAIG OCH,.CHCRT ;CAR.RET? OUTPUT TTY, POPJ P, JOB: 0 ;JOB NUMBER PPN: 0 ;JOBS PPN MONVER: 0 ;MON.'VERSION' FIELD OF STATES WORD LIBPPN: 0 ;PPN ARG ON /LIB: PDP: IOWD 20,.+1 BLOCK 20 WH.TTY: BLOCK 3 RH.TTY: BLOCK 3 B.TTY: BLOCK 2*26 SLBLKL==.DFGST+1 SLBLOK: BLOCK SLBLKL ;S.L. (JOBSTR/GOBSTR) ARG.LIST FSBLKL==3*MAXFS+^D14 FSBLOK: BLOCK FSBLKL DSKCHL==.DCSAJ+1 DSKCHA==FSBLOK ;ARG.LIST FOR DSKCHR IFG DSKCHL-FSBLKL, FSNAML==MAXFS+1 FSNAM: BLOCK FSNAML FSBIT: BLOCK FSNAML PTHBLK: 0 ;ARG (= -1 OR -2) PTHSSW: 0 ;SCANNING SWITCH PTHPPN: 0 PTHSFD: BLOCK SFDLEN PTHLEN==.-PTHBLK PATCH: BLOCK 30 SETEND: END SETSRC