TITLE BACKUP -- MODULE TO SCAN COMMANDS FOR BACKUP -- %5A(625) SUBTTL P.F.CONKLIN/PFC/KCM/JEF/MEB/CLRH/VLR/CGN/WMG/DC/BPK/MS/BAH/EDS 18-FEB-88 DECVER==5 ;MAJOR VERSION DECMVR==1 ;MINOR VERSION DECEVR==625 ;EDIT NUMBER CUSTVR==0 ;CUSTOMER VERSION ;+ ;.AUTOPARAGRAPH.FLAG INDEX.FLAG CAPITAL.LOWER CASE ;.TITLE ^PROGRAM ^LOGIC ^MANUAL FOR ^^BACKUP\\ ;.SKIP 10.CENTER;^^BACKUP\\ ;.SKIP 1.CENTER;^PROGRAM ^LOGIC ^MANUAL ;.SKIP 1.CENTER;^VERSION 5A ;.SKIP -20.CENTER; ;+ ;.CHAPTER DEFAULT PARAMETERS ; ;^THE FOLLOWING PARAMETERS CAN PROBABLY BE REDEFINED:^^ ;.TS20.LM20.P-20,0.SK.SELECT D ;D+ ND AD.APP,1 ;DEFAULT APPEND TO LOG FILE ND AD.CKP,0 ;DEFAULT TO NO CHECKPOINTING ND AD.DLT,0 ;[234] DEFAULT DELETE ND AD.CYP,0 ;[234] DEFAULT ENCRYPTION ND AD.RPT,0 ;[234] DEFAULT REPEAT ND AD.SDL,0 ;[234] DEFAULT SDELETE ND AD.D75,1 ;DEFAULT DATE-75 DEFENSE ND AD.INT,0 ;DEFAULT INTERCHANGE MODE ND AD.MUL,1 ;DEFAULT MULTIREEL SAVE ND AD.PRO,000 ;[247] DEFAULT PROTECTION FOR INTERCHANGE RESTORE ND AD.SRD,0 ;DEFAULT SORT DIRECTORIES ND AD.SRF,0 ;DEFAULT SORT FILES WITHIN DIRECTORY ND AD.UNQ,0 ;DEFAULT TO NO UNIQUE EXTENSION ND AD.USG,0 ;DEFAULT TO NO USAGE ACCOUNTING ND AD.UST,1 ;DEFAULT USETI MODE ND AD.WRT,1 ;DEFAULT WRITE OUTPUT ND AD.XMP,1 ;DEFAULT TO EXEMPT DEFAULT PPNS ND LS$DEV,'LPT ' ;DEFAULT LISTING DEVICE ND LS$EXT,'LOG' ;DEFAULT LISTING EXTENSION ND LS$NAM,'BACKUP' ;DEFAULT LISTING FILE NAME ND NM$TBF,6 ;[507] NUMBER OF TAPE BUFFERS ND TY$MSG,MSGDIR ;DEFAULT TYPING MESSAGE LEVEL ;D.SELECT _; ;+ ; AD.SUP,SUPOLDER ;DEFAULT SUPERSEDE ; PD.SUP,SUPALWAYS ;DEFAULT SUPERSEDE IF /SUPERSEDE ; PD.UPR,750 ;DEFAULT UFD PROTECTION IF /UPROTECT ;- DM SUP,,SUPOLDER,SUPALWAYS ;DEFAULT SUPERSEDE DM UPR,777,,750 ;DEFAULT UPROTECT DM ERM,377777,^D100,^D100 ;[506] DEFAULT TAPE ERROR MAXIMUM ;+.LM0.P0,-1 ;\\ ^THE FOLLOWING PARAMETERS CAN NOT BE CHANGED WITHOUT ;RISKING FURTHER DEBUGGING: ^^ ;.LM20.P-20,0.SK.SELECT D ;D+ ND FX$MBF,.FXLEN ;LOCATION OF /MBEFORE **DUPLICATE OF BACKRS ND FX$MSN,.FXLEN+1 ;LOCATION OF /ASINCE **DUPLICATE OF BACKRS ND FX$CNT,.FXLEN+2 ;LOCATION OF MATCH COUNTER **DUPLICATE OF BACKRS ND FX$STR,.FXLEN+3 ;LOCATION OF STR FLAGS **DUPLICATE OF BACKRS ND FX$LEN,.FXLEN+4 ;LENGTH OF SCAN BLOCK **DUPLICATE OF BACKRS ND FT$RCV,1 ;TAPE ERROR RECOVERY CODE ND FT$STK,0 ;[341] MAKE LOCAL, GLOBAL, AND PERMENANT STICKY ;[341] TIME AND DATE SWITCHES RATHER THAN LET ;[341] ANY ASSERTION OF THE SWITCHES BECOME PERMANENT. ;[341] ENABLING THIS SWITCH REQUIRES THAT CERTAIN ;[341] LOCALS DEFINED IN SCAN BE REDEFINED AS GLOBALS ;[341] IN SCAN. ZERO IS THE ONLY SUPPORTED VALUE ;[341] FOR THIS SWITCH. ND FT$FRS,0 ;[335] INCLUDE FRS SUPPORT ** DUPLICATED IN ; END IFN FT$FRS ;[335] IFE FT$FRS,< ;[335] ND LN$TBF,40+4*200 ;LENGTH OF TAPE BLOCK **DUPLICATE OF BACKRS >; END IFE FT$FRS ;[335] ND LN$STR,^D36 ;LENGTH OF SYSTEM STRUCTURE TABLE **DUPLICATE OF BACKRS ;D.SELECT _; ;&.FILL;\\ ;+ ;^ASSEMBLY INSTRUCTIONS:^^ ; ; .LOAD BACKUP.MAC,BACKRS.MAC ;\\ ;^THE FOLLOWING FILES MUST BE ON ^^REL: SCAN,WILD,HELPER,ENDECR,USGSUB ;-\\ .REQUEST REL:SCAN ; REL:SCAN.REL %%%SCN==:7 .REQUEST REL:WILD ; REL:WILD.REL %%%WLD==:7 .REQUEST REL:HELPER ; REL:HELPER.REL .TEXT\DSK:ENDECR/SEG:LOW\ ; LOAD DSK:ENDECR.REL INTO LOW SEG IFN FT$USG,< .REQUIRE DSK:USGSUB ; USAGE ACCOUNTING SUBROUTINES > ;&^THEN . ^DO SO BY CHANGING ; OR PUSHS THE LIST OF LOCATIONS ;ONTO THE STACK. ;- DEFINE SAVE$ (LIST$),< XLIST IRP (LIST$),< PUSH P,LIST$ > LIST > ;+ ; POPS THE LIST OF LOCATIONS FROM THE STACK. ;- DEFINE RSTR$ (LIST$),< XLIST IRP (LIST$),< POP P,LIST$ > LIST > SUBTTL IMPURE STORAGE ;+ ;.TS8,16,24 ;.CHAPTER IMPURE STORAGE ;\\^LOCATIONS OF THE FORM S$FILE (S.LIST,LST) ;LISTING FILE SPEC S$FILE (S.TAPE,TAP) ;MAG TAPE FILE SPEC S$FILE (S.TTAP,TTP) ;TEMP TAPE FILE SPEC S.INIT::BLOCK FX$LEN ;INITIAL FILE SPEC S.CRYP::BLOCK LN$CRP ;TAPE'S ENCRYPTION KEY BLOCK 1 ;GUARANTEED END OF ASCIZ STRING ENCRYP: BLOCK LN$CRP ;/ENCRYPT AND VERIFY S.LOPN: BLOCK 3 ;LISTING FILE OPEN BLOCK S.LBPT::BLOCK 3 ;LISTING FILE BUFFER HEADER S.LENT::BLOCK LN$LEN ;LISTING FILE ENTER BLOCK S.MOPN::BLOCK 3 ;MAGE TAPE OPEN BLOCK S.MBPT::BLOCK 3 ;MAG TAPE BUFFER HEADER S.MENT: BLOCK LN$MEN ;MAG TAPE ENTER BLOCK S.APPD: BLOCK 1 ;APPEND (0=NO) S.CKPT::BLOCK 1 ;CHECKPOINT (0=NO) S.DELT::BLOCK 1 ;DELETE (0=NO) S.SDEL::BLOCK 1 ;[230] SUPERDELETE (0=NO) S.DT75::BLOCK 1 ;DATE-75 DEFENSE (0=NO) S.EMAX::BLOCK 1 ;[506] MAXIMUM NUMBER OF TAPE ERRORS S.EXIT: BLOCK 1 ;-1 IF RESET, +1 IF EXIT AT END OF WORK S.FFA:: BLOCK 1 ;-1 IF USER = [1,2] S.FRST::BLOCK 1 ;ADDRESS OF START OF LIST S.INTR::BLOCK 1 ;INTERCHANGE MODE (0=NO) S.LAST::BLOCK 1 ;ADDRESS BEYOND END OF LIST S.MULT::BLOCK 1 ;MULTIREEL (0=NO) S.NARL::BLOCK 1 ;NARROW LISTING FORMAT S.NGST::BLOCK 1 ;AOBJN WORD TO STRUCTURE TABLE S.NLDV::BLOCK 1 ;[375] -1 IF NUL TAPE DEVICE S.OPER::BLOCK 1 ;OPERATION OPRCHK==1 ;/CHECK OPRRST==2 ;/RESTORE OPRSAV==3 ;/SAVE S.PRNT::BLOCK 1 ;-1 IF PRINT S.REPT::BLOCK 1 ;/REPEAT(0=NO) S.RSUM::BLOCK 1 ;BLOCK TO RESUME AT S.SRTD::BLOCK 1 ;SORT DIRECTORIES MODE S.SRTF::BLOCK 1 ;SORT FILES MODE ;0=NONE, 1=ALPHA, 2=LOCATION S.SSNM::BLOCK LN$SSN ;SAVE SET NAME S.STOP::BLOCK 1 ;0=GO, 1=STOP S.STRS::BLOCK LN$STR ;SYSTEM STRUCTURE TABLE S.SUPR::BLOCK 1 ;SUPERSEDE: 1=ALWAYS; 2=OLDER; 3=NEVER S.TYMS::BLOCK 1 ;TYPING MESSAGE LEVEL MSGSIL==0 ;SILENCE MSGDIR==1 ;LIST DIRECTORIES (USERS, NOT SFDS) MSGFIL==2 ;LIST FILES S.UNIQ::BLOCK 1 ;GENERATE A UNIQUE EXTENSION S.UPRT::BLOCK 1 ;UPROTECT (0=NO CHANGE) S.USET::BLOCK 1 ;USETI (0=NO) IFN FT$USG,< S.USG:: BLOCK 1 ;/USAGE > S.VRBO::BLOCK 1 ;/MESSAGE AGRUMENT CODES S.WRIT::BLOCK 1 ;WRITE (0=NO) S.XMPT::BLOCK 1 ;EXEMPT DEFAULT PPNS (0=NO PPNS EXEMPTED) S.NFS:: BLOCK 1 ;CANCEL .RPNFS (ALLOW BACKUP OF FILES WITH ;.RBSTS=200000) S.NTPE:: BLOCK 1 ; RELATIVE TAPE NUMBER. [344] S.TPFG:: BLOCK 1 ; FLAG FOR SWITCH /TPNUM. [347] F$MBF: BLOCK 1 ;[511] CURRENT /MBEFORE **************** F$MSN: BLOCK 1 ;[511] CURRENT /MSINCE *Do NOT change * P$MBF: BLOCK 1 ;[511] STICKY /MBEFORE * ordering!! * P$MSN: BLOCK 1 ;[511] STICKY /MSINCE **************** IFN FT$STK, < ;[341] G$SNC: BLOCK 1 ;[341] PERMANENT STICKY /SINCE G$ASN: BLOCK 1 ;[341] PERMANENT STICKY /ASINCE G$MSN: BLOCK 1 ;[341] PERMANENT STICKY /MSINCE G$BFR: BLOCK 1 ;[341] PERMANENT STICKY /BEFORE G$ABF: BLOCK 1 ;[341] PERMANENT STICKY /ABEFORE G$MBF: BLOCK 1 ;[341] PERMANENT STICKY /MBEFORE >; END IFN FT$STK ;[341] SCNLWA==.-1 ;END ;& ;END OF LOW SEGMENT DATA SUBTTL INITIALIZATION ;+ ;.AUTOPA.FLAGS.TS8,16,24,32,,,,,,,,,.P0,-1.FILL.LOWER CASE ;.CHAPTER COMMAND SCANNING ;- ;+.HL1 INITIALIZATION ; ;^THE START ADDRESS IS ACTUALLY IN THE LOW SEGMENT SO THAT ;A _^^C FOLLOWED BY A ;USAGE SETOM S.WRIT ;[224] WRITE SETOM F$MBF ;[374] MBEFORE SETOM F$MSN ;[374] MSINCE MOVE T1,OSCNPT ;[224] GET OSCAN PTR PUSHJ P,.OSCAN## ;[224] GET INITIAL STATUS DEFINE SETUP$(LOC$,VAL$),< ;[224] SET DEFAULT ;[224] SPECIFIED BY SWITCH.INI IFN +1,-1, ;[224] IFN -1, ;[224] > > MOVEI T1,1 ;SET COMMON CONSTANT SETUP$ (S.DELT,AD.DLT) ;[234] DELETE SETUP$ (S.CRYP,AD.CYP) ;[234] ENCRYPTION SETUP$ (S.REPT,AD.RPT) ;[234] REPEAT SETUP$ (S.SDEL,AD.SDL) ;[234] SDELETE SETUP$ (S.APPD,AD.APP) ;APPEND SETUP$ (S.CKPT,AD.CKP) ;NO CHECKPOINTING SETUP$ (S.DT75,AD.D75) ;DATE-75 DEFENSE SETUP$ (S.EMAX,AD.ERM) ;[506] MAXIMUM TAPE ERRORS SETUP$ (S.INTR,AD.INT) ;NO INTERCHANGE SETUP$ (S.MULT,AD.MUL) ;MULTIREEL SAVES SETUP$ (S.SRTD,AD.SRD) ;SORT DIRECTORY SETUP$ (S.SRTF,AD.SRF) ;SORT FILES SETUP$ (S.SUPR,AD.SUP) ;SUPERSEDE SETUP$ (S.TYMS,TY$MSG) ;TYPING MESSAGE LEVEL SETUP$ (S.UNIQ,AD.UNQ) ;GENERATE UNIQUE EXTENSION SETUP$ (S.UPRT,AD.UPR) ;UPROTECT SETUP$ (S.USET,AD.UST) ;USETI IFN FT$USG, ;USAGE ACCOUNTING MOVE T2,FFAPPN ;GET FULL-FILE ACCESS CAMN T2,.MYPPN## ;[413] SEE IF THAT IS US JRST BKPSC2 ;[413] YES SETZM S.USET ;[413] NO--DEFAULT TO /NOUSETI IFN FT$USG, ;[430][413] AND MAKE SURE /NOUSAGE SKIPA ;[413] NOT [1,2] SO SKIP NEXT BKPSC2: SETOM S.FFA ;[413] TELL BACKRS TO USE MORE DISK BUFFERS SETUP$ (S.WRIT,AD.WRT) ;WRITE SETUP$ (S.XMPT,AD.XMP) ;EXEMPT SETUP$ (P$MBF,-1) ;/MBEFORE SETUP$ (P$MSN,-1) ;/MSINCE SETZ T1, ;[374] IF NOTHING, ZERO THE FOLLOWING SETUP$ (F$MBF,1) ;[374] MBEFORE SETUP$ (F$MSN,1) ;[374] MSINCE SETUP$ (S.NFS,1) ;[374] NFS IFN FT$STK,< ;[341] MOVEI T1,MEMST2 ;[341] ROUTINE TO AID SCAN'S FILSTK MOVEM T1,MEMSTK## ;[341] MOVEI T1,CLEARP ;[341] ROUTINE TO AID SCAN'S CLERST MOVEM T1,CLRSTK## ;[341] >; END IFN FT$STK ;[341] ;+.HL1 MAIN COMMAND SCAN LOOP ; ;^NOW, CALL <.VSCAN TO DO THE COMMAND SCANNING. ^IT WILL ;LOOP UNTIL END OF FILE FROM THE COMMAND TERMINAL. ^THE ;ACTUAL OPERATIONS ARE ALL CALLED AS SUBROUTINES FROM ;<.VSCAN AS IT HITS THE VARIOUS ACTION VERBS. ;- CMDLOP: MOVE T1,VSCNPT ;POINT TO ARGUMENTS PUSHJ P,.VSCAN## ;DO ALL THE WORK ;+.HL1 END OF JOB ; ;^AT END OF FILE ON THE COMMAND TERMINAL, CONTROL RETURNS HERE. ;^THIS HAPPENS EITHER BECAUSE THE USER TYPED _^^Z, OR ;BECAUSE THE COMMANDS WERE GIVEN ON THE INITIAL LINE WHICH ;INVOKED THIS PROGRAM AND THEY HAVE ALL BEEN EXECUTED. ;- PUSHJ P,.MONRT## ;RETURN TO MONITOR JRST CMDLOP ;IF USER TYPES .CONTINUE, ; RESUME COMMAND LOOP ;ARGUMENT BLOCK FOR OSCAN OSCNPT: 4,,SCNBLK ;4 WORDS ;ARGUMENT BLOCK FOR VSCAN VSCNPT: 6,,SCNBLK ;6 WORDS ;COMMAND SCAN BLOCK FOR OSCAN AND VSCAN SCNBLK: IOWD VERBL,VERBN XWD VERBD,VERBM XWD 0,VERBP EXP -1 ;STANDARD HELP XWD 2,F$MBF ;2-WORDS OF LOCAL FILE SWITCHES XWD 0,P$MBF ; .. ;VERB CONTROL TABLE DEFINE SWTCHS,< SN APPEND,S.APPD, SP CHECK,,$CHECK,, SN CPOINT,S.CKPT, SN DATE75,S.DT75, SN DELETE,S.DELT, SN SDELETE,S.SDEL, ;[230] IMPLEMENT SUPERDELETE SWITCH SS DIRECTORIES,S.TYMS,MSGDIR, SN ENCRYPTION,S.CRYP, SP EOT,,$EOT,, SP ERRMAX,S.EMAX,.SWDEC##,ERM,FS.VRQ ;;[506] SN EXEMPT,S.XMPT, SS FILES,S.TYMS,MSGFIL, SS GO,S.STOP,0, SP INITIAL,,$INITI,,FS.VRQ SN INTERCHANGE,S.INTR, SP KILL,,.POPJ1##,, ;;FOR COMPLETENESS SP LIST,,$LIST,, SP MBEFORE,F$MBF,.SWDTP##,,FS.VRQ SP MSINCE,F$MSN,.SWDTP##,,FS.VRQ SN MULTIREEL,S.MULT, SP NLIST,,$NLIST,, SS NODIRECTORIES,S.TYMS,MSGSIL, SN NFS,S.NFS SS NOFILES,S.TYMS,MSGDIR, SS NOLIST,S.LIST,0, IFN FT$USG, SP NPRINT,,$NPRIN,, SP PAUSE,,.POPJ1##,, ;;FOR COMPLETENESS SP PRINT,,$PRINT,, SN REPEAT,S.REPT, SP RES,,$RESTO,, SP RESET,,BACKUP,, SP RESTORE,,$RESTO,, SP RESUME,,$RESUM,,FS.VRQ SP REWIND,,$REWIN,, SP SAVE,,$SAVE,, SS SILENCE,S.TYMS,MSGSIL, SP SKIP,,$SKIP,,FS.VRQ SP SORT,,$SORT,,FS.VRQ SP SSNAME,,S.SSNM>,.ASCQW##,SSN, SS STOP,S.STOP,1, SL SUPERSEDE,S.SUPR,SUP,PD.SUP, SP TAPE,S.TAPE,$TAPE,TAP,FS.VRQ SP TPNUMBER,,$TPNUM,,FS.VRQ ;[305] SN UNIQUE,S.UNIQ, SP UNLOAD,,$UNLOA,, SP UPROTECT,S.UPRT,.SWOCT##,UPR, SN USETI,S.USET, IFN FT$USG, SP *WHAT,,$WHAT,, SN WRITE,S.WRIT, > ;KEY WORD LISTS KEYS (SUP,) ;MISC. DEFINITIONS MX.SSN==1 ;DUMMY PD.SSN==0 ;DUMMY ;NOW BUILD THE TABLES DOSCAN (VERB) SUBTTL MISCELLANEOUS NON-ACTION VERBS ;+ ;.CHAPTER NON-ACTION VERBS ;- ;+.HL1 INITIAL (DECLARE FILE TO START WITH) ; ;^THE ;[413] END IFN FT$USG ;+.HL1 SORT (SPECIFY ORDER) ; ;^THE ) KEYS (SRT2,) SUBTTL TAPE POSITIONING VERBS ;+ ;.CHAPTER TAPE POSITIONING VERBS ;- ;+.HL1 EOT (SKIP TO END OF TAPE) ; ;^THE VERB ;[341] ;LOOP OVER THE INPUT FILE SPECIFICATIONS OPERLP: JUMPLE C,OPERDO ;END OF LIST, GO DO THE WORK PUSHJ P,.CLSNS## ;CLEAR STICKY DEFAULTS IFN FT$STK,< ;[341] PUSHJ P,CLEARF ;[341] CLEAR FILE AREA THAT .CLRFL WON'T > ;[341] PUSHJ P,.FILIN## ;GET FILE PUSHJ P,ALLSPC ;GO ALLOCATE ROOM FOR A SPEC PUSHJ P,GETSPC ;COPY THE OUTPUT SPEC CAIE C,"=" ;SEE IF WAS INPUT OR OUTPUT JRST OPRLP1 ;INPUT--GO COPY SPEC PUSHJ P,.CLSNS## ;OUTPUT--CLEAR STICKY DEFAULTS IFN FT$STK,< ;[341] PUSHJ P,CLEARF ;[341] CLEAR FILE AREA THAT .CLRFL WON'T > ;[341] PUSHJ P,.FILIN## ; AND GET INPUT SPEC OPRLP1: PUSHJ P,ALLSPC ;GO ALLOCATE ROOM FOR A SPEC PUSHJ P,GETSPC ;COPY THE INPUT SPEC CAIN C,"," ;SEE IF CORRECT SEPARATOR JRST OPERLP ;YES--LOOP FOR MORE JUMPG C,E.INCL## ;IF NOT DONE, USER ERROR ;HERE WHEN THE LIST HAS BEEN STORED AWAY. OPERDO: IFN FT$STK, < ;[341] PUSHJ P,CLERST## ;[341] CLEAR GLOBAL SWITCH AREA. > ;[341] PUSHJ P,APPDEF ;GO APPLY DEFAULTS PUSHJ P,ENCGET ;GET ENCRYTION KEY IF NEEDED PUSHJ P,TAPEDO ;OPEN TAPE PUSHJ P,INTERC ;APPLY INTERCHANGE DEFAULTS IF NEEDED PUSHJ P,.VERBO## ;GET /MESSAGE ARGS FROM SCAN MOVEM T1,S.VRBO ;SAVE FOR BACKRS ;HERE TO CALL THE WORK MODULE JRST OPDOLW ;GO TO LOW SEGMENT RELOC ;RELOCATE TO LOW SEGMENT OPDOLW: MOVEI T1,SAVEAC ;POINT TO AC SAVE AREA BLT T1,ESAVAC ;SAVE THEM ALL AWAY MOVSI T1,1 ;RELEASE THE SKIPN SAVDSK ;[314] (UNLESS ITS NOT FROM DISK) CORE T1, ;HIGH SEGMENT JFCL ;NICE TRY PUSHJ P,OPRCDN ;SHOW RUNNING AND TEST STOP JRST OPDONE ;KILL! PUSHJ P,BACKRS## ;CALL SAVE/RESTORE JRST OPDONE ;KILL! SKIPE S.LIST ;SEE IF LISTING NEEDED OUTPUT F.LIST, ; YES, FINISH UP BEFORE DISPLAYING MESSAGE OUTSTR DONMSG ;TELL THE OPERATOR WE'RE FINISHED ; HERE AT END OR IF OPERATOR SAYS "KILL" OPDONE: CLOSE F.LIST, ;CLOSE LISTING FILE RELEAS F.LIST, ;RELEASE CHANNEL SKIPGE S.OPER ;[250] SKIP IF NOT /SAVE JRST OPDON1 ;[250] IF /SAVE, SKIP THIS CODE WAIT F.MTAP, ;[250] WAIT FOR TAPE TO STOP SETZ T1, ;[250] CLEAR BUFFER COUNTER HRRZ T2,S.MBPT ;[250] GET CURRENT BUFFER ADDRESS HRRZ T3,0(T2) ;[250] GET NEXT BUFFER ADDRESS OPDON2: CAMN T3,T2 ;[250] BACK TO CURRENT BUFFER YET? JRST OPDON3 ;[250] YES, GET OUT OF LOOP SKIPG 0(T3) ;[250] IS THE USE BIT SET IN THIS ONE? AOS T1 ;[250] YES, ADD TO COUNT HRRZ T3,0(T3) ;[250] GO TO NEXT BUFFER IN RING JRST OPDON2 ;[250] LOOP THROUGH THE RING OPDON3: SKIPG T1 ;[250] ANY BUFFERS AHEAD NOW? JRST OPDON1 ;[250] NO, SO SKIP THIS MOVE T2,OPDON5 ;[250] OTHERWISE, SET UP TAPOP. MOVEI T4,F.MTAP ;[250] CHANNEL NUMBER MOVEI T3,.TFBSB ;[250] CODE TO BACKSPACE ONE BLOCK OPDON4: TAPOP. T2, ;[250] DO BACKSPACE MTBSR. F.MTAP, ;[250] BAD, TRY AN MTAPE TO DO IT SOJGE T1,OPDON4 ;[250] LOOP N+1 TIMES OPDON1: ;[250] RELEAS F.MTAP, ;RELEASE CHANNEL MOVX T1,PS.VIP ; GET INTERUPT IN PROGRESS FLAG [201] ANDCAM T1,PSITTY##+.PSVFL ;TURN OFF TTY [201] ANDCAM T1,PSIMTA##+.PSVFL ;TURN OFF MTA MOVX T1,PS.FOF ;TURN PSI OFF PISYS. T1, ;EXEC JFCL ;IGNORE ERROR SEGFLL: SKIPE SAVDSK ;[351][314] FIND OUT IF WE NEED TO DO GETSEG JRST SEGFL1 ;[351][314] NEVER THREW HI SEG AWAY MOVEI T1,SAVGET ;POINT TO SAVE-GET AREA GETSEG T1, ;GET BACK HIGH SEGMENT JRST SEGFAL ;DIE IF CAN NOT DO SEGFL1: MOVSI 17,SAVEAC ;[314] POINT TO AC SAVE AREA BLT 17,16 ;RESTORE ALL BUT 17 MOVE 17,SAVEAC+17 ;RESTORE AC 17 JRST OPDOHG ;GO BACK TO HIGH SEGMENT SEGFAL: OUTSTR SEGMSG ;ISSUE FATAL MESSAGE MONRT. ;EXIT TO MONITOR JRST SEGFLL ;A .CONTINUE WILL TRY AGAIN OPDON5: 2,,T3 ;[250] FOR TAPOP. DONMSG: ASCIZ / "Done / ;[205] RELOC ;SWITCH BACK TO HIGH SEGMENT OPDOHG: PORTAL .+1 ;[360] REENTRY POINT TO HIGH-SEG PUSHJ P,.TCRLF## ;[360] CLEAR TO A NEW LINE ON TERMINAL PUSHJ P,CHKSOM ;GO CHECK THAT SOME FILES WERE FOUND SETZM S.STOP ;CLEAR STOP FLAG PUSHJ P,RESCOR ;RESET CORE SKIPN T1,S.EXIT ;SEE IF RESET OR EXIT JRST .POPJ1## ;NO--GIVE GOOD RETURN TO VSCAN JUMPL T1,BACKUP ;IF RESET, GO RESTART PROGRAM PUSHJ P,.MONRT## ;IF EXIT, GO TO MONITOR SETZM S.EXIT ;CLEAR EXIT MODE JRST .POPJ1## ;IF CONTINUE, RETURN TO VSCAN SUBTTL INTERFACE TO BACKRS ;+ ;.CHAPTER INTERFACE TO BACKRS ;- ;+.HL1 S_.XXXX AREA FORMAT ; ;.NOAUTOP.AUTOTABLE.LM10.TS10.P-8,0 ; ; ;+ ; > OPRTBL: OPRCMD LN$OPR==.-OPRTBL ;LENGTH ;+ ; OPRDSP: OPRCMD ;+ ;^THE MACRO ;+ ;/2>-2(T4) ;[325] SET UP PATH HRLI T2,<<.FXBFR-.FXDIR>/2>+2 ;[325] ARG BLOCK SETOM (T2) ;[325] READ DEFAULT PATH PATH. T2, ;[325] DO IT JRST APPS1A ;[325] CAN'T PATH ADDI T2,2 ;[325] POINT TO PPN MOVE T3,(T2) ;[325] GET PPN FROM PATH BLOCK MOVEM T3,.FXDIR(T1) ;[325] SAVE IT SETOM .FXDIM(T1) ;[325] FLAG NOT A WILD PPN APPS1B: AOS T2 ;[325] BUMP SFD POINTER SKIPN T3,(T2) ;[325] AT END OF PATH? JRST [ SETO T3, ;[332] SET UP NON-WILD MASK SETZ T2, ;[332] SET FOR NO SFD'S BELOW CURRENT LEVEL JRST APPSFD ;[332] GO APPLY SFD'S ] ;[332] MOVEM T3,(T4) ;[325] NO - SAVE SFD NAME SETOM 1(T4) ;[325] FLAG NOT WILD SFD AOS T4 ;[325] INCREMENT POSITION AOBJN T4,APPS1B ;[325] LOOP OVER SFDS JRST APPSP3 ;[325] DONE - DO SWITCH DEFAULTS APPS1A: MOVE T2,.FXDIR(T1) ;[312][253] GET UFD TLNN T2,-1 ;IF PROJECT BLANK, HRROS .FXDIM(T1) ; REMOVE WILD-CARD TRNN T2,-1 ;IF PROGRAMMER BLANK, HLLOS .FXDIM(T1) ; REMOVE WILD-CARD TLNN T2,-1 ;IF PROJECT BLANK, HLL T2,.MYPPN## ; GET LOGGED IN PROJECT TRNN T2,-1 ;IF PROGRAMMER BLANK, HRR T2,.MYPPN## ; GET LOGGED IN PROGRAMMER MOVEM T2,.FXDIR(T1) ;STORE RESULTANT UFD APPSP2: SKIPN (T4) ;IF SFD BLANK, SETOM 1(T4) ; REMOVE WILD CARDS FROM MASK AOS T4 ;INCREMENT POSITION AOBJN T4,APPSP2 ;LOOP OVER SFDS ;HERE TO APPLY DEFAULTS TO SWITCHES APPSP3: MOVSI T3,.FXBFR-FX$LEN ;LOOP OVER SWITCHES HRRI T3,.FXBFR(T1) ;START OF SWITCHES APPSP4: SKIPN (T3) ;[316] IF EQUAL TO 0, SETOM (T3) ; SET TO -1 (IGNORE) AOBJN T3,APPSP4 ;LOOP OVER SWITCHES SETZM FX$CNT(T1) ;CLEAR COUNT OF MATCHES POPJ P, ;RETURN ; ;+ ;; END IFN FT$STK ;[341] ;+ ; INTER4: ROT T2,^D9 ;[356] POSITION INTPRO: DPB T2,[POINTR (.FXMOD(T1),FX.PRO)] ;[356] SET PROTECTION MOVEI T2,777B35 ;PROTECTION MASK DPB T2,[POINTR (.FXMOM(T1),FX.PRO)];SET MASK JRST INTER1 ;LOOP OVER ALL SPECS INTER2: SETZM .FXDEV(T1) ;ZILCH DEVICE MOVSI T2,-.FXLND ;NUMBER OF DIRECTORY LEVELS HRR T2,T1 ;START ADDRESS OF SPEC INTER3: SETZM .FXDIR(T2) ;CLEAR DIRECTORY SETOM .FXDIM(T2) ;CLEAR WILD CARDS FROM MASK ADDI T2,1 ;STEP POINTER AOBJN T2,INTER3 ;LOOP JRST INTER1 ;DO NEXT SPEC ;+ ;;END IFN FT$RCV MOVE T4,S.FRST ;FILE SPEC AREA MOVX T3,FX.PAR ;/PARITY TDNE T3,.FXMOD(T4) ;CHECK USER SET PARITY TXO T1,IO.PAR ;SET PARITY IORI T1,.IOBIN ;SET FOR BINARY MODE MOVEI T3,S.MBPT ;POINT TO MAG TAPE HEADERS SKIPGE S.OPER ;IF WRITE, MOVSI T3,S.MBPT ; POINT AS OUTPUT PUSHJ P,TAPOPE ;OPEN TAPE MOVEI T1,NM$TBF*<3+LN$TBF> ;SPACE FOR TAPE BUFFERS MOVE T4,.JBFF## ;GET START OF AREA ADDB T1,.JBFF## ;ADVANCE TO END+1 CAMG T1,.JBREL## ;SEE IF IN CORE JRST TAPED1 ;YES--PROCEED CORE T1, ;NO--GET ENOUGH JRST E$$TMI ;ERROR IF NO ROOM TAPED1: MOVEI T1,NM$TBF ;NUMBER OF BUFFERS MOVEI T2,.BFHDR(T4) ;ADDRESS OF FIRST+1 TAPED2: SETZM (T2) ;CLEAR USE BITS, ETC. MOVSI T3,LN$TBF+1 ;DATA WORDS SOJLE T1,TAPED3 ;SEE IF THIS IS LAST BUFFER HRRI T3,LN$TBF+3(T2) ;NO--GET LOC OF NEXT BUF+1 MOVEM T3,(T2) ;STORE ADDI T2,LN$TBF+3 ;ADVANCE TO NEXT BUFFER JRST TAPED2 ;LOOP TAPED3: HRRI T3,.BFHDR(T4) ;LOC OF FIRST BUF+1 MOVEM T3,(T2) ;STORE HRLI T3,(BF.VBR) ;VIRGIN RING TXO T3,BF.IBC ;INHIBIT BUFFER CLEAR MOVEM T3,S.MBPT ;SET IN BUFFER POINTER MOVSI T3,(POINT 36,,35) ;INDICATE 36-BIT BYTES MOVEM T3,S.MBPT+.BFPTR ;SET IN POINTER SETZM S.MBPT+.BFCTR ;CLEAR INITIAL COUNT POPJ P, ;RETURN ;+ ;