C PROGRAM MAGDMP.FT C ================ C C C C C MAGDMP - AN OS/8 TC58 MAGTAPE FILE STORAGE AND RETRIEVAL SYSTEM C --------------------------------------------------------------- C C C C C C PETER LEMKIN C NATIONAL INSTITUTES OF HEALTH C BETHESDA, MD 20014 C C C C APRIL 4, 1972 VERSION 1.2 C REVISED DECEMBER 7, 1972 VERSION 1.3 C C C C ABSTRACT C -------- C "MAGDMP" IS AN OS/8 PROGRAM USED TO SELECTIVELY SAVE, RESTORE, C APPEND AND COPY OS/8 FILES BETWEEN THE SYSTEM DEVICE AND C ONE OR MORE TU20 MAGTAPES (ON A TC58). FILES MAY BE MANIPULATED C BY THEIR FILE NAMES, EXTENSIONS, CREATION DATES OR ACCESS C DATES. WILD CARD (I.E. *) NAMING CONVENTIONS ARE ALSO ALLOWED. C **PAGE C C C C C INTRODUCTION C ------------ C "MAGDMP" SAVES, RESTORES, COPIES AND APPENDS FILES TO A MASS C STORAGE DEVICE, A MAGTAPE. A MAXIMUM OF 240 SYSTEM DEVICE FILES C MAY BE SAVED ON THE MAGTAPE AT ONE TIME. THIS IS THE UPPER LIMIT C ON THE SYSTEM DEVICE DIRECTORY. THE MAGTAPE HOWEVER IS NOT C LIMITED ON THE NUMBER OF FILES IT CAN STORE. THE FILE NAMES MAY C BE SPECIFIED EITHER FROM THE TELETYPE OR FROM A SYS: FILE C WITH A ".DA" EXTENSION BY PREFACING IT WITH "INDIR=". C THE LIST OF FILE NAMES IS TERMINATED WITH A NULL FILE NAME. C C THE DIRECTORY OF THE MAGTAPE CAN ALSO BE LISTED. DATE INFOR- C MATION IS KEPT WITH THE MAGTAPE FILES SO THAT RETRIEVAL C BY DATE SHOULD BE POSSIBLE. FILES MAY BE SPECIFIED USING C A "*" WILDCARD SPECIFICATION. EG. "CAT.*" SPECIFIES ALL FILES C WITH A "CAT" FILE NAME AND ANY EXTENSION. "*.EXTENSION" AND C "*.*" ARE ALSO ALLOWED. C C THE ACCESS DATE AS WELL AS THE FILE CREATION DATE IS C STORED ON THE TAPE HEADER FOR EACH FILE ON THE MAGTAPE. C A FILE HEADER CONSISTS OF IN THIS ORDER: FILE NAME AND C EXTENSION, ACCESS DATE, ACCESS TIME OF DAY, NUMBER OF BLOCKS C (256 WORDS/BLOCK=1 MAGTAPE RECORD), CREATION DATE, C PACKED ACCESS DATE, AND PACKED CREATION DATE. C C PARITY CHECKING IS ALSO DONE FOR READING AND WRITING OF C THE MAGTAPE. IF A PARITY ERROR OCCURS, THE OPERATION IS C ATTEMPTED AGAIN UNTIL IT SUCCEEDS EACH TIME PRINTING C OUT THE NAME OF THE FILE WHICH IS BAD AND THE TYPE OF C OPERATION "SAV"E OR "RES"STORE. C C THE DATA IS DUMPED WITH 256 WORDS/RECORD IN CORE DUMP MODE. C THE FIRST RECORD OF A MAGTAPE FILE IS ITS HEADER WHILE THE C REMAINDER OF THE FILE IS THE ACTUAL DATA. EACH FILE IS C TERMINATED WITH AN EOF. AT THE END OF A SET OF FILES, AN EXTRA C EOF IS WRITTEN TO MARK THE PLACE TO APPEND FUTHER FILES. C C C C COMMANDS C ------------- C 1. "SAV"E - SAVES THE SYSTEM DEVICE FILES SPECIFIED BY THE C USER ONTO MAGTAPE. C 2. "RES"TORE - RESTORES THE FILES SPECIFIED BY THE USER ON THE C MAGTAPE ONTO THE SYSTEM DEVICE. C 3. "APP"END - SIMILAR TO "SAV"E BUT APPENDS THE FILES AT THE C END OF THE MAGTAPE. IT SHOULD DELETING EXISTING FILES C FROM THE MAGTAPE IF THEY ARE TO BE APPENDED (NOT YET C IMPLEMENTED). C 4. "DIR"ECTORY - LISTS THE DIRECTORY OF THE MAGTAPE ON THE C TELETYPE AND LINEPRINTER. (DELETE THE LPT: CODE IF NO C LPT: EXISTS). C 5. "COP"Y - COPY THE SPECIFIED FILES FROM MTA0: TO MTA1: C WHERE MTA1: WILL BE REWOUND BEFORE COPYING BEGINS. C 6. "HEL"P - PRINTS A MESSAGE ON HOW TO USE THE SYSTEM. C C C C C C C C C C **PAGE C C USE OF ACCESS AND CREATION DATES FOR STORAGE AND RETRIEVAL C ---------------------------------------------------------- C SAVING AND RESTORING OF FILES MAY BE CONTROLLED C BY PUTING CONSTRAINTS ON THE DATES OF THE FILES TO C BE TRANSFERED. THIS SPECIFICATION IS SPECIFIED AFTER THE C FILE NAME BY ENCLOSING THE SPECIFICATION IN SQUARE BRACKETS C SUCH AS: CAT.RL[3/4/45] C MORE ELABORATE SPECIFICATIONS MAY BE USED TO SPECIFY THE DATE C CONDITION. IT MAY BE A RANGE OF DATES AS IN C [3/4/45-12/19/45] C OR IT MAY CONTAIN ONE OF THE FOLLOWING THREE MODIFIERS: C 1. ">" MEANING ALL DATES AFTER THAT MENTIONED. C 2. "<" MEANING ALL DATES BEFORE THAT MENTIONED. C 3. "C" MEANING ALL RETRIEVAL DONE BY "C"REATION DATE. C AN EXAMPLE OF THE USE OF MODIFIERS IS AS FOLLOWS: C [3/4/45>] MEANING ALL FILES AFTER 3/4/45. C C THE DATE INFORMATION IS KEPT IN THE ARRAY IDYLM(3). C INITIALLY, THE ARRAY IDYLM(3) IS FILLED WITH ZEROS C IF A SINGLE DATE WITH MODIFIERS IS C SPECIFIED IN [ ], THEN IDYLM(1) CONTAINS THE PACKED C DATE AND IDYLM(3) CONTAINS THE MODIFIERS. C EG: [3/4/45>] MEANS ALL DATES AFTER 3/4/45 C [3/4/45<] MEANS ALL DATES BEFORE 3/4/45 C IF A RANGE OF DATES IS SPECIFIED BY SEPARATION WITH A "-" C THEN THE FIRST (LOWER DATE) IS PUT INTO IDYLM(1), THE C SECOND INTO IDYLM(2), AND THE MODIFIERS INTO IDYLM(3). C EG: [3/4/45-12/19/45] MEANS ALL DATES BETWEEN 3/4/45 C AND 12/19/45. C IF THE MODIFIER "C" IS USED, THE RETRIEVAL WILL BE C ON THE "C"REATION DATE, OTHERWISE ON THE ACCESS DATE. C THE ACCESS DATE IS THE DATE WHEN THE FILES WERE "SAV"ED. C *** THE DATE INFORMATION IS PASSED TO PROGRAM MAGEX.SV C BUT IT DOES NOT USE IT AS OF VERSION 1.3*** C C C C C C C C HARDWARE REQUIRED C ---------------- C A 12K PDP8 WITH EAE RUNNING OS/8, AND A TC58 MAGTAPE CONTROLLER. C A LINEPRINTER (FORTRAN DEVICE 3.) IS OPTIONAL. THE LINEPRINTER C HANDLER SUPPLIED BY DEC WAS REMOVED IN FAVOR OF ONE C FOR A NON-STANDARD LINEPRINTER (A.B. DICK 940 ON C ECLECTIC COMPUTER CORP INTERFACE DEVICE CODE C 65). THE CHANGES WERE MADE IN UTILTY.SB AND THIS IS C CALLED UTIL2.SB AND IS LOADED ***BEFORE** LIB8.RL/L. C IF ANOTHER LPT: IS USED, THE UTILITY PACKAGE MUST BE C MODIFIED. THE UTIL2.SB ALSO HAS SOME OTHER CHANGES: C 1. A SUBROUTINE CALLED "EOF" USED TO TEST THE C END OF FILE OF GENERAL TYPE I/O. C 2. DEVICE 2 IS A PT08 WHICH LOOKS LIKE A TTY: C 3. DEVICE 3 ON INPUT IS A PT08 WITHOUT ECHO C REPLACING THE CARD READER. C ****THE TTY: LIKE DEVICE IS DEFINED TO BE THE ASR 33 NORMALLY C BY JDEV=1, AND MAY BE CHANGED TO JDEV=2 FOR PT08. C C C C C **PAGE C SUBROUTINES NEEDED: C ------------------ C 1. MAGEX.RL - THE 2ND HALF OF THE MAGDMP PROGRAM. C NOTE THAT MAGEX IS A MAIN NOT A SUBROUTINE. C 2. PACK.RL - PACK A 1A1 STRING INTO "FILENAME" FORMAT. C 3. PUSH.RL - PUSH A LOOKUP ENTRY ONTO THE STACK. C 4. DIRECT.RL - SEARCH THE DIRECTORY FOR "*" EXTENSIONS AND PUSH C THEN ONTO THE STACK. C 5. MAGTAP.RL - A TC58 MAGTAP HANDLER BY RAY GLASS AND C PETER LEMKIN. C 6. DATE.RL - TO UNPACK THE PS/8 DATE C 7. EOF.RL - TO CHECK FOR EOF ON THE SYSTEMS DEVICE. C (ONLY IN VERSION UTIL2.RL OF UTILTY.SB MODIFIED C BY PETER LEMKIN.) C C C C C C C VARIABLES OF INTEREST C --------------------- C FFF(1) AND FFF(2) IS THE NAME INPUT FROM THE TTY OR INDIRECT C OF THE FILE TO BE LISTED OR THE NAME OF THE C FILE CONTAINING THE LIST TO BE LISTED. (IT IS IN C PAL8 "FILENAME" FORMAT.) C ITIME(1) CONTAINS THE HOURS WHEN THE TAPE ACTION WAS TAKEN. C ITIME(2) CONTAINS THE MINUTES WHEN THE TAPE ACTION WAS TAKEN. C IBUF(256) IS THE DATA TRANSFER BUFFER. C ISW =0 FOR DIRECT USE OF FILE NAME FFF(1). C =1 FOR INDIRECT USE OF FILE NAME FFF(1). C IPNT IS THE POINTER TO THE FILE NAME STACK "STACK". C HHH(2) IS THE INDIRECT SYMBOL "INDIR=" USED TO SIGNAL INDIRECT C INPUT. C IDEV = 2 FOR PT08, 1 FOR TTY AND 4 FOR SYS: FOR GETTING C THE NEXT NAME. C SAVEF IS THE MAGDMP COMMAND "SAV","RES","HEL","APP","DIR". C STACK(240,2) IS THE PUSH DOWN STACK USED TO STORE THE NAMES C OF THE FILES TO BE LISTED. IT IS ASSUMED THAT THEY WILL C BE ON THE SYS: . C (FORMAT: FILE NAME, EXTENSION) C ISTACK(240,6) IS PART OF THE PUSH DOWN STACK AS FOLLOWS: C ISTACK(*,1) - STARTING BLOCK # C ISTACK(*,2) - # BLOCKS/FILE. C ISTACK(*,3) - LOWER DAY LIMIT ( IDYLM(1) ). C ISTACK(*,4) - UPPER DAY LIMIT ( IDYLM(2) ). C ISTACK(*,5) - DAY LIMIT MODIFIERS ( IDYLM(3) ). C ISTACK(*,6) - THE CREATION DATE (PACKED) OF THE FILE. C IDYLM(3) IS THE DAY LIMITS SPECIFIED BY THE USER TO CONTROL C FILE STORAGE OR RETREIVAL. C ICREATION - THE PACKED CREATION DATE OF FILE TO BE SAVED C ACCESSED BY THE "DIRECT" SUBROUTINE. C MAX CURRENTYLY 240, IS THE MAXIMUM NUMBER OF INPUT FILES. C JDEV CURRENTLY 1, IS THE TTY INPUT DEVICE. C ISTBLK IS THE STARTING BLOCK # OF THE CURRENT FILE C IBKNMB IS THE # OF BLOCKS OF THE CURRENT FILE. C LPTDEV IS THE OUTPUT DEVICE FOR DIRECTORY OUTPUT (1 OR 3). C C C C **PAGE C PAGE #3 C LOADING PROCEDURE C =================== C .R LOADER C *MAGDMP.RL/I,DIRECT.RL,PUSH.RL C *PACK.RL/2 C *UTIL2.RL,DATE.RL C *LIB8.RL/L C *$ C .SAVE DSK:MAGDMP C .R LOADER C *MAGEX.RL,MAGTAP.RL,DATE.RL C *UTIL2.RL C *LIB8.RL/L C *$ C .SAVE SYS MAGEX.SV C C C C RUNNING MAGDMP C --------------- C 1. MOUNT THE MAGTAP(S) ON MTA0: (AND MTA1:). C 2. TURN ON THE LPT: IF A MAGTAPE DIRECTORY IS TO BE LISTED. C 3. RUN MAGDMP AS ".R MAGDMP". C 4. IN RESPONSE TO THE "*", TYPE THE OPERATION C SAV, RES, APP, DIR, COP, HEL. C 5. IN RESPONSE TO THE REQUEST "FILE?:" GIVE A FILE NAME. C THIS CONTINUES UNTIL A "RETURN" KEY IS PRESSED C AND THE OPERATION IS EXECUTED ON THE LIST OF C FILES SPECIFIED. TO SPECIFY FILES INDIRECTLY, TYPE C "INDIR=" TO SIGNIFY INDIRECT INPUT IS TO BE SPECIFIED C BY THE NEXT FILE. C C C C C C ERROR MESSAGES C ============== C 1. "FILE XXXXXX.XX NOT ON SYS:" WILL BE TYPED C IF THE FILE IS NOT ON DEVICE SYS. IF IT IS ACCEPTING THE C NAME FROM THE TTY: THEN CORRECT THE SPELLING OR TYPE ANOTHER C NAME. IF IT IS FROM THE INDIRECT FILE, THE FILE WILL BE C SKIPED AND NOT LISTED. C C 2. "ANSWER SAV RES, APP, COP, HELP, OR DIR" ON INITIAL COMMAND. C C 3. "> "MAX" FILES" IS TYPED IF MORE THAN "MAX" FILES ARE C ENTERED. THE PROGRAM IS RESTARTED WITH NO FILES IN THE STACK. C C 4. "SYS: DIR FAILURE" - FATAL ERROR ON READING THE DIRECTORY C FOR A "*" TYPE OPERATION. C C 5. "FILE XXXXXX.XX EXISTS" - THE FILE XXXXXX.XX WAS ALREADY C ENTERED. SO IGNORE IT THIS TIME. C C 6. "READ SYS: ERR =XXXXXX.XX" - SYSTEM READ I/O ERROR C ON READING FILE XXXXXX.XX FOR A SAVE OR APPEND. FATAL. C C 7. "ENTER ERR=XXXXXX.XX" - SYSTEM ENTER ERROR ON ENTER C FOR FILE XXXXXX.XX ON A RESTORE. FATAL. C C 8. "SYS: WRITE ERR=XXXXXX.XX" - FATAL WRITE ERROR ON C RESTORING FILE XXXXXX.XX. C C 9. "CLOSE ERR=XXXXXX.XX" - FATAL ERROR ON CLOSEING THE C FILE XXXXXX.XX ON A RESTORE. C 10. " " PARITY ERROR ON FILE XXXXXX.XX" - A PARITY C OPERATION HAS OCCURED ON THE FILE SPECIFIED. IT WILL C TRY THE OPERATION AGAIN UNTIL IT SUCCEEDS. IF IT HANGS C THEN BETTER GET ANOTHER TAPE. IS EITHER C "SAV", OR "RES". C C C C C C C **PAGE C PAGE # 4 C S SKPDF MTTR 6721 /SKIP IF MAGTAPE TRANSPORT READY. C COMMON IPNT,STACK,RES,SAV,DIR,HEL,APP,ISTACK,COP,LPTDEV COMMON SAVEF,KDEV,ITIME,IBUF,MAX,T,IDYLM,IBKNMB,ISTBLK,ICREATION DIMENSION FFF(2),III(6),STACK(241,2),IBUF(256),ISTACK(241,6) DIMENSION ITIME(2),JSV(3),IDYLM(3),HHH(2),IHHH(6) EQUIVALENCE (FFF(1),III(1)),(JSV(1),QSAVEF),(HHH(1),IHHH(1)) C C C C 1. CLEAR THE EOF FLAG, AND SET FLAGS. 110 CALL EOF(IEOF) MAX=241 LPTDEV=1 IPNT=1 FFF(2)=0 F2='DA ' ISW=0 RES='RES ' SAV='SAV ' DIR='DIR ' HEL='HEL ' APP='APP ' COP='COP ' HHH(1)='I N D ' HHH(2)='I R = ' JDEV=1 IDEV=JDEV KDEV=JDEV S TAD (7240 /": " S DCA \ICNOL C C C C C 1.0.1 TEST IF THE DATE WAS ENTERED. CALL DATE(I,I,I) IF(I)1101,1102,1101 1102 WRITE(KDEV,1103) 1103 FORMAT('ENTER DATE!! RESTART.') CALL EXIT C C C 1.0.2 CHECK WHETHER THE MAGTAPE IS READY. S\1101, MTTR /TEST IF MAGTAPE READY GOTO 1105 GOTO 1106 1105 WRITE(KDEV,1104) 1104 FORMAT('MTA0: NOT READY') CALL EXIT C C C C C 1.1 PRINT THE INTIALIZATION MESSAGE. 1106 WRITE(KDEV,1111) 1111 FORMAT('MAGDMP V01.3 12/7/72') C C C C C 1.2 ASK FOR THE TIME OF DAY... 2001 READ(KDEV,1112) ITIME(1),ICOLON,ITIME(2) 1112 FORMAT('TIME OF DAY? XX:XX =',A2,A1,A2) IF(ICOLON-ICNOL)2001,56,2001 C C C C C C 2. ASK WHETHER SAVE OR RESTORE THE FILES. 56 READ(KDEV,212)SAVEF C FORCE THE LAST 2 CHAR TO BE SPACES. QSAVEF=SAVEF JSV(3)=-2016 SAVEF=QSAVEF 212 FORMAT('*',A3) C TEST IS SAV, RES, DIR, APP, OR HEL IF(SAVEF-SAV)58,111,58 58 IF(SAVEF-RES)581,111,581 581 IF(SAVEF-APP)582,111,582 582 IF(SAVEF-HEL)583,306,583 583 IF(SAVEF-DIR)584,306,584 584 IF(SAVEF-COP)59,111,59 59 WRITE(KDEV,214) 214 FORMAT('ANSWER "SAV", "RES", "COP", "HELP", "APP", OR "DIR"') GOTO 56 C C C C C C C C 3. LOOP TO GET THE FILENAME. C TEST IF IT IS FROM THE TTY: OR SYS: INDIRECT FILE. 111 IF(IDEV-JDEV)160,150,160 C C C C C 4. THE NAME IS FROM THE TTY. 150 IDEV=JDEV READ(KDEV,211)(IBUF(IJK),IJK=1,64) 211 FORMAT('FILE: ',128A1) C C C C C 4.1 PACK IT INTO FFF. CALL PACK(FFF(1),FFF(2),1) C C C C C C C C 5. TEST THE INPUT TO SEE IF THE REQUEST IS FOR INDIRECT. DO 151 M=1,6 IF(IHHH(M)-IBUF(M))170,151,170 151 CONTINUE C C C C 6. IT IS INDIRECT FROM THE SYS: . PACK THE FILE NAME INTO FFF. DO 1151 M=1,58 1151 IBUF(M)=IBUF(M+6) CALL PACK(FFF(1),FFF(2),1) C C C C C 7. OPEN THE INDIRECT NAME LIST SYS: FILE. C BUT GET THE PSEUDO EXTENSION NAME NOW TO BE USED AS THE C INDIRECT FILE NAME. 152 FFF(2)=F2 C C C C C 7.1. YES, DO THE LOOKUP. S CLA S TAD PNTR S DCA LOOKUPNAME S CLA CLL IAC /DEVICE SYS:=0001 S CPAGE 11 S 6212 /CIF 10 S JMS 7700 /USR S 2 /LOOKUP ON DEVICE SYS: SLOOKUPNAME, 0 S 0 S JMP \113 /NOT THERE... GOTO 153 C C C C C 7.2. NOT FOUND, PRINT A MESSAGE. 113 WRITE(KDEV,213)(IBUF(IJK),IJK=1,24) 213 FORMAT(' FILE: ',24A1, 'NOT ON SYS:') GOTO 150 C C C C C C 7.3 IT WAS THERE, GO OPEN THE FILE. 153 CALL IOPEN('SYS',FFF(1)) IDEV=4 C C C C C 8. GO GET THE NAME INDIRECTLY FROM THE DISK FILE. 160 READ(IDEV,171)(IBUF(IJK),IJK=1,64) 171 FORMAT(64A1) C C C C 9. TEST THE SYS: EOF FLAG TO SEE IF DONE WITH INDIRECT LIST. CALL EOF(IEOF) IF(IEOF)150,161,150 C C C C C 9.1 NOT DONE YET. 161 WRITE(KDEV,211)(IBUF(IJK),IJK=1,24) C C C C 10. CONVERT THE TTY: INPUT NAME TO FILE LOOKUP NAME. C PUT ALL SPACES (.32 DECIMAL) TO 00. C FIRST COPY THE NAME FOR USE IN THE ERROR PRINT MESSAGE. 170 CALL PACK(FFF(1),FFF(2),1) C C C C 11. TEST IF NULL FILENAME IS END OF THE LIST TO SIGNIFY EOF. IF(III(1))114,304,114 C C C C C 12. DO LOOKUP TO TEST IF THE FILENAME IS ON DEVICE SYS:. C TRY AGAIN IF FAIL. C TEST IF A RESTORE, THEN DONT BOTHER WITH THE LOOKUP. 114 IF(SAVEF-RES)116,301,116 116 IF(SAVEF-COP)115,301,115 301 CALL PUSH(FFF(1),FFF(2)) GOTO 111 C C C C C 13. CHECK WHETHER IT IS IN THE SYS: DIRECTORY AND PUSH IT C IN THE DIRECT SUBROUTINE. 115 CALL DIRECT(FFF(1),FFF(2),IFLAG) GOTO 111 C C C C C C C C C C C 14. GO EXECUTE THE COMMAND ... 304 IF(IPNT-1)305,305,306 305 CALL EXIT 306 IPNT=IPNT-1 CALL CHAIN('MAGEX') C SPNTR, \FFF END