TITLE DUMPER A=1 B=2 C=3 D=4 E=5 I=5 F=6 N=6 SYM=7 TER=10 U=11 V=12 W=13 X=14 USRUFD=15 P=17 IF1,[ PRINTX /WHICH MACHINE? / .TTYMAC A .TTYFLG==.TTYFLG+1 PRINTX/A / .TTYFLG==.TTYFLG-1 DEFINE MCOND B ,TERMIN TERMIN ] BTTYP==1 BIOCE==400 UFDBYT==6 ; BYTE SIZE IN UFD DISCRIPTOR UNDSCP==1500,, ; BYTE POINTER TO DISCRIPTOR IN UFD (3RD WORD IN NAME AREA) UNREAP==2 ;DO NOT REAP THIS FILE UDDESC==11. ; RELITIVE FIRST LOCATION IN DISCRIPTOR UDTKMX==12. UDWPH==31. UDNAMP==1 UDBLKS==3 ;LH=QUOTA, RH=BLOCKS UDALLO==4 ;IF NON 0, LH=DISK NUMBER, RH=ALLOC LFBLOC==5 ; LENGTH OF FILE DIR ENTRY MAXTAP==3400 ;DON'T CHANGE THESE IF YOU'RE NOT RJL DIRADR==74000 ;AND EVEN THEN YOU SHOULD BE CAREFUL IFG MAXTAP*20-DIRADR, PRINTX /LOSE. DIRECTORY IN TAPE AREA/ MFDCH==1 ;MASTER FILE DIRECTORY INPUT UFDCH==2 ;FILE DIRECTORY INPUT DSKIN==3 ;DISK INPUT MAGOUT==4 ;MAG TAPE OUTPUT TYIC==5 ;TTY INPUT TYOC==6 ;TTY OUTPUT DSKOUT==7 ;DISK OUTPUT MAGIN==10 ;MAG TAPE INPUT LPTCH==11 ;LPT OR TPL OUTPUT ERRC==12 ;ERR DEVICE INPUT STATC==13 ;TAPE STATUS STORED ON DISK SAVET==14 ;SAVED TAPE FILE NAMES SNPLCH==15 .SEE SNPLACE LBUF==2000 ;LENGTH OF DATA BUFFER LPDL==100 ;LENGTH OF PDL LPAT==1000 ;LENGTH OF PATCH AREA %TSMOR==200 RPCNT==0 UUOTAB: ;THIS TABLE GENERATED BY FOLLOWING IRPW IRP X,,[PSIS,PDPT,POCT,PERR,PASC,SIXTYP,MTAPE,OPEN] RPCNT==RPCNT+1 IRPS Y,,X Y=RPCNT_33 .ISTOP TERMIN LOC UUOTAB+RPCNT-1 A!X TERMIN LUUOTB==RPCNT IFG LUUOTB-37,PRINTX /TOO MANY UUOS DEFINED/ DEFINE PRINT ARG PASC [ASCIZ \ARG\] TERMIN DEFINE DIE ARG PERR [ASCIZ /ARG/] TERMIN ZZ==. LOC 41 JSR UUOH JSR INT LOC ZZ TYIPD: 0 ;DEPTH IN IO-PUSHES ON TYIC TTYTYP: 0 ;HARD COPY PRNAM1: .FNAM1 PRNAM2: .FNAM2 MYNAME: 0 ;ORIGINAL USER NAME USNM: SIXBIT /FIRST/ ;CURRENT SYS (USER) NAME LUSNM: 0 ;LAST USER NAME DUMP COMPLETED FOR FUSNM: 0 ;FIRST USER NAME ON TAPE AUTHOR: 0 ;AUTHOR RFDATE: 0 ;REFERENCE DATE NTAPES: -1 ;NUMBER OF REEL IN CURRENT DUMP, -1==> WE DON'T KNOW THIS PARAMETER FDATE: 0 ;CREATION DATE OF FILE BLOCKS: 0 ;BLOCKS IN UDIR QUOTA: 0 ;QUOTA OF UDIR APPENF: -1 ;NO FILES DUMPED FOR CURRENT USER YET FILN: 0 ;FILE NUMBER IN FIND FLNI: -1 ;-1 FIRST TIME THRU FNG (NEED TO OPEN FILE DIRECTORY) GFRFQ: -1 ;FIRST TIME FLAG FOR QUOTA PRINTOUT MFDIN: -1 ;-1 FIRST TIME THRU M.F.D. (NEED TO OPEN M.F.D.) ITAPE: -1 ;-1 IF JUST REWOUND (NEED TO READ/WRITE TAPE-HEADER) TAPEF: 0 ;HOLDS TAPE STATUS REGISTER LFDIR: 0 ; STORAGE FOR LAST FILE POINTER TFIL: BLOCK LFBLOC ; TEMPORARY STORAGE FOR FILE SORT IN FIND MTCMD: 0 ;STORAGE FOR .MTAPÅ MAGOPN: 0 ; 0=> MAGOUT NOT OPEN,-1=> OPEN GTSYNF: 0 ; GETSYL NEGITIVE FLAG LNKFLG: 0 ;-1=>DUMPING OR LOADING A LINK DMPMOD: 0 ;-1 DUMPING, 0 RETRIEVING DPACK: 0 ;PACK TO DUMP OR -1 IF ALL DMPNWF: 0 ;-1 DUMP INCREMENTAL, 0 ALL FILES DMPNW1: 0 ;SET FROM DMPNWF FOR EACH USER, SET TO 0 ON TAPE FULL ;IE DOESNT REALLY KNOW WHAT FILES IT DMPED ;FIRST TIME SO DUMP ALL MRGSW: 0 ;-1 MERGE, 0 LOAD ALL FULLDMP: 0 ;-1 FULL DUMP, 0 SPECIFIC FILES MICFLG: 0 ;-1 MICROTAPE, 0 DISK LPTSW: 0 ;-1 LPT OR TPL OUTPUT ON, 0 OUTPUTTING TO TTY EOTFLG: 0 ;-1 WHEN HIT EOT ON READ, RESET BY REWIND EXPERM: 0 ;-1 WHEN ONLY EXPERIMENTING => .DMPCH NOT SET CKIDMP: 0 ;0=> CHECK INCREMENTAL DUMPS REAPSW: 0 ;-1 IF A REAP TO BE DONE AFTER DUMP NFTDMP: 0 ;NUMBER OF FILES THIS DUMP OR THIS TAPE, WHICHEVER IS SMALLER. CAREF: 0 ;-1 DONT OVERWRITE FILES WHICH HAVEN'T BEEN DUMPED CDMFL: 0 ;-1 CONTINUE A FULL DUMP FROM GIVEN USER, 0 ORDINARY DUMP LSTWHL: 0 ;-1 LIST WHILE DOING DUMP OR LOAD CHKFLG: 0 ;-1 CHECK OPERATION, 0 DUMP/LOAD DECIDF: 0 ;-1 DECIDE WHICH TAPES TO USE DATEF: 0 ;-1 DUMP ONLY FILES WITH CREATION DATES GREATER THAN OR EQUAL TO DATE DATESF: 0 ;-1 DUMP ONLY FILES BETWEEN TWO DATES DATE: 0 ;STORAGE FOR ABOVE DATE1: 0 ;STORAGE FOR UPPER BOUND IF THERE IS ONE ARCHVF: 0 ;-1 CALL THIS AN ARCHIVE DEVICE: 0 ;DEVICE IF SPECIFIED SUPERC: 0 ;-1 TO SUPPRESS DATA ERROR MESSAGES BASE: 10. ;OUTPUT BASE FLENTH: 0 ;FILE LENGTH RDERR: 0 ;READ DATA ERROR ;WORDS USED BY CHECKER ERRCNT: 0 ;ERRORS ENCOUNTERED THIS FILE ON TAPE IN ERRDSK: 0 ;ERRORS ENCOUNTERED THIS FILE IN DISK IN PNTALL: 0 ;-1 TO PRINT ALL FILES AS THEY GO ERRALL: 0 ;SET IF ANY ERRORS HAPPENED NEWCHR: 0 ;DUMP CHARACTER FOR THIS FILE WRDONG: 0 ;COUNT OF BAD WORDS LNTCNT: 0 ;DIFFERENCE IN LENGTH OF TWO FILES ALLWRD: 0 ;TOTAL WORDS ON THIS REEL SO-FAR LENGTH: 0 ;NUMBER OF FILE SPECS EOFF: 0 ;EOF FLAG FOR TAPE FILES ON DISK. USED IN AFIND COMMAND DIRIDX: 0 ;POINTER TO FILE DIRECTORY BUFFER(FDIRBF) BARROW: 0 ;BACK-ARROW FLAG LLIST==1500. ;NUMBER OF FILE SPECS ALLOWED IRP Y,,[TO,FM] IRP X,,[DEV,SNM,FN1,FN2] Y!!X: BLOCK LLIST TERMIN TERMIN FMDUMP: BLOCK LLIST IRP X,,[DEV,SNM,FN1,FN2] TIN!X: 0 ;HOLDS SPECS FOR FILGET TERMIN IRP X,,[DEV,SNM,FN1,FN2] TYN!X: 0 ;HOLDS SPECS FOR FILGET TERMIN DAYTIM: 0 ;HOLDS CREATION DATE AND TIME OF FILE DURING FIND COMMAND PSNAM: 0 ;SNAME TO BE PRINTED BY FIND COMMAND PFF1: 0 ;FILE NAME TO BE PRINTED BY FIND COMMAND PFF2: 0 ; WRDCNT: 0 ;COUNT OF WORDS IN FILE SAVAOB: 0 ;AOB OF FIRST BAD WORD INTAC: BLOCK 20 ;SAVED ACS DURING INTERRUPT GREATF: -1 ;0 ==> > FILE HACKED DURING DUMP THBLK: -LTHBLK,,0 ;TAPE-HEADER-BLOCK THTPN: -1 ;TAPE NUMBER,,NUMBER OF REEL IN THIS DUMP, -1==> WE DON'T YET KNOW THIS PARAMETER THDATE: 0 ;TAPE CREATION DATE THTYPE: 0 ;0 RANDOM, >0 FULL DUMP, <0 INCREMENTAL DUMP LTHBLK==.-THBLK LTHTPN: -1 ;LAST THTPN HBLK: -LHBLK,,0 ;FILE-HEADER-BLOCK HSNM: 0 ;SYS NAME HFN1: 0 ;FN1 HFN2: 0 ;FN2 HPKN: 0 ;PACK NUMBER HDATE: 0 ;CREATION DATE OF FILE ON DISK LHBLK==.-HBLK STAPST: ;BLOCK OF DATA STORED ON DISK FOR TAPE STATUS STAPEN: 0 ;TAPE NUMBER,,REEL NUMBER STDATE: 0 ;DATE TAPE LAST WRITTEN STYPE: 0 ;TYPE OF DATA LAST WRITTEN AS THTYPE ABOVE SFUSNM: 0 ;FIRST USER ON THIS TAPE SLUSNM: 0 ;LAST USER ON THIS TAPE SUSER: 0 ;UNAME OF PERSON WHO DUMPED THIS TAPE SDONE: 0 ;ZERO IF DUMP NOT COMPLETED,-1 REGULAR, 1 ARCHIVE BLOCK 20+.-STAPST INTERR: SIXBIT /DEVICE/ ;USED FOR DISK ERROR ANALYSIS SIXBIT /RANDOM/ SIXBIT /FILE/ SIXBIT /LOSER/ LPTO: SIXBIT / !LPT/ ;OUTPUT TO LPT (AND TPL ETC.) SIXBIT /WALL/ SIXBIT />/ 0 0 ;LEAVE THESE HERE !!!! MAGI: 26,,(SIXBIT /MT0/) ; BLOCK IMAGE,DON'T FLUSH TO EOF ON CLOSEî SIXBIT /MACRO/ SIXBIT /IN/ 0 0 ;LEAVE ALONE MAGO: SIXBIT / 'MT0/ ;OUTPUT TO MAG-TAPE SIXBIT /MACRO/ SIXBIT /OUT/ 0 0 MFO: (SIXBIT /DSK/) ;MASTER FILE DIRECTORY IN SIXBIT /M.F.D./ SIXBIT /(FILE)/ 0 0 FNO: SIXBIT / &DSK/ ;FILE DIRECTORY IN SIXBIT /.FILE./ SIXBIT /(DIR)/ 0 0 CRUFD: SIXBIT / DSK/ SIXBIT /..NEW./ SIXBIT /(UDIR)/ TRNI: SIXBIT / &DSK/ ;INPUT FROM DISK FN1: 0 ;FILE NAME 1 FN2: 0 ;FILE NAME 2 0 0 ;HERE IN CASE OF .FDELE TRNI ;***** ***** KEEP THESE NEXT 6 LOCATIONS TOGETHER FOR LINK INFO ***** LNKBLK: 200000,,(SIXBIT /DSK/) 0 0 LNKNM1: 0 ; LINK FN1 LNKNM2: 0 ;LINK FN2 PACKN: 0 ;PACK NUMBER OR SNAME IN LINK IF LEFT HALF NON ZERO ;****** ***** ***** CPYO: SIXBIT / #DSK/ ;OUTPUT TO DISK LFN1: 0 LFN2: 0 0 0 ERROP: 0,,(SIXBIT/ERR/) 1 0 0 0 SPLACE: SIXBIT /SYSENG/ ;PLACE TO STORE MACRO TAPES STATOP: SIXBIT / DSK/ ;FILE TO SAVE TAPE DATA IN SIXBIT /MACRO/ SIXBIT /TAPES/ 0 0 USRDEL: 0 ;FOR .FDELE 0 0 NPLACE: SIXBIT /.TAPE0/ NSVOP: SIXBIT / 'DSK/ SIXBIT /TAPE/ NSVTPN: 0 0 ;FOR .FDELE 0 0 ATLSNM: 0 SNBUF: BLOCK UDNAMP+1 SNTRY: SETZ SIXBIT /OPEN/ MOVEI SNPLCH [SIXBIT/DSK/] [SIXBIT/TAPE/] SNTRYN SETZ A SNTRYN: 0 RUSN: 0 ;NAMES USED IN SINGLE FILE RESTORE RFN1: 0 RFN2: 0 0 0 CUSN: 0 ;CURRENT USER NAME USED WHEN LSTWHL IS ON RDATE: SETZ SIXBIT /RFDATE/ [DSKIN] SETZ FDATE(2000) SDATE: SETZ SIXBIT /SFDATE/ [DSKOUT] SETZ FDATE SRDT: SETZ SIXBIT /SRDATE/ [DSKOUT] SETZ RFDATE RAUTH: SETZ SIXBIT /RAUTH/ [DSKIN] 402000,,AUTHOR SAUTH: SETZ SIXBIT /SAUTH/ [DSKOUT] SETZ AUTHOR SDMPBT: SETZ SIXBIT /SDMPBT/ [DSKOUT] SETZ [1] FILLEN: SETZ SIXBIT /FILLEN/ [DSKIN] SETZM LENGTH FILBLK: SETZ SIXBIT /FILBLK/ [DSKIN] 2000,,0 2000,,0 2000,,0 2000,,FDATE SETZM RFDATE SRFDAT: SETZ SIXBIT /SRDATE/ [DSKIN] SETZ RFDATE CLBIT: SETZ SIXBIT /SDMPBT/ [STATC] SETZ [0] RESRDT: SETZ ;RESTORE REF DATE SIXBIT /RESRDT/ SETZ [DSKIN] RRDATE: SETZ SIXBIT /FILBLK/ 1000,,DSKIN 2000,,0 2000,,0 2000,,0 2000,,0 402000,,RFDATE CREFDT: SETZ ;COPY REF DATE INTO FDATE SIXBIT /SFDATE/ [DSKIN] SETZ RFDATE TTYGET: SETZ SIXBIT /TTYGET/ MOVEI TYOC MOVEM A MOVEM B SETZM C TTYSET: SETZ SIXBIT /TTYSET/ MOVEI TYOC A B SETZ C TRRDFO: SETZ ;OPEN BLOCK FOR INDIRECT COMMAND FILES FROM DISK SIXBIT /OPEN/ 1000,,TYIC TINDEV TINFN1 TINFN2 SETZ TINSNM UUOH: 0 PUSH P,40 PUSH P,UUOH ;FOR RECURSIVE UUOS PUSH P,A PUSH P,B PUSH P,C LDB C,[330600,,40] ;OP CODE CAILE C,0 CAILE C,LUUOTB .VALUE ;ILLEGAL UUO PUSHJ P,@UUOTAB-1(C) CAIA ;REGULAR RETURN JRST SKPRET ;SKIP RETURN POP P,C POP P,B POP P,A POP P,UUOH POP P,40 JRST 2,@UUOH SKPRET: POP P,C POP P,B POP P,A POP P,UUOH POP P,40 AOS UUOH JRST 2,@UUOH AMTAPEK: PUSH P,40 OPEN MAGIN,MAGI JRST RET POP P,40 LDB A,[270400,,40] ; SPACE, DO SOMETHING ELSE, OR SET MODE(S) HRRZ B,40 ;SUBCOMMAND .CALL TAPBLC .VALUE POPJ P, TAPBLC: SETZ XWD SIXBIT / MTA/,SIXBIT / PE/ ;SO NMTAPE WILL NOT FIND THIS [MAGIN] A SETZ B APSIS: PUSHJ P,TYOS ;PRINT SIXCHARACTER SIXBIT WORD ASIXTYP: MOVE B,@40 JRST SIXTYO APDPT: MOVE C,-1(P) ;PRINT DECIMAL NUMBER MOVE A,@40 PUSHJ P,ADJUS JRST DPT ADJUS: PUSH P,A ;'FIXED' FORMAT HACK MOVM B,A SKIPN B MOVEI B,1 MOVEI C,10000. SKIPGE A IDIVI C,10. ADJUS1: PUSHJ P,TYOS CAML B,C JRST POPAJ IMULI B,10. JRST ADJUS1 APOCT: MOVE C,-1(P) ;PRINT OCTAL NUMBER PUSHJ P,TYOS MOVE A,@40 JRST DOT APERR: PUSHJ P,APASC ;PRINT ASCII AND DIE JRST ERR CRRPNT: PUSHJ P,CRR JRST PRINL5 AOPEN: MOVEI A,<.OPEN_-27.> ;DO A .OPEN, BUT ANALYZE FAILURE MOVE B,40 DPB A,[331100,,B] MOVSI C,10 ;DO NOT SET REFERENCE DATE ON DSKIN LDB A,[270400,,B] CAIN A,DSKIN IORM C,@40 SETZM A XCT B SETOM A LDB B,[270400,,B] CAIN B,DSKIN ANDCAM C,@40 SKIPN A JRST POPJ1 PUSH P,LPTSW SETZM LPTSW PUSH P,40 HRRZ B,UUOH SOS B POCT B ;PC OF OFFENDING OPEN POP P,A .SUSET [.RSNAM,,B] SKIPA TELL: PUSH P,LPTSW SETZM LPTSW PSIS (A) PRINT : PSIS 1(A) PSIS 2(A) PSIS B PASC [ASCIZ /;/] PUSHJ P,OPINFL POP P,LPTSW JRST CRR APASC: MOVE B,40 ;PRINT ASCIZ STRING HRLI B,440700 PRINL5: ILDB A,B JUMPE A,CPOPJ CAIN A,"_ ;GETS MAPPED INTO CR-LF JRST CRRPNT PUSHJ P,TYO JRST PRINL5 SIXTYO: MOVE C,[440600,,B] ;TYPE 6 SIXBIT CHARACTERS SIXTY1: ILDB A,C ADDI A,40 PUSHJ P,TYO TLNE C,770000 JRST SIXTY1 POPJ P, DOT: SKIPA B,[10] DPT: MOVEI B,10. MOVEM B,BASE JUMPL A,NDPT DPT1: IDIV A,BASE ;DECIMAL OUTPUT ROUTINE HRLM B,(P) SKIPE A PUSHJ P,DPT1 HLRZ A,(P) ADDI A,"0 JRST TYO NDPT: PUSH P,A MOVEI A,"- PUSHJ P,TYO POP P,A MOVNS A JRST DPT1 OPINFL: PUSH P,A ;ANALYZE IOC ERROR OPEN ERRC,ERROP JRST RET SKIPA A,[40] ;SPACE ERRLOP: .IOT ERRC,A CAIE A,15 CAIN A,14 JRST CLORIN PUSHJ P,TYO JRST ERRLOP CLORIN: .CLOSE ERRC, PUSHJ P,CRR POPAJ: POP P,A POPJ P, FUNCT: .STATUS UFDCH,A LDB A,[220600,,A] CAIN A,20 POPJ P, PUSH P,LPTSW SETZM LPTSW PSIS CHNTAB+UFDCH ;MAY JUST BE 'DEVICE NOT AVAILABLE' PUSHJ P,OPINFL PUSHJ P,CRR POP P,LPTSW MOVEI A,150. .SLEEP A, JRST FNG8 FNG: AOSE FLNI ;PUT ONE FILE NAME AND PACK # IN FN1,FN2,PACKN JRST NEXFLN ;NOT THE FIRST TIME FNG8: .OPEN UFDCH,FNO JRST FUNCT ;MAYBE TOO MUCH DISK ACTIVITY MOVE A,[-2000,,FDIRBF] .IOT UFDCH,A SKIPN GFRFLG JRST FNG1 HRRZ A,FDIRBF+UDBLKS MOVEM A,BLOCKS HLRZ A,FDIRBF+UDBLKS MOVEM A,QUOTA SKIPE GFREVR JRST FNG1 MOVE A,FDIRBF+UDALLO JUMPN A,CPOPJ FNG1: MOVE A,FDIRBF+1 MOVEM A,DIRIDX ADDI A,FDIRBF ;A POINTS TO BEGINNING OF NAME AREA MOVE C,A GETNM: CAILE A,FDIRBF+1777-4 JRST OUTENT ;END OF NAME AREA SKIPN W,(A) JRST NEXENT ;EMPTY SLOT MOVE B,2(A) SKIPE GFREVR JRST GETNM1 SKIPE GFRFLG TLNN B,UNREAP ;DON'T REAP FILES WITH REAP BIT ON CAIA JRST NEXENT TLNE B,1 JRST NEXENT GETNM1: SKIPL DMPNWF SKIPGE DATEF CAIA JRST IGNORQ TLNE B,1 ; LINK JRST NEXENT ; DON'T INCREMENTAL DUMP LINKS SKIPGE DATEF JRST IGNORQ TLNE B,400000 ;FILE-DUMPED BIT JRST NEXENT MOVE D,3(A) CAMN D,[-1] PUSHJ P,SM1DT IGNORQ: TLNE B,200064 JRST NEXENT ;FILE IS EITHER OPEN FOR WRITING OR SOME FLAVOR OF BEING DELETED MOVE D,DATE SKIPGE DATEF CAMG D,3(A) ; IF DATE SPECIFIED, DISREGARD IF CREATION DATE IS BEFORE SPECIFIED DATE CAIA JRST NEXENT MOVE D,DATE1 SKIPGE DATESF CAMLE D,3(A) ;IF DATES SPECIFIED, DISREGARD IF CREATION DATE IS AFTER SPECIFIED DATE CAIA JRST NEXENT TLNE B,1 ; LINK JRST GETLNK MOVEM W,(C) ;FIRST NAME MOVE W,1(A) MOVEM W,1(C) LDB W,[150500,,B] MOVEM W,2(C) ;PACK # MOVE W,3(A) MOVEM W,3(C) SKIPN W,4(A) MOVSI W,177777 AND W,[177777,,0] SKIPE GFRCRE ;GET CREATION DATE INSTEAD OFF REFERENCE DATE. MOVE W,3(A) MOVEM W,4(C) SKIPE GFRFLG PUSHJ P,LNTH ADDI C,LFBLOC NEXENT: ADDI A,5 JRST GETNM SM1DT: MOVEI D,6 HRLM D,TRNI MOVE D,(A) MOVEM D,FN1 MOVE D,1(A) MOVEM D,FN2 .OPEN DSKIN,TRNI POPJ P, .CALL RRDATE ;READ REF DATE SKIPA .CALL CREFDT ;COPY INTO CREATION DATE JFCL .CLOSE DSKIN, POPJ P, OUTENT: MOVEM C,LFDIR SETZM (C) ;ZERO ENTRY MEANS END OF DIRECTORY SETZM 1(C) SETZM 4(C) MOVE A,DIRIDX ADDI A,FDIRBF MOVEI D,LFBLOC MOVEI N,0 SKIPE GFRFLG SKIPN GFRQUO JRST OUTEN1 MOVEI N,4 ;SORT BY REFDATE IF GFR AND QUOTA PUSHJ P,SORT MOVE A,DIRIDX ADDI A,FDIRBF MOVEI N,3 MOVE C,A OUTEN2: SKIPN B,4(A) JRST OUTLUP OUTEN3: ADDI C,LFBLOC CAMN B,4(C) JRST OUTEN3 PUSHJ P,SORT JRST OUTEN2 OUTEN1: PUSHJ P,SORT MOVE A,DIRIDX ADDI A,FDIRBF MOVEI N,1 MOVE C,A BLUP: SKIPN B,(A) JRST OUTLUP BLUP1: ADDI C,LFBLOC CAMN B,(C) JRST BLUP1 PUSHJ P,SORT JRST BLUP OUTLUP: NEXFLN: SETZM RFDATE MOVE A,DIRIDX SKIPN B,FDIRBF(A) POPJ P, ;NO MORE FILES MOVEM B,FN1 MOVE B,FDIRBF+1(A) MOVEM B,FN2 MOVE B,FDIRBF+2(A) MOVEM B,PACKN MOVE B,FDIRBF+3(A) MOVEM B,LNKNM1 SKIPE GFRFLG MOVEM B,FLENTH MOVE B,FDIRBF+4(A) MOVEM B,LNKNM2 ADDI A,LFBLOC MOVEM A,DIRIDX SETZM LNKFLG HLRZ A,PACKN SKIPE A SETOM LNKFLG SKIPN LNKFLG MOVEM B,RFDATE POPJ1: AOS (P) CPOPJ: POPJ P, GETLNK: MOVEM W,(C) ;FIRST NAME MOVE W,1(A) MOVEM W,1(C) LDB B,[UNDSCP+2(A)] ; GET FIRST BYTE INDEX PUSH P,B+1 IDIVI B,UFDBYT ADDI B,FDIRBF+UDDESC MOVNI N,-6(C) IMULI N,6 HRLI N,60200 ;ASSUMING B=2 !!! ROT N,30. POP P,B+1 PUSHJ P,GETLSL CAMN W,[SIXBIT /BACKUP/] ; DON'T BACKUP LINKS TO THE BACKUP DIRECTORY JRST NEXENT SKIPN W SETOM W ;IN CASE OF ZERO SNAME MOVEM W,2(C) ; SNAME PUSHJ P,GETLSL MOVEM W,3(C) ; LINK FN1 PUSHJ P,GETLSL MOVEM W,4(C) ADDI C,LFBLOC JRST NEXENT ;GETLSL GET LINK SYLABL. 6 BIT CHARACTERS. AT MOST 6 TO A WORD RETURNED IN W ; NEXT CHARACTER QUOTED BY : DELIMITER IS ; OR ZERO CHARACTER GETLSL: PUSH P,A PUSH P,C PUSH P,D MOVEI D,6 ;AT MOST 6 CHARACTERS MOVE C,[440600,,W] SETZM W GETLS1: ILDB A,N CAIN A,'; ; END? JRST GETLS2 CAIN A,': ; QUOTE NEXT CHAR ILDB A,N IDPB A,C ; STORE CHARACTER SOJG D,GETLS1 GETLS2: POP P,D POP P,C POP P,A POPJ P, LNTH: LDB D,[UNDSCP+B] SETZM B IDIVI D,6 HLL D,QBTBLI(E) ADDI D,UDDESC+FDIRBF PUSHJ P,LN1 MOVEM B,3(C) POPJ P, LN1: ILDB E,D SKIPN E POPJ P, CAILE E,UDTKMX JRST LN2 ADD B,E JRST LN1 LN2: CAIGE E,UDWPH AOJA B,LN1 CAIN E,UDWPH JRST LN1 REPEAT 2, IBP D AOJA B,LN1 QBTBLI: 440600,, 360600,, 300600,, 220600,, 140600,, 060600,, 000600,, START: SKIPN MYNAME ;DON'T CHANGE IF NOT JUST LOADED .SUSET [.RSNAME,,MYNAME] .SUSET [.SSNAM,,MYNAME] .OPEN TYOC,[21,,(SIXBIT /TTY/)] .VALUE .SUSET [.SMASK,,[BIOCE+BTTYP]] ;ALLOW IOC INTERUPTS AND CHARACTER TYPED MOVEI P,PDL .CORE CORSIZ JRST .-1 PUSHJ P,INMFD .OPEN TYIC,[SIXBIT / TTY/(30)] ;CHANGE LOWER CASE TO UPPER CASE .VALUE .CALL TTYGET ;TRY TO TURN ON **MORE** PROCESSING JFCL TLZ C,%TSMOR .CALL TTYSET JFCL .STATUS TYOC,A LDB A,[300,,A] MOVEM A,TTYTYP SOS TTYTYP ;0==> PAPER 1==> SCREEN PRINT _ PUSHJ P,FORMF SIXTYP PRNAM1 PRINT . SIXTYP PRNAM2 PUSHJ P,CRR CONI 344,TAPEF PRINT TAPE MOVE A,TAPEF SETOM ITAPE TRZE A,100000 JRST TREW PUSHJ P,TYOS PRINT NOT TRNE A,40 ; IF UNIT NOT IDLE,MAYBE NOT THERE, LEAVE ITAPE ALONE SO QUIT WORKS. SETZM ITAPE TREW: PUSHJ P,TYOS PRINT REWOUND_ RET:MLP: .CORE CORSIZ JRST .-1 ;NO CORE SETZM GFRFLG SETZM GFRCRE SETZM EOTFLG SETZM USRDEL SETZM DATEF SETZM DATESF MOVEI P,PDL CLEARM LPTSW .CLOSE SAVET, .CLOSE LPTCH, .RESET MAGIN, ;ASSUMING MTAPE USES MAGIN AS ITS CHANNEL .CLOSE MAGIN, ;BEGINNING AND ERROR RESTART .CLOSE MAGOUT, SETZM MAGOPN SETZM LNKFLG PROMPT: PUSHJ P,CRR MOVEI A,"_ PUSHJ P,TYO ;PROMPT THE LOSER PUSHJ P,TYI CAIN A,"? JRST AHELP PUSHJ P,GETSL1 ;READ THE COMMAND JRST PROMPT JRST NOQ NOQ: CLEARM SUPERC CLEARM DMPMOD CLEARM CHKFLG MOVSI B,-NCOMS JUMPE SYM,RET CAME SYM,COMT(B) ;SEARCH THE COMMAND TABLE AOBJN B,.-1 MOVEI C,0 ;USED IN SOME COMMANDS AS DEFAULT JUMPL B,MLP1 ;NOT REASONABLE COMMAND ? ERR: PRINT ? JRST MLP FORMF: SKIPG TTYTYP POPJ P, PASC [ASCIZ /C/] POPJ P, ;THE FOLLOWING ROUTINE READS IN AND ALPHABETIZES THE MASTER FILE ;DIRECTORY OF THE DISK USING THE ASSUMED NAME M.F.D. (FILE). ;THE DIRECTORY IS READ IN WITH BLOCK IMAGE MODE INPUT INTO MFDLST, ;AND IS ASSUMED TO BE COMPLETELY CONTAINED IN 2000 OCTAL LOCATIONS. ;THE FIRST ENTRY IS ASSUMED TO BE IN LOCATION MFDLST+N, WHERE N IS THE CONTENTS OF MFDLST+1. ;EVERY ENTRY IS ASSUMED TO TAKE TWO LOCATIONS WITH THE NAME TO BE ALPHABETIZED IN THE FIRST ;LOCATION OF THE TWO. ; THE FINAL ALPHABETIZED LIST IS ONE WORD ENTRIES STARTING AT MFDLST. MFDN: SETOM APPENF AOS A,MFDIN MOVE A,MFDLST(A) JUMPE A,CPOPJ MOVEM A,USNM JRST POPJ1 INMFD: MOVEI A,6 ;BLOCK IMAGE HRLM A,MFO OPEN STATC,MFO JRST RET MOVE A,[-2000,,MFDLST] .IOT STATC,A MOVEI B,0 MOVE A,MFDLST+1 ;LOCATION OF FIRST ENTRY NEXUFD: SKIPN C,MFDLST(A) JRST GOON MOVEM C,MFDLST(B) ADDI B,1 GOON: ADDI A,2 CAIGE A,2000 JRST NEXUFD SETZM MFDLST(B) MOVEI A,MFDLST MOVEI C,MFDLST(B) MOVEI N,0 MOVEI D,1 ;THIS ROUTINE SORTS A BLOCK OF CORE LOGICALLY (NOT ARITHMETICALLY) ;A POINTS TO FIRST ENTRY ;C POINTS TO LOCATION AFTER LAST ENTRY ;N HOLDS ADDRESS OF KEY WORD RELATIVE TO BEGINNING OF BLOCK ;D HOLDS NUMBER OF WORDS TO BE MOVED TOGETHER ;BORROWED FROM SYSENG;PRUFD > SORT: MOVSI B,(SETZ) SORT1: HRLM C,(P) ;SAVE UPPER BOUND MOVN W,D ADD W,C CAML A,W JRST SORT7 ;ONE OR ZERO ENTRIES PUSH P,A ;SAVE LOWER BOUND SORT3: ADD A,N TDNN B,(A) ;BIT SET IN LOWER ENTRY? JRST SORT5 ;NO, INCREMENT TO NEXT AND MAYBE TRY AGAIN SUB A,N SUB C,D ADD C,N TDNE B,(C) ;BIT CLEAR IN UPPER ENTRY? JRST SORT8 ;NO, CHECK FOR END, DECREMENT C, AND TRY AGAIN SUB C,N IMUL D,[-1,,] ;MAKE AOBJN POINTER SHUFFL: ADDI A,(D) ADDI C,(D) MOVE W,(A) EXCH W,(C) MOVEM W,(A) SUBI A,(D) SUBI C,(D) AOBJN D,SHUFFL SORT4: ADD A,D ;INCREMENT LOWER BOUND POINTER TO NEXT ENTRY SORT2: CAME A,C ;ANY MORE ENTRIES LEFT? JRST SORT3 ;YES, GO PROCESS THEM ;A AND C NOW BOTH POINT TO FIRST ENTRY WITH BIT SET ROT B,-1 ;ROTATE BIT INDICATOR TO NEXT (LESS SIGNIFICANT) BIT POP P,A ;RESTORE LOWER BOUND OF ENTIRE SORT JUMPL B,SORT6 ;JUMP IF NO MORE KEY TO SORT ON PUSHJ P,SORT1 ;SORT BOTTOM PART OF TABLE HLRZ C,(P) ;RESTORE UPPER BOUND (SORT1 CLOBBERED A TO MIDDLE) PUSHJ P,SORT1 ;SORT TOP PART OF TABLE SORT6: ROT B,1 ;BACK UP KEY AGAIN SO AS TOO "NOT CLOBBER B" SORT7: HLRZ A,(P) ;MAKE A POINT ABOVE TABLE ENTRIES SORTED POPJ P, SORT5: SUB A,N JRST SORT4 SORT8: SUB C,N JRST SORT2 MLP1: SKIPGE COMDTB(B) ;NOT ALL COMMANDS USE THE TAPE DRIVE PUSHJ P,SETIT PUSHJ P,@COMDTB(B) ;DO COMMAND JRST RET TYI: .IOT TYIC,A ;TTY IN JUMPL A,TYICC1 ;EOF ON INDIRECT FILE CAIN A,^G JRST TYI SKIPE TYIPD JRST TYIDSK CAIE A,15 POPJ P, PUSHJ P,CAR MOVEI A,15 POPJ P, TYIDSK: CAIN A,12 JRST TYI JRST TYO ;ECHO STUFF ON TTY TYICC1: SKIPG TYIPD POPJ P, SOS TYIPD ;AT END OF INDIRECT FILE .IOPOP TYIC, JRST TYI CRR: MOVEI A,15 ;RETURN CARRIAGE CAR: PUSHJ P,TYO MOVEI A,12 JRST TYO TYO: SKIPGE LPTSW ;TTY/LPT/TPL OUT JRST LPTTYO TYO1: .IOT TYOC,A POPJ P, LPTTYO: .IOT LPTCH,A ;LPT/TPL OUT POPJ P, TYOS: PUSH P,A MOVEI A,40 ;OUTPUT SPACE PUSHJ P,TYO JRST POPAJ ;THE FOLLOWING ROUTINE INPUTS A SYLLABLE. ;THE SYLLABLE ENDS UP AS SIXBIT IN SYM. ;IF IT IS COMPOSED OF DIGITS, THEY ARE COMPILED INTO A DECIMAL NUMBER ;AND STORED IN N. ;CARRIAGE RETURN, LINEFEED, SEMI-COLON, COLON, BACKARROW, AND ALTMODE END THE ;SYLLABLE BUT ARE NOT PART OF IT. THE TERMINATOR IS PUT IN TER. ;NON-SIXBIT CHARACTERS CAUSE GETSYL TO PRINT ?? AND WAIT FOR THE ;ENTIRE SYLLABLE AGAIN. SINGLE CHARACTER RUBOUT WORKS, ;BUT IF YOU RUBOUT BEYOND THE FIRST CHARACTER, GETSYL RETURNS WITHOUT ;SKIPPING. SUCCESSFUL RETURN IS A SKIP RETURN. ^Q MAY BE USED TO ENTER ;A TERMINATOR AS SIXBIT SUCH AS SEMI-COLON, OR COLON. ;RUBBED OUT CHARACTERS ARE ECHOED. GETSYL: SETZB N,SYM SETZM GTSYNF MOVE B,[440600,,SYM] GETCH: PUSHJ P,TYI SKCHAR: CAIN A,177 JRST RUBOUT CAIE A,"_ ;BACK-ARROW CAIN A,33 ;ALTMODE JRST OUTSYL CAIE A,15 ;CARRIAGE RETURN CAIN 1,12 ;LINEFEED JRST OUTSYL CAIE A,"; ;SEMI-COLON CAIN A,": ;COLON JRST OUTSYL CAIN A,40 ;SPACE JRST OUTSYL CAIN A,^F JRST OUTSYL ;INDIRECT COMMAND IN CONTEXT OF "FILE=" CAIN A,^Q JRST QUOTE CAIN A,"- SETCMM GTSYNF NUMQ: CAIGE A,40 JRST CHERR CAIL A,"0 CAILE A,"9 JRST NONUM IMULI N,10. ADDI N,-"0(A) NONUM: SUBI A,40 TLNE B,770000 IDPB A,B JRST GETCH QUOTE: PUSHJ P,TYI CAIE A,177 JRST NUMQ MOVEI A,"^ PUSHJ P,TYO MOVEI A,"Q PUSHJ P,TYO JRST GETCH RUBOUT: CAMN B,[440600,,SYM] JRST RUB1 LDB A,B ADDI A,40 PUSHJ P,TYO CAIL A,"0 CAILE A,"9 JRST NOUNM SUBI N,-"0(A) PUSH P,SYM IDIVI N,10. POP P,SYM ;DIVISION CLOBBERS SYM NOUNM: SETZ A, DPB A,B ADD B,[60000,,] JRST GETCH RUB1: PRINT ?? PUSHJ P,TYOS POPJ P, CHERR: PRINT ?? PUSHJ P,TYOS JRST GETSYL OUTSYL: MOVEM A,TER AOSN GTSYNF MOVNS N JRST POPJ1 AHELP: MOVSI D,-NCOMS ;LIST COMMANDS PUSHJ P,CRR HELP1: PSIS COMT(D) PUSHJ P,CRR AOBJN D,HELP1 JRST MLP GETSL1: SETZB N,SYM MOVE B,[440600,,SYM] JRST SKCHAR ;COMMAND LOOK-UP TABLES COMT: SIXBIT /TAPED/ ;GENERATE TAPE DIRECTORY FROM MOUNTED TAPE SIXBIT /FIND/ ;FIND WHAT TAPE PARTICULAR FILE IS ON SIXBIT /DUMP/ ;DUMP FILES SIXBIT /LOAD/ ;LOAD FILES SIXBIT /CDUMP/ ;CONTINUE FULL DUMP SIXBIT /REWIND/ ;REWIND MAG TAPE SIXBIT /UNLOAD/ ;REWIND/UNLOAD SIXBIT /EOT/ ;GO TO END OF TAPE SIXBIT /LIST/ ;LIST FILES ON TAPE SIXBIT /MFD/ ;LIST OUT MFD SIXBIT /LISTF/ ;LIST OUT FILE DIRECTORY SIXBIT /HELP/ ;TYPE OUT COMMANDS SIXBIT /SPACE/ ;SPACE FORWARD N FILES SIXBIT /LSPACE/ ;SPACE FORWARD AND LIST FILES SIXBIT /CHECK/ ;CHECK FILES SIXBIT /LCHECK/ ;CHECK FILES AND LIST THEM SIXBIT /TAPES/ ;LIST ALL SAVED TAPE INFO SIXBIT /TAPE/ ;LIST SAVED INFO ABOUT ONE TAPE SIXBIT /TAPSET/ ;SET TAPE INFO FOR ONE TAPE SIXBIT /TLIST/ ;LIST FILES ON A TAPE(AS STORED ON DISK) SIXBIT /GFR/ ;GRIM FILE REAPER SIXBIT /QUIT/ ; REWIND AND KILL SIXBIT /ICHECK/ SIXBIT /RELOAD/ NCOMS==.-COMT COMDTB: ATAPED ;SETZ COMMAND MEANS THAT COMMAND USES THE TAPE DRIVE AFIND SETZ DUMP SETZ LOAD SETZ ACDUMP ARWND AUNLD AEOT SETZ ALIST AMFD ALISTF AHELP SETZ ASPACE SETZ ATPACE SETZ ACHECK SETZ ALCHEC ATAPES ATAPE TAPSET ATLIST AGFR AQUIT AICHEC ARELOA INT: 0 ;INTERRUPT ROUTINE 0 PUSH P,A MOVE A,INT TRNE A,BTTYP JRST TYILK ;CHARACTER TYPED POP P,A MOVEM 17,INTAC+17 MOVEI 17,INTAC BLT 17,INTAC+16 ;SAVE ACS MOVE 17,INTAC+17 PUSH P,LPTSW SETZM LPTSW MOVE A,INT TRNN A,BIOCE JRST RNDINT ;NOT TTY OR IOC .SUSET [.RAPRC,,A] LDB A,[330400,,A] CAIN A,MAGIN JRST INT1 CAIN A,DSKIN JRST INT3 CAIE A,MAGOUT ;NOT MACRO-TAPE INPUT JRST NTMGTP ;NOT MACRO TAPE OUTPUT EITHER ! SKIPN DMPMOD JRST NTDMMP ;NOT DUMPING ON MACRO-TAPE .STATUS MAGOUT,A LDB A,[330600,,A] CAIE A,9 JRST NTNDOF ;NOT END OF TAPE NTNDO1: MOVEI A,FOOB ;AH ! I KNOW HOW TO HANDLE END OF TAPE ! SKIPGE FULLDMP JRST INTX1A ;CAUSE PROGRAM TO RESTART AT FOOB PRINT _PHYSICAL END OF TAPE .DISMISS [ERR] INTX1A: JRST INTX1 RNDINT: PRINT _INTERRUPT POCT A .DISMIS [ERR] NTMGTP: PRINT _INTERRUPT ON CHANNEL POCT A PSIS CHNTAB(A) ;TYPE DEVICE AND DIRECTION .DISMIS [NAUGHT] NTDMMP: PRINT _INTERRUPT MAG TAPE OUT WHEN NOT DUMPING .DISMIS [NAUGHT] NTNDOF: PRINT _INTERRUPT POCT A PRINT MAG TAPE OUT .. SIMULATING E-O-T .. JRST NTNDO1 CHNTAB: SIXBIT /RANDOM/ SIXBIT /MFD IN/ SIXBIT /DRC IN/ SIXBIT /DSK IN/ SIXBIT /MAGOUT/ SIXBIT /TTY IN/ SIXBIT /TTYOUT/ SIXBIT /DSKOUT/ SIXBIT /MAG IN/ SIXBIT /LPTOUT/ SIXBIT /ERR IN/ SIXBIT /STATUS/ SIXBIT /RANDOM/ INT3: .STATUS DSKIN,A ;DISK INPUT ERROR LDB A,[330600,,A] CAIN A,3 JRST INT4 PRINT INTERRUPT POCT A PRINT DISK IN .DISMIS [NAUGHT] INT4: SKIPN SUPERC PRINT DATA ERROR DISK IN_ AOS ERRDSK SETOM ERRALL SOS C,INT+1 TLZ C,-1 POCT C ;PC OF LOSING INSTRUCTION MOVE A,[DSKIN,,INTERR] .RCHST A, MOVEI A,INTERR MOVE B,INTERR+3 PUSHJ P,TELL JRST INTX TYILK: MOVEI A,TYIC ;CHARACTER TYPED .ITYIC A, JRST POPEN CAIN A,^G .RESET TYOC, CAIN A,^G .DISMIS [ERR] ;DEATH TO CURRENT OPERATION JRST TYILK POPEN: POP P,A .DISMIS INT+1 NAUGHT: PUSHJ P,OPINFL JRST ERR FOOB: SKIPL LSTWHL JRST FOOB1 MOVEI A,^L SKIPE LPTSW PUSHJ P,TYO FOOB1: PUSH P,LPTSW SETZM LPTSW .CLOSE MAGOUT, ;CLOSE TAPE OUTPUT SETZM MAGOPN SKIPN EXPERM SKIPN DMPNWF JRST FOOE SKIPE CKIDMP JRST FOOE PRINT _REWINDING IFE MCOND DM,[ MOVE B,NFTDMP SOS B MOVN N,NFTDMP CAMN B,ITAPE ;IF NOT EQUAL, THEN IT IS NOT THE WHOLE TAPE JRST FOOB1A PUSHJ P,ASPAC1 SKIPA ] FOOB1A: PUSHJ P,ARWND PRINT _CHECKING INCREMENTAL DUMP PUSH P,USNM PUSHJ P,ICHECK POP P,USNM .SUSET [.SSNAM,,USNM] SETZM NFTDMP FOOE: PUSHJ P,ARWND ;REWIND IT PUSHJ P,GESELL ;GIVE AWAY BEGINNING AND LAST USER ON THIS REEL .RESET TYIC, FOOD: PUSH P,LPTSW SETZM LPTSW PRINT _MOUNT NEW TAPE THEN TYPE OK. POP P,LPTSW PUSHJ P,GETSYL JRST .-1 MOVE A,SYM CAMN A,[SIXBIT /OK/] JRST FOOC CAMN A,[SIXBIT /STOP/] JRST MAYBE JRST FOOD FOOC: PUSHJ P,ARWND MOVE A,USNM MOVEM A,FUSNM AOS NTAPES CLEARM DMPNW1 SETOM APPENF ;SO USER UFD WILL BE OPENED MOVEI A,DMPAGN ;RESTART LOCATION FOR NEXT REEL INTX1: MOVEM A,INT+1 INTX: POP P,LPTSW MOVSI 17,INTAC BLT 17,17 ;RESTORE ACS .DISMIS INT+1 MAYBE: PRINT GIVE UP ? PUSHJ P,TYI CAIE A,"Y JRST FOOD JRST MLP ;HE REALLY WANTS TO STOP DUMPING NOW GESELL: SETOM SDONE MOVEI A,1 SKIPE ARCHVF MOVEM A,SDONE PUSHJ P,SINFO PRINT REEL PDPT NTAPES ;OUTPUT REEL NUMBER AND USER SPAN ON THIS REEL PRINT FIRST USER = PSIS FUSNM PRINT LAST USER = PSIS LUSNM JRST CRR INT1: .STATUS MAGIN,A ;INTERUPT ON MAG TAPE INPUT LDB A,[330600,,A] CAIN A,3 JRST INT2 ;NON RECOV DATA ERR SKIPE DMPMOD ;IF DOING A DUMP, MUST BE A COMPARE JRST INT1A PRINT _INTERRUPT POCT A PRINT MAG TAPE IN .DISMIS [NAUGHT] INT1A: POP P,LPTSW .DISMIS [ICKEOT] INT2: AOS ERRCNT SETOM ERRALL PUSHJ P,TAPN PSIS HSNM PSIS HFN1 PSIS HFN2 PRINT DATA ERROR TAPE IN ..FILE BEING SKIPPED.._ PUSHJ P,OPINFL NOMESS: SETOM RDERR .CLOSE MAGIN, CONI 344,B TRNE B,10000 ;EOF? JRST INTX ;YES .OPEN MAGIN,MAGI JFCL PUSHJ P,ART3 JRST INTX ACDUMP: SETOM CDMFL ;CONTINUE FULL DUMP SKIPA DUMP: CLEARM CDMFL SETOM DMPMOD ;GENERALISED DUMP SKIPA LOAD: CLEARM DMPMOD ;GENERALISED LOAD MOVSI A,-NFIGS CLEARM @FIGTB2(A) AOBJN A,.-1 CLEARM MICFLG CLEARM CUSN SETOM DPACK MOVEI A,1 MOVEM A,THTYPE CAIN TER,15 JRST EXECU ;NO SWITCHES FORTH COMING LOOP: PUSHJ P,GETSYL POPJ P, CAIE TER,15 JUMPE SYM,LOOP PUSHJ P,SPACET CAIN TER,15 JRST EXECU JRST LOOP SPACET: JUMPE SYM,CPOPJ MOVSI A,-NFIGS CAMN SYM,FIGTB1(A) JRST SPASED AOBJN A,.-2 SUB P,[1,,1] PRINT ? PSIS SYM PUSHJ P,TYOS PRINT IGNORED PUSHJ P,TYOS JRST LOOP SPASED: SETOM @FIGTB2(A) POPJ P, FIGTB1: SIXBIT /INCREM/ SIXBIT /I/ SIXBIT /MERGE/ SIXBIT /M/ SIXBIT /FULL/ SIXBIT /F/ SIXBIT /CARE/ SIXBIT /C/ SIXBIT /EXPERI/ SIXBIT /E/ SIXBIT /LIST/ SIXBIT /L/ SIXBIT /DECIDE/ SIXBIT /D/ SIXBIT /DATE/ SIXBIT /DATES/ SIXBIT /ARCHIV/ SIXBIT /A/ SIXBIT /REAP/ SIXBIT /R/ SIXBIT /NO/ NFIGS==.-FIGTB1 FIGTB2: DMPNWF DMPNWF MRGSW MRGSW FULLDMP FULLDMP CAREF CAREF EXPERM EXPERM LSTWHL LSTWHL DECIDF DECIDF DATEF DATESF ARCHVF ARCHVF CKIDMP REAPSW REAPSW EXECU: PUSHJ P,SPRF CONSO 344,100000 ;BOT PUSHJ P,SPFF ; GET TO BEGINNING OF FILE CONSO 344,100000 ;BOT SETOM THTPN SKIPE REAPSW PUSHJ P,REAPCK SETZM NPLACE SKIPGE DATESF SETOM DATEF SETZM NFTDMP SKIPGE CDMFL SETOM FULLDMP ;CDUMP IS A FULL ONE CLEARM PACKN ;DO THE DUMP OR LOAD SKIPE MICFLG CLEARM DMPNWF ;NO INCREMENTAL DUMPS FROM DEC-TAPE SETZM THTYPE ;DEFAULT TO RANDOM SKIPGE DATEF SETOM FULLDMP SKIPGE FULLDMP SETOM EXPERM SKIPGE DATESF PUSHJ P,GETUDT ;GET UPPER DATE SKIPGE DATEF PUSHJ P,GETLDT SKIPGE FULLDMP AOS THTYPE SKIPGE DMPNWF SOS THTYPE SKIPGE A,DMPNWF SETOM FULLDMP ;AN INCREMENTAL DUMP IS ALWAYS A FULL ONE MOVEM A,DMPNW1 SKIPGE DMPMOD SKIPL FULLDMP PUSHJ P,FILGET ;GET FILE NAMES OF FILES TO DUMP AR LOAD SKIPE LSTWHL PUSHJ P,DEVGET ;GET LISTING DEVICE .SUSET [.SSNAME,,USNM] SKIPN DMPMOD JRST ART1 SKIPL CDMFL SKIPE ITAPE CAIA CLEARM NTAPES ;COMMAND WAS DUMP ONLY DO THIS IF NOT CDUMP AND TAPE IS REWOUND SETOM MFDIN SETOM FLNI SKIPE CDMFL JRST EXECU1 SKIPL FULLDMP JRST ADUMP2 ;SINGLE FILE DUMP JRST ADMP1 ;ALL REAPCK: PUSHJ P,CRR PRINT YOU SPECIFIED REAP PUSHJ P,CHECK POPJ P, GETUDT: PRINT LATEST DAY - PUSHJ P,GETDAT MOVE A,DATE HLLOM A,DATE1 POPJ P, GETLDT: PRINT EARLIEST DAY - JRST GETDAT CONSTA EXECU2: PRINT _MAY I REWIND AND RESTART THIS REEL ?? PUSHJ P,CHECK2 PUSHJ P,ARWND PRINT ON THE LAST REEL_ EXECU1: SKIPGE ITAPE ;REWOUND ??? JRST SETFNG ;YES PUSHJ P,TAPEMB PUSHJ P,SNPLAC MOVEI A,6 HRLM A,NSVOP OPEN SAVET,NSVOP JRST EXECU2 MOVE B,[-LTHBLK-1,,BUF] ;FIND OUT LAST USER DUMPED .IOT SAVET,B SETOM A EXECU3: MOVE B,[-2000,,BUF] EXECU4: SKIPL A JRST LOOKSM .IOT SAVET,B HLLZS B SKIPGE B SETZM A MOVE C,[-2000,,BUF] SUB C,B SETOM D EXECU5: CAME D,(C) AOBJN C,EXECU5 HLRE B,C SKIPN B JRST EXECU3 ;COUNT RAN OUT AOJE B,EXECU6 ;ON BLOCK BOUNDRY? AOBJN C,.+1 MOVE B,(C) MOVEM B,USNM JRST EXECU5 EXECU6: HRROI B,USNM .IOT SAVET,B MOVE B,[-1777,,BUF+1] SETZM BUF JRST EXECU4 LOOKSM: PUSHJ P,SPRF PUSHJ P,SPRF CONSO 344,100000 PUSHJ P,SPFF PUSHJ P,SETIT SKIPGE ITAPE ;DID WE BACK UP TO BEGINING OF TAPE ??? JRST SETFNG ;YES PUSHJ P,MAGOP ;READ HEADER FOR DIRECTORY NAME .VALUE ;EOT AFTER BACKSPACING ????? MOVE A,USNM CAME A,HSNM ;IS DIRECTORY NAME OF FILE ON TAPE THE SAME AS THE ;ONE WE ARE LOOKING FOR ??? JRST LOOKSM ;NO PUSHJ P,ART3 ;YES, FLUSH TO END OF THIS FILE(END OF LAST DIRECTORY ;DUMPED ON TAPE MOVE B,USNM JRST KSUSER SETFNG: PUSH P,LPTSW SETZM LPTSW PRINT WHAT WAS THE LAST DIRECTORY DUMPED ? POP P,LPTSW PUSHJ P,GETSYL JRST SETFNG MOVE B,SYM KSUSER: PUSHJ P,MFDN DIE NO SUCH DIRECTORY CAME B,USNM JRST KSUSER JRST ADMP1 SETIT: OPEN MAGIN,MAGI ;WAIT FOR ALL TAPE ACTIVITY TO STOP JRST RET ;BARF .CLOSE MAGIN, CONI 344,TAPEF ;READ MAG TAPE STATUS MOVE A,TAPEF TRZE A,100000 ;IS TAPE REWOUND ? SETOM ITAPE ;YES POPJ P, ADUMP2: SETZM STYPE SETOM MFDIN NXUFD: PUSHJ P,MFDN ;GET SNAM INTO USNM JRST DUNG ;NO MORE SNAMES LEFT MOVN W,LENGTH HRLZS W ;MAKE AOBJN POINTER SNMCHK: SKIPN A,FMSNM(W) JRST UGLY ;ANY SNAME MATCHES, INVESTIGATE CAMN A,USNM JRST UGLY ;SOME SNAME MATCHES, INVESTIGATE AOBJN W,SNMCHK ;CONTINUE CHECKING JRST NXUFD ;NO MATCH POSSIBLE UGLY: MOVEI V,0 SETOM GREATF ;FOR > AND < FILE HACKERY .SUSET [.SSNAM,,USNM] SETOM FLNI NXFIL: PUSHJ P,FNG JRST EODIRK ;NO MORE FILES IN THIS DIRECTORY MOVN W,LENGTH HRLZS W ;AOBJN MOVS A,FMDEV(W) HRLI A,6 ;BLOCK IMAGE INPUT MOVEM A,TRNI CMCON: SKIPN D,FMSNM(W) JRST CMFN1 CAME D,USNM JRST NXCOM CMFN1: SKIPN D,FMFN1(W) JRST CMFN2 CAME D,[SIXBIT //] CAIA JRST RCMFN1 SKIPN LNKFLG MOVEM D,FN1 SETZM GREATF JRST CMFN2 EODIRK: PUSHJ P,FILAPP SKIPGE APPENF ;ANY FILES DUMPED FOR THIS USER ??? JRST NXUFD EODIR3: MOVN W,LENGTH ;YES, MAYBE REMOVE SOME SPECS HRLZS W EODIR2: SKIPN A,FMSNM(W) JRST EODIR1 ;DON'T REMOVE "*;" SPECS CAMN A,USNM ;IS THIS ENTRY ONE FOR USER JUST DUMPED ? JRST REMOVE ;YES EODIR1: AOBJN W,EODIR2 ;NO JRST NXUFD REMOVE: SKIPN FMDUMP(W) JRST EODIR1 ;DON'T REMOVE SPEC IF NOTHING EVER MATCHED IT PUSHJ P,FLUSH ;DELETE SPEC POPJ P, ;NO MORE SPECS LEFT ADD W,[1,,] JRST EODIR2 RCMFN1: CAME D,FN1 JRST NXCOM CMFN2: SKIPE D,FMFN2(W) CAMN D,FN2 JRST DUMPIT CAME D,[SIXBIT //] CAIA JRST NXCOM SKIPN LNKFLG ;'>' AND '<' FILES DON'T GET OPENED FOR LINKS MOVEM D,FN2 SETZM GREATF ;WE FOUND A < OR > JRST DUMPIT NXCOM: AOBJN W,CMCON JRST NXFIL DUMPIT: SKIPE LNKFLG JRST AWRITE .SUSET [.SSNAM,,USNM] OPEN DSKIN,TRNI JRST NXCOM ;JUST CONTINUE MOVE A,[DSKIN,,TRNI] PUSH P,TRNI .RCHST A, POP P,TRNI MOVEI A,0 MOVE B,FN1 MOVE C,FN2 LOOP69: CAML A,V JRST APPEND CAME B,BIF(A) JRST LUP691 CAMN C,BIF+1(A) JRST EODIR3 LUP691: ADDI A,2 JRST LOOP69 APPEND: MOVEM B,BIF(A) MOVEM C,BIF+1(A) ADDI V,2 AWRITE: PUSHJ P,ADMP3 SETOM FMDUMP(W) ;MARK THIS ARG AS HAVING BEEN SATISFIED AT LEAST ONCE SKIPN FMSNM(W) JRST NXCOM ;DON'T DELETE ENTRY IF ANY "*" IN IT SKIPE FMFN1(W) SKIPN FMFN2(W) JRST NXCOM PUSHJ P,FLUSH POPJ P, ADD W,[1,,] SOJA W,NXCOM DUNG: MOVN W,LENGTH HRLZS W REMOV2: SKIPN A,FMSNM(W) JRST REMOV1 ;"*;" REMOV3: AOBJN W,REMOV2 PRINT _NOT DUMPED:_ NOREM1: IRP X,,[SNM,FN1,FN2] SKIPN A,FM!X(W) MOVSI A,(SIXBIT /*/) PSIS A IFSE X,SNM,[PASC [ASCIZ /;/]] TERMIN PUSHJ P,CRR AOBJN W,NOREM1 POPJ P, REMOV1: SKIPL FMDUMP(W) ;WAS ANYTHING DUMPED FOR THIS SPEC ?? JRST REMOV3 ;NO PUSHJ P,FLUSH POPJ P, ADD W,[1,,] JRST REMOV2 ADMP1: PUSHJ P,TAPEMB ;GET TAPE NUMBER IF DON'T HAVE YET PUSHJ P,MFDN ;READ A LOSER NAME FROM M.F.D. JRST RAT ;DONE SKIPE LSTWHL ;LIST ? PUSHJ P,LDMUT1 ADMPL1: MOVE A,USNM SKIPGE ITAPE MOVEM A,FUSNM ;FIRST LOSER DUMPED .SUSET [.SSNAM,,A] ;SO FNG READS THE CORRECT DIRECTORY MOVE A,DMPNWF ;COPY INCREMENTAL FLAG MOVEM A,DMPNW1 DMPAGN: SETOM FLNI ;RESTART ON NEW REEL ADMP2: SKIPN FULLDMP POPJ P, PUSHJ P,TAPEMB ;GET TAPE NUMBER IF NEEDED .SUSET [.SSNAM,,USNM] PUSHJ P,FNG ;READ ANOTHER FILE NAME JRST FULNMF ;NO MORE MOVE A,PACKN SKIPL DPACK ;RIGHT PACK ? CAMN A,DPACK JRST ADMP3 JRST ADMP2 ;NOT RIGHT PACK FULNMF: PUSHJ P,FILAPP JRST ADMP1 RAT: PUSHJ P,GESELL .CLOSE MAGOUT, SKIPE DMPNWF SKIPE CKIDMP JRST RAT2 SKIPE EXPERM JRST RAT2 SETOM LUSNM ; SO WE WILL GET LAST USER PRINT _REWINDING IFE MCOND DM,[ MOVN N,NFTDMP MOVE B,NFTDMP SOS B CAMN B,ITAPE ;IF EQUAL, THEN IT IS THE WHOLE TAPE JRST RAT1 PUSHJ P,ASPAC1 SKIPA ] RAT1: PUSHJ P,ARWND PRINT _CHECKING INCREMENTAL DUMP PUSHJ P,ICHECK RAT2: SKIPN REAPSW ;DO REAP IF ASKED JRST RET JRST INCGFR LDMUT1: PUSHJ P,CRR PUSHJ P,TAPN PSIS USNM PUSH P,LPTSW SETZM LPTSW PUSHJ P,CRR PSIS USNM POP P,LPTSW POPJ P, TAPN: MOVE D,ITAPE AOS D PDPT D POPJ P, ADMP3: SKIPE LNKFLG JRST ADMP4 OPEN DSKIN,TRNI ;OPEN DISK INPUT JRST ADMP2 ;FILE DOESN'T SEEM TO EXIST AFTER ALL ADMP4: PUSHJ P,TAPEMB AOSE APPENF JRST ADMP5 ;DON'T OPEN USER UFD PUSHJ P,SNPLAC SETZM USRUFD ADMP5: IFE MCOND DM,[ SKIPGE ITAPE PUSHJ P,EXTPCK ; TAPE ALREADY EXIST? ] .SUSET [.SSNAM,,USNM] ;SO .OPEN DSKIN, LOOKS ON THE CORRECT DIRECTORY SKIPE MAGOPN ; OPEN YET? JRST ADMP7 ; YES SETOM MAGOPN OPEN MAGOUT,MAGO ;OPEN MAG TAPE OUTPUT JRST RET ADMP7: SETOM EOTFLG AOSE ITAPE ;BEGINNING OF TAPE ? JRST LP2A ;NO SETZM NSVTPN+1 .SUSET [.SSNAM,,NPLACE] .FDELE NSVOP ;SO WE DON'T APPEND TO ANY OLD ONE JFCL .SUSET [.SSNAM,,USNM] PUSH P,LPTSW PUSHJ P,GINFO SKIPG SDONE JRST LP2B PRINT THAT'S AN ARCHIV TAPE. PUSHJ P,CHECK LP2B: POP P,LPTSW SETZM SDONE AOSE A,NTAPES ;IS THIS THE FIRST RUN FOR THIS LOADING ???? SOS A,NTAPES ;NO. WE WEREN'T SUPPOSED TO TOUCH NTAPES HRRM A,THTPN ;REEL NUMBER IN CURRENT DUMP PUSHJ P,SINFO .RDATE A, MOVEM A,THDATE .SUSET [.RSNAM,,I] JRST LP2C EXTPCK: .SUSET [.SSNAM,,NPLACE] HLRZ A,NSVOP HRRZS NSVOP .OPEN DSKOUT,NSVOP JRST EXTPK1 HRLM A,NSVOP PUSH P,LPTSW SETZM LPTSW PRINT YOU ARE NOT AT THE END OF TAPE. PUSHJ P,CRR PRINT YOU WILL DESTROY USEFUL DATA! POP P,LPTSW JRST CHECK EXTPK1: HRLM A,NSVOP POPJ P, AGFR: SETOM THTPN MOVSI A,-NGFRSW CLEARM @GFRTB2(A) AOBJN A,.-1 CAIN TER,15 JRST RET GFRLP1: PUSHJ P,GETSYL POPJ P, CAIE TER,15 JUMPE SYM,GFRLP1 PUSHJ P,GFRSPT CAIN TER,15 JRST GFREXC JRST GFRLP1 GFRSPT: JUMPE SYM,CPOPJ MOVSI A,-NGFRSW CAMN SYM,GFRTB1(A) JRST GFRSPD AOBJN A,.-2 SUB P,[1,,1] PRINT ? PSIS SYM PUSHJ P,TYOS PRINT IGNORED PUSHJ P,TYOS JRST GFRLP1 GFRSPD: SETOM @GFRTB2(A) POPJ P, INCGFR: SETOM GFRFLG ;ENTRY FROM MAIN DUMP TO ALSO DO A REAP MOVSI A,-NGFRSW CLEARM @GFRTB2(A) ;CLEAR ALL ARGUMENTS EXCEPT GFRQUO AND LIST IF WAS SET AOBJN A,.-1 MOVSI A,-NFIGS CLEARM @FIGTB2(A) AOBJN A,.-1 SETOM GFRQUO SETOM GFRDMS ;SET DUMP SWITCH SETOM GFRDES ;SET DELETE SWITCH SETOM MFDIN SKIPE LSTWHL SETOM GFRLST JRST GFREX1 GFREXC: SKIPE GFRDAS CLEARM GFRBLS SKIPE GFRDES PUSHJ P,GFRDCK ;DELETE CHECK SKIPE GFRBLS PUSHJ P,GFRGNB ;GET NUMBER OF BLOCKS SKIPE GFRDAS PUSHJ P,GETDAT SKIPE GFRLST PUSHJ P,DEVGET .SUSET [.SSNAME,,USNM] SKIPE GFRHSW PUSHJ P,GFRPHI SKIPE GFRBLS PUSHJ P,GFRGBD ;GET DATE ASSOCIATED WITH NEEDED BLOCKS SKIPN GFRDAS SKIPE GFRBLS JRST GFREX6 SKIPN GFRQUO JRST RET GFREX6: SKIPE GFRDMS PUSHJ P,MBOCF ;GET TO BEGINNING OF CURRENT FILE ON TAPE. SETOM GFRFLG SETOM MFDIN GFREX1: PUSHJ P,MFDN JRST RET PUSHJ P,GFRUCK ; CHECK USER TO SEE IF MAYBE HE SHOULDN'T BE REEPED JRST GFREX1 .SUSET [.SSNAM,,USNM] SETOM GFRFQ SETOM FLNI GFREX2: PUSHJ P,FNG JRST GFREX3 SKIPN GFRQUO JRST GFREX4 MOVE A,BLOCKS CAMG A,QUOTA JRST GFREX3 AOSE GFRFQ JRST GFREX5 SKIPN GFRLST JRST GFREX5 PUSHJ P,CRR PUSHJ P,CRR PSIS USNM PUSHJ P,TYOS PRINT QUOTA = PUSHJ P,TYOS PDPT QUOTA PUSHJ P,TYOS PRINT BLOCKS = PUSHJ P,TYOS PDPT BLOCKS PUSHJ P,CRR JRST GFREX5 GFREX4: SKIPN A,RFDATE JRST GFREX2 CAMLE A,DATE JRST GFREX2 GFREX5: MOVE A,BLOCKS SUB A,FLENTH MOVEM A,BLOCKS SKIPE GFRLST PUSHJ P,GFRLIS SKIPE GFRDMS PUSHJ P,ADMP3 SKIPE GFRDES PUSHJ P,GFRDEL JRST GFREX2 GFREX3: SKIPE GFRDMS PUSHJ P,FILAPP ;APPEND USERUFD FILE JRST GFREX1 GFRDCK: PRINT YOU SPECIFIED DELETE, PUSHJ P,CHECK SKIPE GFRDMS POPJ P, PRINT YOU DID NOT SPECIFY DUMP, PUSHJ P,CHECK PRINT WHAT TAPE DID YOU DUMP THESE FILES ON? PUSHJ P,TAPGET POPJ P, GFRLIS: PUSHJ P,CRR PSIS USNM PUSHJ P,TYOS PSIS FN1 PUSHJ P,TYOS PSIS FN2 PUSHJ P,TYOS MOVE A,RFDATE PUSHJ P,GFRPDT PUSHJ P,TYOS PDPT FLENTH POPJ P, MBOCF: PUSHJ P,SPRF ;BEGINNING OF CURRENT FILE CONSO 344,100000 ;BOT? PUSHJ P,SPFF POPJ P, GFRDEL: MOVE A,FN1 MOVEM A,GFRLNK+1 MOVE A,FN2 MOVEM A,GFRLNK+2 .OPEN DSKOUT,GFRLNK JFCL POPJ P, GFRPHI: PUSHJ P,GFRHIS SKIPE GFRLST PUSHJ P,GFRHP POPJ P, GETDAT: PRINT ENTER DATE (YY/MM/DD) PUSHJ P,GETDT CAIGE N,100. CAIGE N,1. JRST GETDAT DPB N,[330700,,DATE] PUSHJ P,GETDT CAIGE N,13. CAIGE N,1. JRST GETDAT DPB N,[270400,,DATE] PUSHJ P,GETSYL JRST GETDAT CAIGE N,32. CAIGE N,1. JRST GETDAT DPB N,[220500,,DATE] POPJ P, GETDT: SETZM N GETDT1: PUSHJ P,TYI CAIN A," POPJ P, CAIN A,"/ POPJ P, SUBI A,60 IMULI N,10. ADD N,A JRST GETDT1 GFRGBD: SKIPN GFRHSW PUSHJ P,GFRHIS MOVE B,[-373.,,GFRBLK] GFRBD1: HLRZ A,(B) CAML A,GFRNBK JRST GFRBD2 AOBJN B,GFRBD1 PRINT YOU ASKED FOR THE WHOLE DISK JRST RET GFRBD2: HRRZS B PUSHJ P,CRR PUSHJ P,GFROFI MOVEM A,DATE PRINT DATE FOR GFR IS PUSHJ P,GFRPDT PUSHJ P,CRR POPJ P, GFRGNB: PRINT NUMBER OF BLOCKS DESIRED ? PUSHJ P,GETSYL JRST GFRGNB JUMPL N,GFRGNB MOVEM N,GFRNBK POPJ P, GFRHIS: .RDATE A, SETOM MFDIN SETOM GFRFLG SETZM CURDAT LDB B,[000600,,A] SUBI B,20 LDB C,[060600,,A] SUBI C,20 IMULI C,10. ADD C,B DPB C,[220500,,CURDAT] LDB B,[140600,,A] SUBI B,20 LDB C,[220600,,A] SUBI C,20 IMULI C,10. ADD C,B DPB C,[270400,,CURDAT] LDB B,[300600,,A] SUBI B,20 LDB C, [360600,,A] SUBI C,20 IMULI C,10. ADD C,B DPB C,[330700,,CURDAT] MOVE A,CURDAT SUBI C,1 DPB C,[330700,,A] MOVEM A,OLDDAT ;OLDEST FILE DATE IS 1 YEAR AGO SETZM GFRBLK MOVE A,[GFRBLK,,GFRBLK+1] BLT A,GFRBLK+372. GFR1: PUSHJ P,MFDN ;READ A DIRECTORY JRST GFRF PUSHJ P,GFRUCK ; SEE IF USER SHOULD NOT BE REEPED JRST GFR1 .SUSET [.SSNAM,,USNM] SETOM FLNI GFR2: PUSHJ P,FNG ;READ A FILE JRST GFR1 SKIPE LNKFLG ; DO NOTHING FOR LINKS JRST GFR2 SKIPN A,RFDATE ;DON'T COUNT FILES WITHOUT REFENCE DATES JRST GFR2 CAMG A,OLDDAT ;IF OLDER THAN 1 YEAR, SET TO ONE YEAR OLD MOVE A,OLDDAT PUSHJ P,GFROFS ;COMPUTE OFFSET ADDI A,GFRBLK ;ADD TO BEGINNING OF DATA MOVE B,FLENTH ADDM B,(A) ; INCREMENT COUNT OF BLOCKS ON THAT DATE JRST GFR2 ;NEXT FILE GFROFS: SETZM B LDB C,[330700,,OLDDAT] LDB D,[330700,,A] SUB D,C IMULI D,372. MOVE B,D LDB C,[270400,,OLDDAT] LDB D,[270400,,A] SUB D,C IMULI D,31. ADD B,D LDB C,[220500,,OLDDAT] LDB D,[220500,,A] SUB D,C ADD B,D MOVE A,B POPJ P, GFRF: SETZM GFRFLG SETZM A MOVEI B,GFRBLK GFRTOT: ADD A,(B) HRLM A,(B) AOS B CAIG B,GFRBLK 372. JRST GFRTOT POPJ P, GFRHP: MOVEI B,GFRBLK GFRHPT: HRRZ A,(B) SKIPN A JRST GFRHP1 PUSHJ P,CRR PUSHJ P,GFROFI PUSHJ P,GFRPDT PASC [ASCIZ / /] HRRZ A,(B) PDPT A HLRZ A,(B) PDPT A GFRHP1: AOS B CAIG B,GFRBLK 372. JRST GFRHPT POPJ P, GFRPDT: PUSH P,B PUSH P,A LDB B,[270400,,A] PSIS MONTH(B) PUSHJ P,TYOS LDB A,[220500,,A] CAIGE A,10. PUSHJ P,TYOS PUSHJ P,DECPNT PASC [ASCIZ /, /] POP P,A LDB A,[330700,,A] ADDI A,1900. PUSHJ P,DECPNT POP P,B POPJ P, GFROFI: LDB C,[330700,,OLDDAT] LDB D,[270400,,OLDDAT] LDB E,[220500,,OLDDAT] PUSH P,B SUBI B,GFRBLK MOVE A,B IDIVI A,372. ADD C,A MOVE A,B IDIVI A,31. ADD D,A ADD E,B CAILE E,31. AOS D CAILE E,31. SUBI E,31. CAILE D,12. AOS C CAILE D,12. SUBI D,12. CAILE D,12. AOS C CAILE D,12. SUBI D,12. POP P,B SETZM A DPB C,[330700,,A] DPB D,[270400,,A] DPB E,[220500,,A] POPJ P, GFRUCK: SKIPE GFREVR JRST POPJ1 HLRZ A,USNM CAIN A,(SIXBIT /LIB/) POPJ P, MOVE A,[-NSDIR,,SDIR] MOVE B,USNM GFRUC1: CAMN B,(A) POPJ P, ;FOUND IN LIST AOBJN A,GFRUC1 AOS (P) POPJ P, ;NOT FOUND, SKIP RETURN GFRFLG: 0 CURDAT: 0 OLDDAT: 0 GFRBLK: BLOCK 372.+1 MONTH: 0 SIXBIT /JAN/ SIXBIT /FEB/ SIXBIT /MAR/ SIXBIT /APR/ SIXBIT /MAY/ SIXBIT /JUN/ SIXBIT /JUL/ SIXBIT /AUG/ SIXBIT /SEP/ SIXBIT /OCT/ SIXBIT /NOV/ SIXBIT /DEC/ GFRTB1: SIXBIT /H/ ;HISTOGRAM SIXBIT /L/ ;LIST SIXBIT /DUMP/ ;DUMP SIXBIT /DELETE/ ;DELETE SIXBIT /DATE/ ;ENTER DATE SIXBIT /BLOCKS/ ;GET X BLOCKS SIXBIT /EVERY/ ;ALLOW NO SPECIAL DIRECTORIES SIXBIT /CREATE/ ;USE CREATION DATE INSTEAD OF REF DATE SIXBIT /QUOTA/ NGFRSW==.-GFRTB1 GFRTB2: GFRHSW GFRLST GFRDMS GFRDES GFRDAS GFRBLS GFREVR GFRCRE GFRQUO GFRHSW: 0 ;HISTOGRAM SWITCH GFRDMS: 0 ;DUMP SWITCH GFRDES: 0 ;DELETE SWITCH GFRDAS: 0 ;DATE SWITCH GFRBLS: 0 ;BLOCKS SWITCH GFRLST: 0 ;LIST SWITCH GFRNBK: 0 ;NUMBER OF BLOCKS DESIRED GFREVR: 0 ;NO SPECIAL DIR SWITCH GFRCRE: 0 ;CREATION DATE SWITCH GFRQUO: 0 ;HACK QUOTA SDIR: IFE MCOND DM,[ SIXBIT /./ ;LIST OF DIRECTORIES TO BE HAND REEPED SIXBIT /.TAPE0/ SIXBIT /.TAPE1/ SIXBIT /.TAPE2/ SIXBIT /.TAPE3/ SIXBIT /.TAPE4/ SIXBIT /CALSUB/ SIXBIT /IMLAC/ SIXBIT /IMAINT/ SIXBIT /IMSRC/ SIXBIT /ITSENG/ SIXBIT /MAINT/ SIXBIT /MUDSUB/ SIXBIT /NETWRK/ SIXBIT /SAENG/ SIXBIT /SYS/ SIXBIT /SYS1/ SIXBIT /SYSBIN/ SIXBIT /SYSENG/ ] IFE MCOND AI,[ SIXBIT /./ SIXBIT /.INFO./ SIXBIT /.TAPE0/ SIXBIT /.TAPE1/ SIXBIT /.TAPE2/ SIXBIT /.TAPE3/ SIXBIT /.TAPE4/ SIXBIT /.TAPE5/ SIXBIT /.TAPE6/ SIXBIT /.TAPE7/ SIXBIT /.TAPE8/ SIXBIT /.TAPE9/ SIXBIT /BACKUP/ SIXBIT /CNVR/ SIXBIT /COMLAP/ SIXBIT /GT40/ SIXBIT /INQUIR/ SIXBIT /LIBRAR/ SIXBIT /LISP/ SIXBIT /MAINT/ SIXBIT /MLSYS/ SIXBIT /PDP10/ SIXBIT /PDP11/ SIXBIT /PDP6/ SIXBIT /PUB/ SIXBIT /SAIL/ SIXBIT /SHRDLU/ SIXBIT /SYS/ SIXBIT /SYS1/ SIXBIT /SYSBIN/ SIXBIT /SYSENG/ SIXBIT /SYSTEM/ SIXBIT /TEN11/ SIXBIT /VIS/ SIXBIT /WP/ ] IFE MCOND ML,[ SIXBIT /./ SIXBIT /.INFO./ SIXBIT /.TAPE0/ SIXBIT /.TAPE1/ SIXBIT /.TAPE2/ SIXBIT /.TAPE3/ SIXBIT /.TAPE4/ SIXBIT /.TAPE5/ SIXBIT /.TAPE6/ SIXBIT /.TAPE7/ SIXBIT /.TAPE8/ SIXBIT /.TAPE9/ SIXBIT /BACKUP/ SIXBIT /DEMO/ SIXBIT /LISP/ SIXBIT /MACSYM/ SIXBIT /MAINT/ SIXBIT /SYS/ SIXBIT /SYS1/ SIXBIT /SYSBIN/ SIXBIT /SYSENG/ ] IFE MCOND MC,[ SIXBIT /./ SIXBIT /.INFO./ SIXBIT /.KLFE./ SIXBIT /.TAPE0/ SIXBIT /.TAPE1/ SIXBIT /.TAPE2/ SIXBIT /.TAPE3/ SIXBIT /.TAPE4/ SIXBIT /.TAPE5/ SIXBIT /.TAPE6/ SIXBIT /.TAPE7/ SIXBIT /.TAPE8/ SIXBIT /.TAPE9/ SIXBIT /BACKUP/ SIXBIT /MAINT/ SIXBIT /SYS/ SIXBIT /SYS1/ SIXBIT /SYSBIN/ SIXBIT /SYSENG/ SIXBIT /SYSTEM/ ] NSDIR==.-SDIR GFRLNK: 200000,,446353 ;DSK LINK 0 ;FN1 0 ;FN2 SIXBIT /TAPE/ 0 ;TAPE NUMBER FROM TAPGET SIXBIT /BACKUP/ ;SNAME FOR LINK LP2C: MOVE A,[THBLK,,LISTBF] ADD A,USRUFD BLT A,LISTBF+LTHBLK-1(USRUFD) MOVE A,[-3,,0] ADDI USRUFD,LTHBLK MOVEM A,LISTBF(USRUFD) AOS USRUFD MOVE A,[-LTHBLK,,THBLK] ;OUTPUT TAPE-HEADER .IOT MAGOUT,A LP2A: MOVE A,USNM MOVEM A,HSNM MOVE A,FN1 MOVEM A,HFN1 MOVE A,FN2 MOVEM A,HFN2 MOVE A,PACKN MOVEM A,HPKN SKIPE LNKFLG JRST LP3A .CALL RDATE SETOM FDATE MOVE A,FDATE MOVEM A,HDATE LP3A: MOVE A,[-LHBLK,,HBLK] .IOT MAGOUT,A MOVE A,HBLK+2 ;OUTPUT FILE HEADER MOVEM A,LISTBF(USRUFD) MOVE A,HBLK+3 MOVEM A,LISTBF+1(USRUFD) MOVE A,HBLK+5 MOVEM A,LISTBF+2(USRUFD) ADDI USRUFD,3 SKIPE LSTWHL PUSHJ P,LOUSY JFCL SKIPE LNKFLG JRST LP4A SKIPN RFDATE JRST LP .CALL SRFDAT JFCL LP: MOVE A,[-LBUF,,BUF] ;OUTPUT FILE .IOT DSKIN,A HRLOI B,-BUF-1(A) EQVI B,BUF SKIPGE A .CLOSE DSKIN, JUMPGE B,LP1 .IOT MAGOUT,B JUMPGE A,LP ;MORE TO DO ? LP1: SKIPN CKIDMP JRST LP1A SKIPN MICFLG SKIPE EXPERM JRST LP1A OPEN DSKIN,TRNI ;RE OPEN SINCE CLOSED BY EOF JRST LP1A .CALL SRFDAT JFCL MOVE A,[400000,,DSKIN] .DMPCH A, ;SET DUMP CHARACTER SO WONT BE INCREMENTALLY DUMPED AGAIN .CLOSE DSKIN, LP1A: PUSHJ P,AEOF MOVE A,USNM MOVEM A,LUSNM ;LAST LOSER DUMPED AOS NFTDMP JRST ADMP2 LDMUT2: PUSHJ P,TAPN PSIS FN1 PSIS FN2 PUSH P,A HLRZ A,PACKN SKIPE A PUSHJ P,LDMUT5 ; LINK SKIPN A PDPT PACKN POP P,A JRST CRR LDMUT5: PSIS [SIXBIT /L/] PSIS PACKN ; SYSNM PSIS LNKNM1 PSIS LNKNM2 POPJ P, LP4A: MOVE A,[-3,,LNKNM1] ;DUMP A LINK AS A 3 WORD FILE ; LKNM1,LKNM2,SNAM .IOT MAGOUT,A JRST LP1A ;THE FOLLOWING ROUTINE GOBBLES INPUT LINES ;FROM THE TTY AND INTERPRETS THEM AS STANDARD MIDAS OR COPY INPUT ;LINES. EX. TODEV:TOSNM;TOFN1 TOFN2_FMDEV:FMSNM;FMFN1 FMFN2(CR) ;THE ROUTINE KEEPS TYPING FILE= AND WAITS FOR ANOTHER LINE ;UNTIL AN ALTMODE A LONELY CR IS TYPED. ALL THE TODEV'S ARE STORED IN A LIST ;CALLED TODEV:. ALL THE FMFN1'S ARE STORED ON A LIST CALLED FMFN1: ;ETC. THERE ARE EIGHT LISTS IN ALL. AN UNSPECIFIED ARGUMENT IN THE ;LINE IS GIVEN THE VALUE OF THE DEFAULT FOR ;THAT SPEC. A SPECIFIED ARG BECOMES THE DEFAULT FOR THAT SPEC. ;IF THE _ IS OMMITTED, ALL ARGS ARE FM ARGS. ;INITIAL DEFAULT FOR FM NAMES IS DSK:;* * ;THE ROUTINE EXITS IF THE LAST INPUT LINE OF FM NAMES ;EVALUATES TO *;* * ;TO NAMES UNSPECIFIED IN A LINE ARE SET ;TO FM NAMES OF THE SAME CORRESPONDING TYPE(DEV,SNM,FN1,FN2) FILGET: MOVSI D,-LLIST ;NUMBER OF ENTRIES ALLOWED SETZM FMDUMP(D) AOBJN D,.-1 MOVSI D,-LLIST CAIA ONEFIL: MOVSI D,-1 ;ENTRY FOR ONLY ONE SPEC TO BE READ MOVSI X,(SIXBIT /DSK/) ;DEFAULT FOR DEV MOVE U,MYNAME ;DEFAULT FOR SNAME MOVE V,[SIXBIT /*/] ;FIRST FILE NAME DEFAULT MOVE W,V ;SECOND FILE NAME DEFAULT IRP X,,[TO,FM] IRP Y,,[DEV,SNM,FN1,FN2] SETZM !X!!Y MOVE A,[!X!!Y,,!X!!Y+1] BLT A,!X!!Y+LLIST-1 TERMIN TERMIN TRAGEN: PRINT FILE= SETZM TINDEV MOVE A,[TINDEV,,TINSNM] BLT A,TINFN2 ;SO UNSPECIFIEDS WILL BE 0 SETOM BARROW ;SAYS NO BACK-ARROW TYPED YET PUSHJ P,TYI CAIE A,33 CAIN A,15 JRST TIDONE ;LONELY CR PUSHJ P,GETSL1 ;READ A SYLLABLE BUT FIRST CHARACTER ALREADY READ JRST TRAGEN ;ENTIRE SYLLABLE RUBBED OUT JRST OVER TGET: PUSHJ P,GETSYL JRST TRAGEN OVER: CAIN TER,": JRST TDEV CAIN TER,"; JRST TSNM CAIN TER,40 JUMPE SYM,TGET CAIN TER,^F JUMPE SYM,ENDLIN ;INDIRECT AND READ FILE TO GET FILE NAMES CAIE TER,33 CAIN TER,15 JUMPE SYM,ENDLIN CAIN TER,"_ JUMPE SYM,BASET SKIPN TINFN1 JRST TFN1 SKIPE TINFN2 MOVEI TER,40 ;MORE THAN TWO FILE NAMES SKIPE TINFN2 JRST TOMANY MOVEM SYM,TINFN2 TFNC: CAIN TER,40 JRST TGET CAIN TER,"_ JRST BASET ENDLIN: AOS BARROW ;NO BACKARROW IMPLIES ONLY FM NAMES AOS BARROW PUSHJ P,DACIT IRP X,,[DEV,SNM,FN1,FN2] SKIPN A,TO!X(D) JRST Z!X CAME A,[SIXBIT /*/] JRST NZ!X Z!X: MOVE A,FM!X(D) MOVEM A,TO!X(D) NZ!X: TERMIN AOBJN D,.+1 MOVEI A,0 CAMN A,TYNSNM CAME A,TYNFN1 JRST NOCOM CAMN A,TYNFN2 JRST TIDONE ;CAN'T ASK FOR MORE THAN THE UNIVERSE ! NOCOM: CAIN TER,33 JRST TIDONE ;ALTMODE MEANS NO MORE LINES TO BE TYPED CAIN TER,^F JRST TRRDF ;INDIRECT TO READ FILE JUMPL D,TRAGEN JRST NOMORE TRRDF: SUB D,[1,,1] ;NOT REALLY LOOKING FOR THIS FILE AOS TYIPD ;DEPTH IN IOPUSHES ON TYIC .IOPUSH TYIC, .CALL TRRDFO JRST TRRDFL JRST TRAGEN ;CONTINUE PROCESSING FILE SPECS (FROM DISK NOW) TRRDFL: SOS TYIPD .IOPOP TYIC, PRINT INDIRECT FILE NOT FOUND JRST TRAGEN BASET: PUSHJ P,DACIT AOSE BARROW JRST TOMANY SETZM TINDEV MOVE A,[TINDEV,,TINSNM] SETZM TINDEV BLT A,TINFN2 JRST TGET NOMORE: CAIN D,1 JRST TIDONE ; DON'T SAY FILE IF ONLY ONE LINE WAS ASKED FOR PRINT FILE= PUSHJ P,TYI CAIE A,15 JRST TOOMCH TIDONE: HRRZM D,LENGTH SKIPN LENGTH JRST MLP ;NO ENTRIES JRST CRR DACIT: MOVSI B,-4 MOVE A,[TINDEV,,TYNDEV] BLT A,TYNFN2 DEFINE INITFD AC,DES SKIPN E,TYN!DES MOVEM AC,TYN!DES ;SET UNSPECIFIED ARG TO DEFAULT CAIE E,0 MOVE AC,E ;SET DEFAULT TO SPECIFIED ARG CAMN AC,[SIXBIT /*/] SETZM TYN!DES ;ASTERISKS MATCH TO ANYTHING CAME AC,[SIXBIT / */] JRST NOAST!AC MOVE E,[SIXBIT /*/] MOVEM E,TYN!DES ;SPACE * GETS CHANGED TO A REAL ASTERISK NOAST!AC: TERMIN SKIPG BARROW JRST ENDLUP IRP K,,[X,U,V,W]B,,[DEV,SNM,FN1,FN2] INITFD K,B TERMIN MOVSI C,(SIXBIT /DSK/) SKIPE A,TYNDEV CAMN A,[SIXBIT /*/] MOVEM C,TYNDEV ENDLUP: MOVE A,TYNDEV(B) SKIPL BARROW PUSHJ P,FMLST SKIPGE BARROW PUSHJ P,TOLST AOBJN B,ENDLUP POPJ P, TOOMCH: PRINT _NO MORE ENTRIES ALLOWED. QUES: PRINT SHALL I CONTINUE? .RESET TYIC, PUSHJ P,TYI CAIN A,"Y JRST TIDONE CAIN A,"N JRST MLP PRINT _TYPE Y FOR YES OR N FOR QUIT._ JRST QUES IRP X,,[TO,FM] X!LST: MOVEI C,LLIST IMULI C,(B) ADDI C,X!DEV(D) MOVEM A,(C) POPJ P, TERMIN IRP X,,[DEV,SNM] T!X: SKIPE TIN!X JRST TOMANY MOVEM SYM,TIN!X JRST TGET TERMIN TOMANY: PRINT UNACCEPTABLE WITH CAIN TER,"_ JRST NOTWO CAIE TER,": CAIN TER,"; JRST NOTWO PUSHJ P,TYOS PRINT THREE FILE NAMES! MOVEI TER,0 CAIA NOTWO: PUSHJ P,TYOS CAIE TER,": CAIN TER,"; PRINT TWO CAIN TER,"_ PRINT TWO CAIE TER,0 PUSHJ P,TYOS CAIN TER,"; PRINT SNAMES! CAIN TER,": PRINT DEVICES! CAIN TER,"_ PRINT BACKARROWS! PUSHJ P,CRR JRST TRAGEN TFN1: MOVEM SYM,TINFN1 JRST TFNC ARELOA: PUSHJ P,BADFIL RELO1: PUSHJ P,MAGOP JRST ARWND ;REWIND WHEN DONE PUSHJ P,ONLIST JRST RELO2 .SUSET [.SSNAM,,HSNM] MOVE A,HFN1 MOVEM A,FN1 MOVE A,HFN2 MOVEM A,FN2 MOVEI A,16 HRLM A,TRNI .OPEN DSKIN,TRNI JRST RELO2 .CALL FILBLK .VALUE MOVE A,FDATE CAME A,HDATE JRST RELO2 .CALL RAUTH ;BY THIS POINT FILE IS ON LIST,AND SAME STUFF .VALUE ;INFO IN FDATE, RFDATE, AUTHOR MOVEI A,100007 HRLM A,TRNI .CLOSE DSKIN, .OPEN DSKOUT,TRNI .VALUE .ACCESS DSKOUT,[0] RELO3: MOVE A,[-LBUF,,BUF] PUSHJ P,MAGREA JRST RELO4 HRLOI B,-BUF-1(A) EQVI B,BUF SKIPGE A PUSHJ P,ART3 JUMPGE B,RELO4 .IOT DSKOUT,B JUMPGE A,RELO3 RELO4: .CALL SDMPBT .VALUE .CALL SAUTH .VALUE .CALL SDATE .VALUE .CALL SRDT .VALUE .CLOSE DSKOUT, MOVEI A,6 HRLM A,TRNI JRST RELO1 RELO2: PUSHJ P,ART3 JRST RELO1 BADFIL: MOVSI D,-LLIST ;NUMBER OF ENTRIES ALLOWED SETZM FMDUMP(D) AOBJN D,.-1 MOVSI D,-LLIST CAIA MOVSI D,-1 ;ENTRY FOR ONLY ONE SPEC TO BE READ MOVSI X,(SIXBIT /DSK/) ;DEFAULT FOR DEV MOVE U,MYNAME ;DEFAULT FOR SNAME MOVE V,[SIXBIT /*/] ;FIRST FILE NAME DEFAULT MOVE W,V ;SECOND FILE NAME DEFAULT IRP X,,[TO,FM] IRP Y,,[DEV,SNM,FN1,FN2] SETZM !X!!Y MOVE A,[!X!!Y,,!X!!Y+1] BLT A,!X!!Y+LLIST-1 TERMIN TERMIN .SUSET [.SSNAM,,[SIXBIT /SEC/]] OPEN DSKIN,BADLST .VALUE SETZM D BADFI1: HRROI A,TOSNM(D) .IOT DSKIN,A JUMPL A,BADFI2 SKIPN TOSNM(D) JRST BADFI2 HRROI A,TOFN1(D) .IOT DSKIN,A HRROI A,TOFN2(D) .IOT DSKIN,A AOJA D,BADFI1 BADFI2: MOVEM D,LENGTH .CLOSE DSKIN, POPJ P, BADLST: 6,,446353 SIXBIT /BAD/ SIXBIT /FILES/ ONLIST: MOVN D,LENGTH HRLZS D MOVE A,HSNM MOVE B,HFN1 MOVE C,HFN2 ONLIS1: CAME A,TOSNM(D) JRST ONLIS2 CAME B,TOFN1(D) JRST ONLIS2 CAME C,TOFN2(D) JRST ONLIS2 AOS (P) POPJ P, ONLIS2: AOBJN D,ONLIS1 POPJ P, TRAN: SETOM MFDIN TRAN1: PUSHJ P,MFDN .VALUE SETOM FLNI .SUSET [.SSNAM,,USNM] TRAN2: PUSHJ P,FNG JRST TRAN1 .OPEN DSKIN,TRNI JRST TRAN2 SKIPE LNKFLG JRST TRAN2 .CALL RDATE JFCL SKIPG FDATE JRST TRAN2 MOVE A,FDATE TLO A,110000 CAML A,TOMDAT SUB A,[2000,,0] MOVEM A,FDATE .CALL SFDAT1 JFCL JRST TRAN2 TOMDAT: 0 SFDAT1: SETZ SIXBIT /SFDATE/ [DSKIN] SETZ FDATE CONV: MOVE A,[SIXBIT /.TAPE0/] MOVEM A,USNM SETOM FLNI .SUSET [.SSNAME,,USNM] CONV1: PUSHJ P,FNG .VALUE MOVEI A,6 HRLM A,TRNI OPEN DSKIN,TRNI .VALUE MOVEI B,7 HRLM B,TRNI OPEN DSKOUT,TRNI .VALUE HRLM A,TRNI .CALL RDATE SETOM FDATE .CALL SDATE JFCL .CALL SRDT1 JFCL SETOM USNM MOVE A,[-5,,BUF] .IOT DSKIN,A MOVE A,[-3,,0] MOVEM A,BUF+4 MOVE A,[-5,,BUF] .IOT DSKOUT,A CONV2: MOVE A,[-5,,BUF] .IOT DSKIN,A JUMPL A,CONV3 MOVE A,BUF CAME A,USNM PUSHJ P,CONV4 MOVE A,[-2,,BUF+1] .IOT DSKOUT,A HRROI A,BUF+4 .IOT DSKOUT,A JRST CONV2 CONV3: .CLOSE DSKOUT, .CLOSE DSKIN, JRST CONV1 CONV4: MOVEM A,USNM HRROI A,[0] .IOT DSKOUT,A HRROI A,USNM .IOT DSKOUT,A POPJ P, SRDT1: SETZ SIXBIT /SRDATE/ [DSKOUT] SETZ RFDATE ;ORDMFD$G WILL RUN THRU ALL THE .TAPE. FILES, AND PRODUCE A LIST ; OF DIRECTORIES WHICH HAVE EVER BEEN DUMPED ; (THIS IS A FILE OF SIXBIT, UNORDERED) ORDM1: -40000,,SBUF ;POINT TO A BUFFER ORDM2: -40000,,SBUF ;POINT TO CURRENT END ORDIR: '.TAPE0 ;NAME OF A TAPE DIR ORDIRS: 0 ;NAME OF SAVED DIR DIRFLG: 0 ;FLAG SAYS THAT NEXT IS A DIR ORDMFD: MOVE A,[-40000,,SBUF] MOVEM A,ORDM1 MOVEM A,ORDM2 .SUSET [.RSNAM,,ORDIRS] MOVE A,['.TAPE0] OM0: MOVEM A,ORDIR PUSHJ P,OM1 AOS A,ORDIR CAMG A,['.TAPE9] JRST OM0 .SUSET [.SSNAM,,ORDIRS] ;RESET SNAM OPEN DSKOUT,[SIXBIT / &DSKDMPMFD>/] .VALUE MOVE A,ORDM1 SUB A,ORDM2 ;# WDS IN BUF MOVSS A HRRI A,ORDM1 .IOT DSKOUT,A .CLOSE DSKOUT, .VALUE [ASCIZ /TAPES.SCANNED.FOR.MFD/] OM1: SETOM FLNI ;ROUTINE TO SCAN A .TAPE DIR .SUSET [.SSNAM,,A] OM1A: PUSHJ P,FNG POPJ P, ;END OF DIR PUSHJ P,OM2 JRST OM1A OM2: SETOM EOFF ;ROUTINE TO SCAN A .TAPE FILE OPEN DSKIN,TRNI .VALUE MOVEI B,0 JSR GWD CAME A,[-4,,] ;GOOD HEADER .VALUE JSR GWD ;TAPE# JSR GWD ;DATE JSR GWD ;FLAGS JFCL ;JUMPGE A,CPOPJ IF ONLY INCR WANTED JSR GWD ;ANOTHER RANDOM CAME A,[-3,,] ;MORE GOOD HEADER .VALUE JSR GWD ;SHOULD BE FOR A DIR NAME HERE CAME A,DIRFLG .VALUE OM2B: JSR GWD ;GET DIR NAME PUSHJ P,OMFD ;INSERT NAME IN LIST OM2C: JSR GWD ;GET FN1 OR FLAG CAMN A,DIRFLG JRST OM2B ;A DIR JSR GWD ;WAS FN1, GET FN2 JSR GWD ;DATE JRST OM2C OMFD: MOVE C,ORDM2 ;PUT A WORD IN LIST (IF UNIQUE) MOVEM A,(C) MOVE C,ORDM1 ;SEARCH CAME A,(C) AOBJN C,.-1 CAME C,ORDM2 ;SKIP IF REACHED END OF LIST POPJ P, ;NOT A NEW NAME AOBJP C,[.VALUE] ;REACHED END??? MOVEM C,ORDM2 ;BUMP POINTER NOW POPJ P, ORFIND: SETOM MFDIN OF1: PUSHJ P,MFDN .VALUE MOVEM A,SCRDIR 2 .SUSET [.SSNAM,, [SIXBIT /TAPSCR/]] OPEN DSKOUT,SCRDIR .VALUE MOVE A,[SIXBIT /.TAPE0/] OF1A: MOVEM A,ORDIR PUSHJ P,OF2 AOS A,ORDIR CAMG A,[SIXBIT /.TAPE9/] JRST OF1A ;LOOP FOR ANOTHER BUNCH JRST OF1 ;LOOP FOR ANOTHER NAME SCRDIR: 7,,446353 SIXBIT /TAPE/ 0 OF2: SETOM FLNI .SUSET [.SSNAM,,A] OF3: PUSHJ P,FNG POPJ P, SETOM EOFF OPEN DSKIN,TRNI .VALUE MOVE A,[-5,,BUF] .IOT DSKIN,A SKIPL BUF 3 JRST OF3 ;NOT INCREMENTAL PUSHJ P,OF4 JRST OF3 OF4: MOVEI B,0 MOVE A,TRNI 2 MOVEM A,DATA 3 JSR GWD OF7: PUSHJ P,OF5 POPJ P, JSR GWD OF6: MOVEM A,DATA JSR GWD MOVEM A,DATA 1 JSR GWD MOVEM A,DATA 2 MOVE A,[-4,,DATA] .IOT DSKOUT,A JSR GWD SKIPN A JRST OF7 JRST OF6 DATA: BLOCK 4 OF5: JSR GWD CAMN A,USNM JRST POPJ1 JRST OF8 OF9: JSR GWD JSR GWD OF8: JSR GWD SKIPN A JRST OF5 JRST OF9 OFSORT: SETOM FLNI .SUSET [.SSNAM,,[SIXBIT /TAPSCR/]] OFS1: PUSHJ P,FNG .VALUE MOVE A,[-40000,,SBUF] MOVEI B,6 HRLM B,TRNI OPEN DSKIN,TRNI .VALUE .IOT DSKIN,A SKIPL A .VALUE MOVEM A,SORTAS HRRZ C,A HRRZI A,SBUF MOVEI D,4 MOVEI N,0 SETZM (C) PUSHJ P,SORT MOVEI A,SBUF MOVEI N,1 MOVE C,A OFS2: SKIPN B,(A) JRST OFS4 OFS3: ADDI C,4 CAMN B,(C) JRST OFS3 PUSHJ P,SORT JRST OFS2 OFS4: MOVEI A,100007 HRLM A,TRNI .CLOSE DSKIN, OPEN DSKOUT,TRNI .VALUE .ACCESS DSKOUT,[0] MOVE A,[-40000,,SBUF] HLLZ B,SORTAS SUB A,B .IOT DSKOUT,A .CLOSE DSKOUT, JRST OFS1 SORTAS: 0 SBUF: BLOCK 40000 OUTNAM: MOVE B,[440600,,A] MOVSI C,-6 OUTNM1: ILDB D,B ADDI D,40 PUSHJ P,OUTASC AOBJN C,OUTNM1 POPJ P, OUTNUM: MOVE B,[440600,,A] MOVSI C,-3 OUTNU1: ILDB D,B ADDI D,40 PUSHJ P,OUTASC AOBJN C,OUTNM1 POPJ P, OUTDAT: MOVE B,[270400,,A] MOVEI D,"0 LDB C,B CAIL C,10. MOVEI D,"1 PUSHJ P,OUTASC CAIL C,10. SUBI C,10. ADDI C,"0 MOVE D,C PUSHJ P,OUTASC MOVEI D,"/ PUSHJ P,OUTASC MOVE B,[220500,,A] LDB B,B IDIVI B,10. ADDI B,"0 MOVE D,B PUSHJ P,OUTASC ADDI C,"0 MOVE D,C PUSHJ P,OUTASC MOVEI D,"/ PUSHJ P,OUTASC MOVE B,[330700,,A] LDB B,B CAIGE B,72. ADDI B,72. IDIVI B,10. ADDI B,"0 MOVE D,B PUSHJ P,OUTASC ADDI C,"0 MOVE D,C PUSHJ P,OUTASC POPJ P, OUTCR: MOVEI D,15 PUSHJ P,OUTASC MOVEI D,12 JRST OUTASC OUTSPC: MOVEI D," JRST OUTASC OUT4SP: MOVEI D," MOVSI B,-4 PUSHJ P,OUTASC AOBJN B,.-1 POPJ P, OUTASC: MOVE U,ASCBP CAMN U,[010700,,BUF+LBUF-1] PUSHJ P,OUTBLK IDPB D,ASCBP POPJ P, OUTBLK: MOVE U,[-LBUF,,BUF] .IOT DSKOUT,U MOVE U,[440700,,BUF] MOVEM U,ASCBP POPJ P, ASCBP: 440700,,BUF CONASC: SETOM FLNI CONAS1: .SUSET [.SSNAM,,[SIXBIT /TAPSCR/]] PUSHJ P,FNG .VALUE MOVEI A,6 HRLM A,TRNI OPEN DSKIN,TRNI .VALUE .SUSET [.SSNAM,,[SIXBIT /TAPASC/]] MOVEI A,7 HRLM A,TRNI OPEN DSKOUT,TRNI .VALUE MOVE A,[440700,,BUF] MOVEM A,ASCBP MOVE A,[-40000,,SBUF] .IOT DSKIN,A MOVEM A,SORTAS HRRZS A SUBI A,SBUF IDIVI A,4 MOVEM A,NUMENT MOVEI X,SBUF CONAS2: MOVE A,NUMENT ADDI A,3 IDIVI A,4 SETZM FUDGE+2 SETZM FUDGE+3 CAILE A,57 JRST CONAS6 MOVEI C,4 CAIN B,0 MOVEM C,FUDGE+2 CAIN B,1 MOVEM C,FUDGE+3 MOVEI C,8 CAIN B,0 MOVEM C,FUDGE+3 CONAS6: CAIL A,57. MOVEI A,57. MOVEM A,LINPAG CONAS3: MOVNI V,(A) HRLZS V CONAS4: MOVSI W,-4 CONAS5: MOVE E,LINPAG IMULI E,4 IMULI E,(W) ADD E,X SUB E,FUDGE(W) MOVE A,(E) PUSHJ P,OUTNAM PUSHJ P,OUTSPC MOVE A,(E)1 PUSHJ P,OUTNAM PUSHJ P,OUTSPC MOVE A,(E)2 PUSHJ P,OUTDAT PUSHJ P,OUTSPC MOVE A,(E)3 PUSHJ P,OUTNUM CAME W,[-1,,3] PUSHJ P,OUT4SP CAMN W,[-1,,3] PUSHJ P,OUTCR SOSN NUMENT JRST ASCEOF AOBJN W,CONAS5 ADDI X,4 AOBJN V,CONAS4 MOVEI D,^L PUSHJ P,OUTASC MOVE D,LINPAG IMULI D,12. ADD X,D JRST CONAS2 FUDGE: 0 0 0 0 ASCEOF: MOVEI D,3 ASCEF1: PUSHJ P,OUTASC HLRZ A,ASCBP CAIE A,10700 JRST ASCEF1 HRRZ A,ASCBP ADDI A,1 SUBI A,BUF MOVNS A HRLZS A HRRI A,BUF .IOT DSKOUT,A .CLOSE DSKOUT, JRST CONAS1 NUMENT: 0 LINPAG: 0 LNKBL: 200000,,446353 BLOCK 4 SIXBIT /TAPASC/ LNKSNM: SIXBIT /.LPTR./ OFMLNK: SETOM FLNI .SUSET [.SSNAM,,[SIXBIT /TAPASC/]] ML1: PUSHJ P,FNG .VALUE .SUSET [.SSNAM,,LNKSNM] MOVE A,FN1 MOVEM A,LNKBL+1 MOVEM A,LNKBL+3 MOVE A,FN2 MOVEM A,LNKBL+2 MOVEM A,LNKBL+4 .OPEN DSKIN,LNKBL .VALUE JRST ML1 CHECCL: SETOM MFDIN PUSHJ P,DEVGET CHECL1: PUSHJ P,MFDN JRST RET SETOM FLNI .SUSET [.SSNAM,,USNM] CHSNM: PUSHJ P,FNG JRST CHECL1 SKIPE LNKFLG JRST CHSNM HRRI A,6 HRLM A,TRNI OPEN DSKIN,TRNI JRST CHSNM CHSNM1: MOVE A,[-40000,,SORTAS] .IOT DSKIN,A PUSH P,A HLLZS A MOVE B,[-40000,,0] SUB B,A HRRI B,SORTAS MOVE C,CLBWRD CHSNM4: MOVE D,(B) TLZ D,770000 CAME C,D JRST CHSNM2 CHSNM3: POP P,A JUMPL B,CLBFL JUMPGE A,CHSNM1 .CLOSE DSKIN, JRST CHSNM CHSNM2: ADD B,[1777,,1777] AOBJN B,CHSNM4 JRST CHSNM3 CLBFL: PSIS USNM PSIS FN1 PSIS FN2 PDPT PACKN .CALL FILBLK JFCL MOVE A,FDATE MOVEM A,DAYTIM PASC [ASCIZ / /] PUSHJ P,PFDATE MOVE A,RFDATE MOVEM A,DAYTIM PASC [ASCIZ / /] PUSHJ P,PFDATE .CLOSE DSKIN, PUSHJ P,CRR JRST CHSNM CLBWRD: 600,,3 DIRSO: SIXBIT / &DSKWALL BIN / FBLK: .SUSET [.SSNAM,, [SIXBIT /SEC/]] .OPEN 15,DIRSO .VALUE PUSHJ P,DEVGET FBLK1: PUSHJ P,SFNG .VALUE FBLK5: .OPEN UFDCH,FNO .VALUE MOVE A,[-2000,,FDIRBF] .IOT UFDCH,A MOVEI A,6 HRLM A,TRNI OPEN DSKIN,TRNI JRST FBLK1 MOVNI A,3 MOVEM A,BLKOFS FBLK2: MOVE A,[-6000,,SORTAS] .IOT DSKIN,A AOS BLKOFS AOS BLKOFS AOS BLKOFS PUSH P,A HLLZS A MOVE B,[-6000,,0] SUB B,A HRRI B,SORTAS MOVE C,CLBWRD FBLK3: CAMN C,(B) JRST FBLK4 ADD B,[1777,,1777] AOBJN B,FBLK3 POP P,A JUMPGE A,FBLK2 .CLOSE DSKIN, JRST FBLK1 SFNG: MOVE A,[-1,,USNM] .IOT 15,A JUMPL A,CPOPJ SKIPN USNM POPJ P, .SUSET [.SSNAM,,USNM] MOVE A,[-2,,FN1] .IOT 15,A JRST POPJ1 FBLK4: POP P,A PUSHJ P,CRR PSIS USNM PSIS FN1 PSIS FN2 HRRZS B SUBI B,SORTAS IDIVI B,2000 ADD B,BLKOFS PUSHJ P,DELBLK PUSHJ P,FTRK PDPT A JRST FBLK5 DELBLK: PUSH P,B IMULI B,2000 MOVEI C,100007 HRLM C,TRNI .OPEN DSKIN,TRNI .VALUE .ACCESS DSKIN,B MOVE C,[-2000,,ZEROB] .IOT DSKIN,C .CLOSE DSKIN, POP P,B MOVEI C,6 HRLM C,TRNI POPJ P, FTRK: MOVE A,FDIRBF+1 MOVEI A,FDIRBF(A) FTRK1: MOVE C,(A) CAME C,FN1 JRST FTRK3 MOVE C,1(A) CAME C,FN2 JRST FTRK3 LDB C,[150500,,2(A)] PDPT C LDB C,[UNDSCP +2(A)] IDIVI C,6 MOVE D,BTB(D) ADDI D,FDIRBF+11.(C) SETOM A FTRK2: ILDB C,D TRZE C,40 JRST FTRKL CAILE C,12. JRST FTRKS FTRKN: AOS A SOSGE B POPJ P, SOSLE C JRST FTRKN JRST FTRK2 FTRKS: SUBI C,11. ADD A,C SOSGE B POPJ P, JRST FTRK2 FTRKL: TRZ C,20 SETZM A DPB C,[140600,,A] ILDB C,D DPB C,[60600,,A] ILDB C,D DPB C,[600,,A] SOSGE B POPJ P, JRST FTRK2 BLKOFS: 0 BTB: 440600,, 360600,, 300600,, 220600,, 140600,, 060600,, FTRK3: ADDI A,5 CAIGE A,FDIRBF+1777 JRST FTRK1 SETOM A POPJ P, FNDCON: MOVSI V,-12 FNDCO1: MOVE B,[SIXBIT /.TAPE0.TAPE1.TAPE2.TAPE3.TAPE4.TAPE5.TAPE6.TAPE7.TAPE8.TAPE9/](V) SETOM FLNI .SUSET [.SSNAM,,B] FNDCO2: PUSHJ P,FNG JRST FNDCO3 MOVEI B,6 HRLM B,TRNI OPEN DSKIN,TRNI JRST FNDCO2 .CALL FILLEN .VALUE SKIPN A,LENGTH JRST FNDCO2 .CALL FILBLK .VALUE MOVNS A HRLS A HRRI A,SBUF .IOT DSKIN,A MOVSI B,-10. FNDCOX: SETZM (A) AOS A AOBJN B,FNDCOX MOVE A,SBUF CAME A,[-4,,0] JRST FNDCO2 ;NOT A GOOD TAPE MOVEI C,5 ;C WILL BE A POINTER INTO TAPE FCLOOP: CAML C,LENGTH JRST FNDCO4 MOVE A,SBUF(C) CAME A,[-1] JRST FCL1 ;REGULAR FILE MOVE A,SBUF+4(C) ;DATE OF NEXT FILE IF SNAME CHANGE CAMN A,[-1] JRST FCL3 LSH A,-27. CAIG A,2 ;OLD DATE JRST FCL3 CAIL A,71. CAILE A,76. JRST FCL2 FCL3: SETZM SBUF(C) ADDI C,2 JRST FCLOOP FCL1: ADDI C,3 JRST FCLOOP FCL2: MOVE A,SBUF+1(C) PSIS A JRST FCL1 FNDCO3: AOBJN V,FNDCO1 JRST RET FNDCO4: .CLOSE DSKIN, MOVEI A,100007 HRLM A,TRNI OPEN DSKOUT,TRNI .VALUE .CALL SDATE .VALUE .CALL SRDT .VALUE MOVN A,LENGTH HRLS A HRRI A,SBUF .IOT DSKOUT,A .CLOSE DSKOUT, JRST FNDCO2 AFIND: MOVSI A,-NFIGS CLEARM @FIGTB2(A) AOBJN A,.-1 PUSHJ P,FILGET ;WHAT SHOULD I FIND ?? PUSHJ P,DEVGET MOVEI B,6 HRLM B,TRNI MOVSI V,-12 ;ONCE FOR EACH TAPE DIRECTORY POSSIBLY ON DISK FLOOP: SETOM FLNI ;SO FNG WILL OPEN IFN MCOND DM, MOVE B,[SIXBIT/.TAPE9.TAPE8.TAPE7.TAPE6.TAPE5.TAPE4.TAPE3.TAPE2.TAPE1.TAPE0/](V) IFE MCOND DM, MOVE B,[SIXBIT/.TAPE0.TAPE1.TAPE2.TAPE3.TAPE4.TAPE5.TAPE6.TAPE7.TAPE8.TAPE9/](V) .SUSET [.SSNAM,,B] PUSHJ P,FNG ; REVERSE ORDER .TAPE DIR JRST NEXDIR MOVE D,DIRIDX SUBI D,LFBLOC MOVEM D,DIRIDX ; D HAS FIRST ENTRY POSITION ADDI D,FDIRBF PUSH P,D MOVE A,D MOVE C,LFDIR MOVEI N,3 MOVEI D,LFBLOC PUSHJ P,SORT POP P,D MOVE B,LFDIR SUBI B,LFBLOC ; B HAS LAST FILE POSITION NEXFL2: CAMG B,D JRST NEXFL1 ; DONE HRL C,B HRRI C,TFIL BLT C,TFIL+LFBLOC-1 ; SAVE LAST ENTRY HRL C,D HRR C,B BLT C,LFBLOC-1(B) ; FIRST GOES TO LAST HRLI C,TFIL HRR C,D BLT C,LFBLOC-1(D) ; TEM LAST GOES FIRST ADDI D,LFBLOC SUBI B,LFBLOC ; UPDATE POINTERS JRST NEXFL2 NEXFL1: PUSHJ P,NEXFLN JFCL JRST NEXFL4 NEXFIL: PUSHJ P,FNG JRST NEXDIR NEXFL4: PUSHJ P,NEXFL3 JRST NEXFIL NEXFL3: OPEN DSKIN,TRNI ;OPEN TAPE DIRECTORY JRST RET SETOM EOFF MOVEI B,0 ;SO THAT GWÄ WILL .IOT IMMEDIATELY THE FIRST TIME THROUGH JSR GWD MOVE C,A JSR GWD AOBJN C,.-1 ;SKIP TAPE HEADER MOVE C,A SETZM FILN COMPR: JSR GWD SKIPN A JRST FNDSSN AOS FILN MOVEM A,PFF1 JSR GWD MOVEM A,PFF2 ADD C,[2,,2] ; WE JUST READ TWO WORDS MOVE W,LENGTH IMUL W,[-1,,] COMCON: SKIPN D,FMSNM(W) JRST COMFN1 ;ZERO MATCHES TO ANYTHING CAME D,PSNAM JRST NEXCOM ;NO MATCH COMFN1: SKIPN D,FMFN1(W) JRST COMFN2 CAME D,PFF1 JRST NEXCOM COMFN2: SKIPE D,FMFN2(W) CAMN D,PFF2 JRST MATCH NEXCOM: AOBJN W,COMCON NEXNAM: JUMPGE C,INITC ;ALREADY CORRECT PLACE JSR GWD AOBJN C,.-1 ;GET TO BEGINNING OF NEXT ENTRY INITC: IMUL C,[-1,,] JRST COMPR FNDSSN: JSR GWD MOVEM A,PSNAM JRST COMPR NEXDIR: AOBJN V,FLOOP JRST CRR MATCH: JSR GWD ;READ DATE AND TIME PUSH P,B MOVEM A,DAYTIM ADD C,[1,,1] PUSHJ P,CRR PSIS FN1 PSIS FN2 PSIS PSNAM PSIS PFF1 PSIS PFF2 PDPT FILN PASC [ASCIZ / /] PUSHJ P,PFDATE POP P,B JRST NEXNAM DDPA: CAIGE A,10. ;SHOULD WE PRINT A '0' AS IN 4:07? PRINT 0 PUSH P,B PUSHJ P,DECPNT POP P,B POPJ P, DECPNT: IDIVI A,10. ;PRINTS A AS A DECIMAL NUMBER, CLOBBERING A AND B PUSH P,B CAIE A,0 PUSHJ P,DECPNT POP P,A ADDI A,"0 JRST TYO PFDATE: MOVE A,DAYTIM ;PRINTS CONTENTS OF DAYTIM AS FILE CREATION DATE AND TIME AOJE A,NODATE LDB A,[270400,,DAYTIM] ;CREATION DATE AND TIME PUSHJ P,DECPNT ;PRINT MONTH PASC [ASCIZ \/\] LDB A,[220500,,DAYTIM] PUSHJ P,DECPNT ;PRINT DAY PASC [ASCIZ \/\] LDB A,[330700,,DAYTIM] PUSHJ P,DECPNT HRRZ A,DAYTIM ; TIME PASC [ASCIZ / /] IDIVI A,60.*60.*2 ;HALF SECONDS IN AN HOUR PUSHJ P,DDPA ;PRINT HOURS PRINT : MOVE A,B IDIVI A,60.*2 ;HALF SECONDS IN A MINUTE PUSHJ P,DDPA ;PRINT MINUTES PRINT : MOVE A,B IDIVI A,2 ;HALF SECONDS IN A SECOND PUSHJ P,DDPA ;PRINT SECONDS CAIE B,0 PRINT .5 POPJ P, NODATE: PRINT - POPJ P, GWD: 0 GWD1: MOVE A,(B) ;THIS ROUTINE READS ONE WORD, BUT ASSUMES BLOCK INPUT AOBJN B,[JRST @GWD] ;NO NEED TO READ FROM DISK YET(MORE IN BUFFER) SKIPL EOFF JRST CPOPJ ;END OF FILE MOVE B,[-2000,,BUF] .IOT DSKIN,B SUBI B,BUF-1 ;SO ONE WORD BUFFER WILL WIN MOVNS B HRLS B HRRI B,BUF CAME B,[-LBUF-1,,BUF] ;FULL BUFFER? AOS EOFF ;NO, MUST BE LAST BUFFER IN FILE JRST GWD1 ;NOW GET THE WORD AEOF: MOVEI A,5 ; WRITE EOF,MAGOUT ASUMED OPEN MOVEM A,MTCMD MOVE A,[MAGOUT,,MTCMD] .MTAPE A, JRST NAUGHT POPJ P, AEOT: MOVEI A,10 PUSHJ P,TAPOPR SETOM EOTFLG SETOM ITAPE CLEARM ITAPE POPJ P, SPRF: MOVE A,[-1,,7] ;SPACE REVERSE FILE JRST TAPOPR SPFF: MOVEI A,7 ;SPACE FORWARD FILE JRST TAPOPR ARWND: SKIPA B,[1] AUNLD: MOVEI B,2 SETOM ITAPE SKIPL A,THTPN MOVEM A,LTHTPN SETOM THTPN MOVE A,B PUSHJ P,TAPOPR CLEARM EOTFLG POPJ P, AQUIT: .VALUE [ ASCIZ /:KILLî/] TAPOPR: OPEN MAGIN,MAGI JRST RET MOVEM A,MTCMD MOVE A,[MAGIN,,MTCMD] .MTAPE A, JRST NAUGHT .CLOSE MAGIN, POPJ P, ATPLA: HRRZ A,LPTO CAIN A,(SIXBIT /TPL/) JRST NAUGHT PRINT CHANGED TO TPL_ MOVEI SYM,(SIXBIT /TPL/) JRST SETOU1 DEVGET: PRINT LIST DEV = SETOUT: PUSHJ P,GETSYL ;READ DEVICE TO BE USED FOR LISTING STUFF ON JRST DEVGET HLRZS SYM CAIN SYM,(SIXBIT /TTY/) POPJ P, SETOU1: HRRM SYM,LPTO .SUSET [.SSNAM,,MYNAME] OPEN LPTCH,LPTO ;LIST FILES ON TAPE JRST ATPLA SETOM LPTSW ;SET LPT SWITCH ON POPJ P, ATLIST: PUSHJ P,DEVGET PUSHJ P,TAPGET MOVEI A,6 HRLM A,NSVOP MOVE A,[SIXBIT/.TAPE0/] MOVEM A,ATLSNM ATLS5: .SUSET [.SSNAME,,ATLSNM] .OPEN SAVET,NSVOP CAIA JRST ATLST4 AOS A,ATLSNM CAME A,[SIXBIT/.TAPE9/] JRST ATLS5 JRST RET ATLST4: SETZM ITAPE MOVE A,[-1,,B] .IOT SAVET,A ADD B,[1,,THBLK+1] .IOT SAVET,B PUSHJ P,PTHEAD MOVE A,[-1,,I] .IOT SAVET,A ATLST1: HRROI A,B .IOT SAVET,A JUMPL A,ATLST2 SKIPN B JRST ATLST3 MOVEM B,HBLK+2 HRROI A,HBLK+3 .IOT SAVET,A JUMPL A,ATLST2 HRROI A,HBLK+5 .IOT SAVET,A JUMPL A,ATLST2 PUSHJ P,LOUSY JFCL AOS ITAPE JRST ATLST1 ATLST2: SETOM ITAPE .CLOSE SAVET, POPJ P, ATLST3: HRROI A,HBLK+1 .IOT SAVET,A JRST ATLST1 ALIST: PUSHJ P,DEVGET ;LIST FILES ON MACRO-TAPE PUSHJ P,LAST POPJ P, JRST .-2 TAPGET: PUSH P,LPTSW TAPGT1: SETZM LPTSW PRINT TAPE NO= PUSHJ P,GETSYL JRST TAPGT1 JUMPL N,TAPGT1 CAIL N,MAXTAP JRST TAPGT1 POP P,LPTSW HRLM N,THTPN SETZM NPLACE MOVEM SYM,NSVTPN MOVEM SYM,GFRLNK+4 SKIPN LPTSW JRST SNPLAC PRINT TAPE NO = PDPT N PASC [ASCIZ / /] .RDATE A, MOVEM A,THDATE PRINT CREATION DATE PSIS THDATE PASC [ASCIZ / /] PRINT DUMPED BY PSIS MYNAME SNPLAC: SKIPN NPLACE ;IF ALREADY KNOW, DON'T MAKE INFINITE SYSTEM CALLS JRST SNPL0 .SUSET [.SSNAME,,NPLACE] POPJ P, SNPL0: PUSH P,A PUSH P,B PUSH P,C PUSH P,D HLRZ A,THTPN CAIN A,-1 HLRZ A,LTHTPN MOVE C,[440600,,D] MOVEI D,0 PUSHJ P,SIXNUM MOVEM D,SNTRYN SETOB B,C MOVE A,[SIXBIT /.TAPE0/] SNPL1: .CALL SNTRY ;IS TAPE IN THIS DIR? JRST SNPL3 ;NO MOVE B,A JRST SNPL4 ;YES, LEAVE IN SAME DIR SNPL3: .SUSET [.SSNAME,,A] .OPEN SNPLCH,FNO JRST SNPL2 ;NO. MOVE D,[-UDNAMP-1,,SNBUF] .IOT SNPLCH,D MOVE C,SNBUF+UDNAMP MOVE B,A AOS A CAME A,[SIXBIT /.TAPE9/] JRST SNPL1 SNPL2: IFN MCOND DM,[ CAIL C,460 JRST SNPL4 .OPEN SNPLCH,CRUFD ;BEST DIR IS GROSSLY FULL, CREATE A NEW ONE CAIA .VALUE .SUSET [.RIOS+SNPLCH,,C] LDB C,[220600,,C] CAIE C,4 .VALUE MOVE B,A ] IFE MCOND DM, MOVE B,[SIXBIT /.TAPE0/] SNPL4: MOVEM B,NPLACE ;USE THIS DIR .SUSET [.SSNAME,,NPLACE] .CLOSE SNPLCH, POP P,D POP P,C POP P,B POP P,A POPJ P, SINFO: IRPS X,,[THTPN THTYPE FUSNM LUSNM]Y,,[STAPEN STYPE SFUSNM SLUSNM] MOVE A,X MOVEM A,Y TERMIN MOVE A,THTPN CAME A,[-1] JRST SINFO5 MOVE A,LTHTPN MOVEM A,STAPEN SINFO5: .RDATE A, MOVEM A,STDATE SINFO1: .SUSET [.RUNAME,,SUSER] .SUSET [.SSNAM,,SPLACE] SINFO4: MOVEI A,100007 HRLM A,STATOP .OPEN STATC,STATOP JRST SINFO2 .CALL CLBIT JFCL HLRZ A,STAPEN LSH A,4 .ACCESS STATC,A MOVE A,[-20,,STAPST] .IOT STATC,A .CLOSE STATC, .SUSET [.SSNAM,,USNM] POPJ P, SINFO2: MOVEI A,7 ; MACRO TAPES DOESN'T EXIST,CREATE IT HRLM A,STATOP OPEN STATC,STATOP JRST RET SETZM BUF MOVE A,[BUF,,BUF+1] BLT A,BUF+LBUF-1 MOVEI B,MAXTAP SINFO3: MOVE A,[-20,,BUF] .IOT STATC,A SOJG B,SINFO3 .CLOSE STATC, JRST SINFO4 GINFO: MOVEI B,6 HRLM B,STATOP .SUSET [.SSNAM,,SPLACE] .OPEN STATC,STATOP JRST GINFO1 LSH N,4 .ACCESS STATC,N MOVE A,[-20,,STAPST] .IOT STATC,A .CLOSE STATC, GINFO2: .SUSET [.SSNAM,,USNM] POPJ P, GINFO1: SETZM STAPST MOVE A,[STAPST,,STAPST+1] BLT A,STAPST+20-1 JRST GINFO2 ATAPES: PUSHJ P,DEVGET .SUSET [.SSNAM,,SPLACE] MOVEI A,6 HRLM A,STATOP OPEN STATC,STATOP JRST RET MOVEI U,0 TAPES1: MOVE A,[-20,,STAPST] .IOT STATC,A SKIPE STAPEN PUSHJ P,LINFO ADDI U,1 CAIGE U,1040. JRST TAPES1 .CLOSE STATC, JRST CRR ATAPE: PUSHJ P,TAPGET PUSHJ P,GINFO PUSHJ P,LINFO JRST CRR LINFO: HLRZ A,STAPEN JUMPE A,NOINFO PDPT A PSIS STDATE SKIPN STYPE PRINT NORM SKIPGE STYPE PRINT INCR SKIPLE STYPE PRINT FULL PSIS SUSER SKIPN SDONE PRINT ABRT SKIPLE SDONE PRINT ARCH SKIPGE SDONE PRINT DUMP HRRZ A,STAPEN PDPT A PRINT PSIS SFUSNM PSIS SLUSNM JRST CRR NOINFO: PRINT NO INFORMATION JRST CRR ATAPED: PUSHJ P,ARWND ;CREATE TAPE DIRECTORY ON DISK FROM MOUNTED TAPE PUSHJ P,MAGOP POPJ P, MOVEI A,6 HRLM A,NSVOP .OPEN SAVET,NSVOP JRST NOEXIS PRINT _DIRECTORY ALREADY EXISTS._ PUSHJ P,CHECK NOEXIS: MOVEI A,7 HRLM A,NSVOP ;BLOCK IMAGE OUTPUT OPEN SAVET,NSVOP JRST RET MOVE A,[-LTHBLK,,THBLK] .IOT SAVET,A MOVE A,[-1,,[-3,,0]] .IOT SAVET,A SETOM USNM DLUP: PUSHJ P,ART3 PUSHJ P,MAGOP POPJ P, ;EOT MOVE B,USNM CAME B,HBLK+1 ;NEW S NAME? PUSHJ P,DLUPSN MOVE A,[-2,,HBLK+2] .IOT SAVET,A ;FILE-HEADER MOVE A,[-1,,HBLK+5] .IOT SAVET,A JRST DLUP DLUPSN: MOVE A,HBLK+1 MOVEM A,USNM HRROI A,[-1] .IOT SAVET,A HRROI A,USNM .IOT SAVET,A POPJ P, TAPSET: PUSHJ P,TAPGET MOVE U,N PUSHJ P,GINFO PUSHJ P,LINFO HRLM U,STAPEN LWREQ: PRINT LAST WRITTEN= PUSHJ P,GETSYL JRST LWREQ CAIN A,33 JRST TAPST1 SKIPE SYM MOVEM SYM,STDATE PRINT TYPE= PUSHJ P,TYI MOVEI C,1 CAIN A,33 JRST TAPST1 CAIN A,"F MOVEM C,STYPE CAIN A,"R SETZM STYPE CAIN A,"I SETOM STYPE PRINT _ARCHIV? PUSHJ P,TYI CAIN A,"Y MOVEM C,SDONE CAIN A,"N SETOM SDONE SKIPN STYPE JRST TAPST1 RNFULU: PRINT _REEL NO FIRST USER LAST USER BACK: PUSHJ P,GETSYL JRST RNFULU CAIN A,33 JRST TAPST1 MOVEM SYM,W SKIPE SYM HRRM N,STAPEN BACK1: PUSHJ P,GETSYL JRST UNDO1 CAIN A,33 JRST TAPST1 SKIPE SYM MOVEM SYM,SFUSNM PUSHJ P,GETSYL JRST UNDO2 SKIPE SYM MOVEM SYM,SLUSNM TAPST1: PUSHJ P,CHECK JRST SINFO1 UNDO1: PSIS W PUSHJ P,TYOS JRST BACK UNDO2: PSIS SYM PUSHJ P,TYOS JRST BACK1 FILAPP: SKIPGE APPENF POPJ P, ;NOTHING WAS DUMPED FOR THIS USER MOVEI A,6 HRLM A,NSVOP .SUSET [.SSNAM,,NPLACE] .OPEN SAVET,NSVOP JRST KARILY ;FIRST TIME THROUGH PUSHJ P,ACCESS MOVEI A,100007 ;WRITE-OVER MODE HRLM A,NSVOP OPEN SAVET,NSVOP JRST RET .ACCESS SAVET,B ;WE'RE ABOUT TO APPEND "USER" UFD" ONTO "TAPE XXX" FILAP1: MOVE A,[-1,,[0]] .IOT SAVET,A ;CREATE SNAME ENTRY HRROI A,USNM .IOT SAVET,A FLY: MOVNS USRUFD HRLS USRUFD HRRI USRUFD,LISTBF .IOT SAVET,USRUFD .CLOSE SAVET, POPJ P, KARILY: MOVEI A,7 HRLM A,NSVOP OPEN SAVET,NSVOP JRST RET MOVE A,[-LTHBLK-1,,LISTBF] .IOT SAVET,A MOVE A,[-1,,[-1]] .IOT SAVET,A HRROI A,USNM .IOT SAVET,A SUBI USRUFD,LTHBLK+1 MOVNS USRUFD HRLS USRUFD HRRI USRUFD,LISTBF+LTHBLK+1 .IOT SAVET,USRUFD .CLOSE SAVET, POPJ P, ACCESS: MOVEI B,0 ;ACCUMULATED ACCESS POINTER MORCRF: MOVE A,[-2000,,BUF] ;THIS ROUTINE ACCESSES TO THE END OF THE FILE .IOT SAVET,A ;THIS READING ONLY TO GET POINTER HLRE C,A ADDI B,2000(C) ;INCREMENT ACCESS POINTER JUMPGE A,MORCRF ;CONTINUE READING POPJ P, TAPEMB: ;DETERMINE INTELLIGENTLY WHETHER OR NOT TO ASK FOR ;TAPE AND REEL NUMBER ;AND ASK WHAT IS NECESSARY SKIPL THTPN JRST ADMP6 ;WE ALREADY KNOW WHAT TAPE THIS IS ADMPK: PUSHJ P,TAPGET MOVEM SYM,NSVTPN SKIPGE CDMFL ;DON'T ASK REEL # FOR NOT CDUMP SKIPL NTAPES ;DON'T ASK REEL # IF YOU KNOW IT JRST ADMP6 ;WE ALREADY KNOW WHAT REEL THIS IS PUSH P,LPTSW SETZM LPTSW PRINT REEL = POP P,LPTSW PUSHJ P,GETSYL JRST .-2 HRRM N,THTPN MOVEM N,NTAPES ADMP6: POPJ P, LAST: PUSHJ P,LOUSE POPJ P, PUSHJ P,ART3 ;FLUSH REST OF FILE (PITY WE HAVE TO READ ALL THIS CRUFT) AOS (P) POPJ P, LOUSE: PUSHJ P,MAGOP ;OPEN TAPE AND READ HEADER JRST ENDMAG ;END OF TAPE LOUSY: PUSHJ P,CRR PUSHJ P,TAPN PSIS HSNM PSIS HFN1 ;OUTPUT FILE NAME PSIS HFN2 SKIPE LNKFLG PUSHJ P,LDMUT5 SKIPE LNKFLG JRST NOPP SKIPL HPKN PDPT HPKN ;OUTPUT PACK NUMBER NOPP: SIXTYP [SIXBIT/ /] MOVE A,HDATE MOVEM A,DAYTIM SKIPN LNKFLG PUSHJ P,PFDATE AOS (P) POPJ P, ENDMAG: PRINT _ REEL = HRRZ A,THTPN PDPT A ;OUTPUT REEL NUMBER JRST CRR AMFD: PUSHJ P,DEVGET ;LIST MFD SETOM MFDIN AMFD1: PUSHJ P,MFDN POPJ P, PSIS USNM PUSHJ P,CRR JRST AMFD1 ALISTF: SETOM FLNI CLEARM MICFLG MOVEI A,(SIXBIT /DSK/) HRRM A,FNO GETDIR: PRINT DIRECTORY= PUSHJ P,GETSYL JRST GETDIR CAIN TER,15 PUSHJ P,CRR CAIN TER,": HLRM SYM,FNO MOVEM SYM,USNM CAIE TER,": .SUSET [.SSNAM,,USNM] PUSHJ P,DEVGET ;LIST FILE DIRECTORY ALISTK: PUSHJ P,FNG JRST CRR PUSHJ P,CRR PSIS FN1 PSIS FN2 SKIPN MICFLG PDPT PACKN JRST ALISTK ART6: PUSHJ P,ART3 ;FLUSH CURRENT FILE ART1: PUSHJ P,MAGOP ;OPEN TAPE-LOAD SINGLE FILE POPJ P, ;END OF TAPE SKIPE LSTWHL ;LIST ? PUSHJ P,LDMUT4 MOVN W,LENGTH HRLZS W COMCN2: SKIPN D,FMSNM(W) JRST CM2FN1 CAME D,HSNM JRST NEXCM2 CM2FN1: SKIPN D,FMFN1(W) JRST CM2FN2 CAME D,HFN1 JRST NEXCM2 CM2FN2: SKIPE D,FMFN2(W) CAMN D,HFN2 JRST ALD1B NEXCM2: AOBJN W,COMCN2 JRST ART6 ALD1B: IRP X,,[FN1,FN2] SKIPE A,TO!X(W) MOVEM A,L!X MOVE A,H!X SKIPN TO!X(W) MOVEM A,L!X TERMIN MOVEI A,(SIXBIT /DSK/) SKIPN TODEV(W) HRRM A,CPYO ;UNSPECIFIED DESTINATION FOR LOADS IS DISK SKIPE A,TODEV(W) HLRM A,CPYO ;SPECIFIED DESTINATION SKIPN A,TOSNM(W) MOVE A,HSNM ;UNSPECIFIED SNAME IS THE ONE READ FROM TAPE .SUSET [.SSNAM,,A] ;SET SNAME FOR MERGE TEST MOVEI A,6 HRLM A,CPYO SKIPL MRGSW JRST ALD9 .OPEN DSKOUT,CPYO JRST ALD3 ;FILE DOESNT EXIST PUSHJ P,ART3 ;FILE EXISTS, DONT FILE ON TOPE OF, FLUSH INPUT FILE JRST ART5 ALD3: SKIPE LNKFLG JRST ALD4 MOVEI A,7 HRLM A,CPYO ;IMAGE BLOCK OUTPUT OPEN DSKOUT,CPYO JRST RET SKIPE LSTWHL PUSHJ P,LDMUT3 MOVE A,HDATE SKIPN A PUSHJ P,ALD5 CAMN A,[-1] PUSHJ P,ALD5 MOVEM A,FDATE .CALL SDATE JFCL ;IT DOESN'T MATTER WEATHER YOU WIN OR LOSE, ITS HOW YOU PLAY THE GAME. ART4: MOVE A,[-LBUF,,BUF] PUSHJ P,MAGREAD ;READ A BUFFER LOAD FULL JRST ART5 ;ERROR HRLOI B,-BUF-1(A) EQVI B,BUF SKIPGE A PUSHJ P,ART3 JUMPGE B,ART5 .IOT DSKOUT,B ;OUTPUT IT TO DISK JUMPGE A,ART4 MOVE A,[SETZ DSKOUT] .DMPCH A, ART5: .CLOSE DSKOUT, SKIPE FMSNM(W) SKIPN FMFN1(W) JRST ART1 ;WAS "*"=> DON'T FLUSH ENTRY SKIPN FMFN2(W) JRST ART1 PUSHJ P,FLUSH POPJ P, JRST ART1 ALD5: SETZM A ;MAKE A A CREATION DATE FROM TAPE DATE PUSH P,B PUSH P,C LDB B,[300400,,THDATE] LDB C,[360400,,THDATE] IMULI C,10. ADD B,C DPB B,[330700,,A] LDB B,[140400,,THDATE] LDB C,[220400,,THDATE] IMULI C,10. ADD B,C DPB B,[270400,,A] LDB B,[000400,,THDATE] LDB C,[060400,,THDATE] IMULI C,10. ADD B,C DPB B,[220500,,A] POP P,C POP P,B POPJ P, FLUSH: SOSN LENGTH ; FLUSH ENTRY OF FILE THAT WAS JUST DUMPED POPJ P, MOVE B,LENGTH SUBI B,1 HRLI A,FMDUMP+1(W) HRRI A,FMDUMP(W) BLT A,FMDUMP(B) IRP X,,[FM,TO] IRP Y,,[DEV,SNM,FN1,FN2] HRLI A,!X!!Y+1(W) HRRI A,!X!!Y(W) BLT A,!X!!Y(B) TERMIN TERMIN JRST POPJ1 LDMUT4: MOVE A,HSNM CAMN A,CUSN POPJ P, ;SAME NAME PUSHJ P,TAPN MOVEM A,CUSN ;NEW NAME PSIS CUSN JRST CRR LDMUT3: PUSHJ P,TAPN PSIS HFN1 PSIS HFN2 SKIPE LNKFLG PUSHJ P,LDMUT5 SKIPN LNKFLG PDPT HPKN JRST CRR ALD4: SKIPE LSTWHL ; FORM LINK PUSHJ P,LDMUT3 MOVE A,HFN1 MOVEM A,LNKBLK+1 MOVE A,HFN2 MOVEM A,LNKBLK+2 .OPEN DSKOUT,LNKBLK JFCL PUSHJ P,ART3 ; FLUSH TO EOF JRST ART5 ALD9: SKIPE CAREF ;NOT MERGING, DO WE NEED TO CARE ABOUT UNDUMPED FILES ? SKIPE MICFLG JRST ALD3 .OPEN DSKOUT,CPYO JRST ALD3 ;DOESNT EXIST MOVEI A,DSKOUT .DMPCH A, ;SEE IF DUMPED JUMPN A,ALD3 ;YES WAS DUMPED PUSHJ P,ART3 JRST ART5 ART3: PUSH P,A PUSH P,B MOVEI A,7 MOVE B,[MAGIN,,A] .MTAPE B, ; SKIP TO EOF JFCL .CLOSE MAGIN, POP P,B POP P,A POPJ P, BDHD: PRINT _BAD HEADER MOVE A,[-3,,HSNM] PUSHJ P,MAGREAD JRST MAGOP ;ERROR PSIS HSNM ;TRY TO TYPE STUFF PAST LOSING HEADER PSIS HFN1 PSIS HFN2 PUSHJ P,CRR PUSHJ P,ART3 ;FLUSH CURRENT FILE JRST MAGOP CHECK: PUSH P,LPTSW SETZM LPTSW PUSHJ P,CRR PRINT ARE YOU SURE ? CHECK2: PUSHJ P,TYI CAIE A,"Y JRST ERR PUSHJ P,CRR POP P,LPTSW POPJ P, ATPACE: PUSHJ P,CRR PUSHJ P,TYOS ASPAC2: PUSHJ P,LAST POPJ P, PUSHJ P,TYI CAIN A,177 POPJ P, JRST ASPAC2 ASPACE: SETZM N CAIN TER,15 JRST ASPAC1 PUSHJ P,GETSYL POPJ P, ASPAC1: MOVEI A,7 ADDM N,ITAPE SKIPGE N SOS N HRL A,N PUSHJ P,TAPOPR CONSO 344,100000 ;BOT? SKIPL N POPJ P, JRST SPFF MAGOT: PSIS CHNTAB+MAGIN PUSHJ P,OPINFL PUSHJ P,CRR MOVEI A,150. .SLEEP A, MAGOP: SETZM HBLK+1 MOVE A,[HBLK+1,,HBLK+2] BLT A,HBLK+LHBLK-1 .OPEN MAGIN,MAGI ;OPEN MAG TAPE INPUT (READ HEADERS) JRST MAGOT ;WAIT FOR HIM TO MOUNT TAPE OR REWIND ??? CLEARM ERRCNT ;RESET ERR COUNT FOR THIS FILE AOSE ITAPE JRST ART2 SETZM THTYPE SETOM THDATE HRROI A,B PUSHJ P,MAGREAD ;READ AOBJN WORD INTO B JRST MAGOP ;ERROR TRNE B,-1 JSP D,BDHD ;BAD TAPE-HEADER - AOBJN WORD HAS NON-ZERO RIGHT HALF CAMGE B,[-LTHBLK,,] JSP D,BDHD ;BAD TAPE-HEADER - FIRST RECORD TOO LONG ADD B,[1,,THBLK+1] MOVE A,B PUSHJ P,MAGREAD ;READ REEL NUMBER JRST MAGOP PUSHJ P,PTHEAD ART2: HRROI A,B PUSHJ P,MAGREAD ;READ ANOTHER WORD JRST MAGOP JUMPL A,EOTISH ;EOT TRNE B,-1 JSP D,BDHD ;BAD FILE-HEADER - AOBJN WORD NON-ZERO RIGHT HALF CAMGE B,[-LHBLK,,] JSP D,BDHD ;BAD FILE-HEADER - RECORD TOO LONG ADD B,[1,,HBLK+1] MOVE A,B PUSHJ P,MAGREAD ;READ USER NAME, FILE NAMES AND PACK NUMBER JRST MAGOP SETZM LNKFLG HLRZ B,HPKN SKIPN B ; LINK? JRST POPJ1 MOVE A,[-3,,LNKNM1] PUSHJ P,MAGREAD JRST MAGOP SETOM LNKFLG AOS (P) POPJ P, PTHEAD: PRINT TAPE NO HLRZ A,THTPN PDPT A MOVE C,[440600,,NSVTPN] PUSHJ P,SIXNUM PRINT CREATION DATE PSIS THDATE PUSHJ P,CRR SKIPN THTYPE POPJ P, PRINT REEL NO HRRZ B,THTPN PDPT B SKIPGE THTYPE PRINT OF INCREMENTAL DUMP SETZM NPLACE PUSHJ P,SNPLAC SKIPLE THTYPE PRINT OF FULL DUMP JRST CRR SIXNUM: IDIVI A,12 ;CREATES SIXBIT FILE NAME FROM CONTENTS OF A PUSH P,B ;C INITIALLY SHOULD CONTAIN 440600,,LOC CAIE A,0 PUSHJ P,SIXNUM POP P,A ADDI A,20 IDPB A,C POPJ P, EOTISH: PRINT E-O-T SETOM EOTFLG .CLOSE MAGIN, POPJ P, ALCHEC: SETOM PNTALL JRST ACHEK1 AICHEC: PUSHJ P,ICHECK JRST RET ICHECK: PUSHJ P,MAGOP ;CHECK INCREMENTAL DUMPS JRST ICKEOT .SUSET [.SSNAM,,HSNM] MOVE A,HSNM CAMN A,LUSNM JRST ICKEOT ;DON'T CHECK LAST USER (SO I DUMP CONTINUES ON NEXT TAPE WITH FULL USER) MOVE A,HFN1 MOVEM A,FN1 MOVE A,HFN2 MOVEM A,FN2 .OPEN DSKIN,TRNI JRST ICK1 .CALL RESRDT JFCL .CALL RDATE JFCL MOVE A,FDATE CAME A,HDATE JRST ICK1 MOVE A,[ICKLP,,D] BLT A,D+ICKLPL-1 ICK2: MOVE A,[-LBUF,,BUF] .IOT DSKIN,A PUSH P,A MOVE A,[-LBUF,,BIF] PUSHJ P,MAGREAD JRST ICKER2 ;ERROR MOVE B,A POP P,A SUBI B,BIF-BUF CAME A,B JRST ICKERR CAMN A,[-2000,,BUF] JRST ICK4 PUSH P,A HLLZ B,A MOVE A,[-2000,,BUF] SUB A,B JRST D ICK3: POP P,A SKIPL A JRST ICK2 ;GET ANOTHER BLOCK ICK4: .OPEN DSKIN,TRNI JRST ICK1 .CALL RESRDT JRST RET .CALL RDATE JFCL MOVE A,FDATE CAME A,HDATE JRST ICK1 MOVE A,[400000,,DSKIN] .DMPCH A, IFE MCOND DM,[ MOVE A,HSNM CAME A,[SIXBIT /VANISH/] JRST ICK5 .FDELE TRNI JFCL JRST ICK1 ICK5: CAMN A,[SIXBIT /LIBVAN/] PUSHJ P,GFRDEL ] ICK1: .CLOSE DSKIN, PUSHJ P,ART3 JRST ICHECK ICKLP: MOVE B,(A) ;D MOVE C,BIF-BUF(A) ;E CAME B,C ;I JRST ICKER1 ;F AOBJN A,D ;SYM JRST ICK3 ;TER ICKLPL==.-ICKLP ICKER1: POP P,A ICKERR: JRST ICK1 ICKER2: POP P,A .CLOSE DSKIN, JRST ICHECK ICKEOT: POPJ P, ACHECK: CLEARM PNTALL ACHEK1: SETOM SUPERC ;SUPPRESS DATA ERROR COMMENTS CLEARM MICFLG SETOM CHKFLG .CORE CORSIZ+1 JRST .-1 PUSHJ P,DEVGET ;CRUDE FILE CHECKER CLEARM ALLWRD ;RESET TOTAL NUMBER OF WORDS FOR THIS REEL SKIPN MICFLG MOVEI A,(SIXBIT /DSK/) HRRM A,TRNI ACHUCK: PUSHJ P,MAGOP ;OPEN NEXT TAPE FILE JRST ACHIND ;END-OF-TAPE .SUSET [.SSNAME,,HSNM] MOVE A,HFN1 MOVEM A,FN1 MOVE A,HFN2 MOVEM A,FN2 CLEARM WRDCNT CLEARM LNTCNT CLEARM WRDONG CLEARM ERRALL CLEARM ERRCNT ;RESET # OF TAPE IOCS CLEARM ERRDSK ;RESET # OF DISK IOCS SKIPE LNKFLG JRST ACHUF3 .OPEN DSKIN,TRNI JRST DSKOPL .CALL RESRDT JFCL SETOM NEWCHR SKIPE MICFLG JRST ACHUF1 MOVEI A,DSKIN .DMPCH A, MOVEM A,NEWCHR JRST ACHUF1 MAGREA: SETZM RDERR .IOT MAGIN,A SKIPN RDERR AOS (P) POPJ P, ACHUF1: MOVE A,[-LBUF,,BUF] .IOT DSKIN,A HRLOI B,-BUF-1(A) EQVI B,BUF ;AOBJN POINTER 1 SKIPGE A .CLOSE DSKIN, PUSH P,A MOVE A,[-LBUF,,BIF] PUSHJ P,MAGREAD JRST ACHUF4 MOVE C,A POP P,A HRLOI D,-BIF-1(C) EQVI D,BIF ;AOBJN POINTER 2 SKIPL A SKIPGE C PUSHJ P,ART3 PUSHJ P,COMPAR ;COMPARE THE TWO BUFFERS HRRZI D,-BIF(C) ADDM D,WRDCNT SKIPL A JUMPGE C,ACHUF1 ;MORE TO COME ACHUF2: SKIPN PNTALL SKIPE ERRALL SKIPA JRST CHKT5 PUSHJ P,LOUSZ CHKT6: PDPT WRDCNT PRINT WORD SOSE WRDCNT PRINT S SKIPN WRDCNT PRINT CHKT5: SKIPN WRDONG JRST CHKT4 PDPT WRDONG PRINT BAD WORD SOSE WRDONG PRINT S SKIPN WRDONG PRINT PRINT AT PDPT SAVAOB .CLOSE DSKIN, CHKT4: MOVE A,WRDCNT ADDM A,ALLWRD SKIPN V,LNTCNT JRST CHKT7 MOVM W,V PDPT W SKIPL V PRINT LONGER SKIPG V PRINT SHORTER PRINT ON DISK CHKT7: SKIPN ERRCNT JRST CHKTA PDPT ERRCNT PRINT *TAPE IOC SOSE ERRCNT PRINT S SKIPN ERRCNT PRINT PRINT * CHKTA: SKIPN ERRDSK JRST CHKTB PDPT ERRDSK PRINT *DISK IOC SOSE ERRDSK PRINT S SKIPN ERRDSK PRINT PRINT * CHKTB: SKIPN PNTALL SKIPE ERRALL PRINT ! JRST ACHUCK ACHUF3: PUSHJ P,ART3 JRST ACHUF2 ACHUF4: POP P,A JRST ACHUF2 LOUSZ: PUSHJ P,LOUSY JFCL SKIPE MICFLG POPJ P, SKIPN NEWCHR PRINT NEW SKIPE NEWCHR PRINT POPJ P, DSKOPL: PUSHJ P,LOUSY JFCL PUSHJ P,OPINFL SETOM ERRALL PUSHJ P,CHKT3 ;FLUSH TAPE FILE JRST CHKT6 CHKT3: PUSH P,A MOVE A,[-LBUF,,BIF] PUSHJ P,MAGREAD JRST POPAJ MOVE C,A POP P,A HRRZI D,-BIF(C) ADDM D,WRDCNT JUMPGE C,CHKT3 PUSHJ P,ART3 POPJ P, ACHIND: .CORE CORSIZ JRST .-1 .CLOSE DSKIN, .CLOSE MAGIN, PRINT _ REEL = HRRZ A,THTPN PDPT A PRINT HAS PDPT ALLWRD PRINT WORDS__ POPJ P, COMPAR: MOVE U,B MOVE V,D MOVE W,U XOR W,V TLNE W,-1 JRST DSKUNC COMPA0: JUMPGE U,CPOPJ JUMPGE V,CPOPJ COMPA1: MOVE W,(U) CAME W,(V) JRST WRNWRD COMPA2: AOBJN U,.+2 POPJ P, AOBJN V,COMPA1 POPJ P, WRNWRD: SKIPN WRDONG ;FIRST LOSSAGE ? PUSHJ P,WRNWR1 AOS WRDONG JRST COMPA2 WRNWR1: HRRZ W,U SUBI W,BUF ADD W,WRDCNT MOVEM W,SAVAOB POPJ P, DSKUNC: HLRES U HLRES V SUB V,U ADDM V,LNTCNT SETOM ERRALL MOVE U,B MOVE V,D JRST COMPA0 CONSTA VARIAB PATCH: PAT: BLOCK LPAT PDL: BLOCK LPDL MFDLST: BLOCK 1000 ;MUST BE IN THIS ORDER BUF: BLOCK LBUF ;NORMAL BUFFER FDIRBF: BLOCK 2000+10 ;FOR FNG+POSSIBLE OVERFLOW LISTBF: BLOCK 600. ;3 WORDS MAX 190. FILES, LISTING BUFFER ZEROB: REPEAT 2000,0 BIF: BLOCK LBUF ;COMPARE BUFFER CORSIZ==<.+1777>_-10. END START