*RESTORE COMMANDS                                       HEADER  FUPRSD  0001.000
         M.PGM     FUP.RESD,MPX-32,3.6.1,01                             0002.000
         SPACE                                                          0003.000
*                                                                       0004.000
************************************************************************0005.000
*                                                                      *0006.000
*                    PROPRIETARY INFORMATION                           *0007.000
*                    -----------------------                           *0008.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0009.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0010.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0011.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0012.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0013.000
*                                                                      *0014.000
*                       RESTRICTED RIGHTS                              *0015.000
*                       -----------------                              *0016.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0017.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0018.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0019.000
*   252.227.7013                                                       *0020.000
************************************************************************0021.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0022.000
*     ALL RIGHTS RESERVED                                              *0023.000
************************************************************************0024.000
*-                                                                      0025.000
*+                                                                      0026.000
*        FUNCTIONAL DESCRIPTION                                         0027.000
*                                                                       0028.000
*        THIS MODULE CONTAINS TWO OF THE COMMAND PROCESSING ROUTINES    0029.000
*        FOR THE FILE UTILITY PROGRAM FOR THE NEW FILE SYSTEM.          0030.000
*        THE COMMANDS HANDLED ARE:                                      0031.000
*                                                                       0032.000
*                  RESTORE VIA DIRECTORY                                0033.000
*                  RESTORE VIA POSITION                                 0034.000
*-                                                                      0035.000
************************************************************************0036.000
*                                                                      *0037.000
*        HISTORY OF FUPRSD             MPX 3.6.1                       *0038.000
*                                                                      *0039.000
************************************************************************0040.000
*                                                                       0041.000
*        VOLMGR REV 3.6.1.01 BL 7                               ETRN361 0042.000
*                                                               ETRN361 0043.000
*        MODULES: FUPMAN (REV 3.6.1.01)                         ETRN361 0044.000
*                 FUPSET (REV 3.6.1.01)                         ETRN361 0045.000
*                 FUPCPY (REV 3.6.1.01)                         ETRN361 0046.000
*                 FUPTRN (REV 3.6.1.01)                         ETRN361 0047.000
*                 FUPRSD (REV 3.6.1.01)                         ETRN361 0048.000
*                 SJ.VPRE(REV 3.6.1.01)                         ETRN361 0049.000
*                 SH.VOMM(REV 3.6.1.03)                         ETRN361 0050.000
*                 SM.MPXMC(REV 3.6.1.08)                        ETRN361 0051.000
*                                                               ETRN361 0052.000
*        07/13/94  11464 ADDED SUPPORT FOR ENHANCED TRUNCATE    ETRN361 0053.000
*                  OPTION                                       ETRN361 0054.000
*********************************************************************   0055.000
*                                                                   *   0056.000
*        HISTORY OF FUPRSD             MPX 3.6.0                    *   0057.000
*                                                                   *   0058.000
*********************************************************************   0059.000
*                                                                       0060.000
*        VOLMGR REV 3.6.0.12  BL11                              EQIC360B0061.000
*        MODULES: FUPRSD (REV 3.6.0.06)                         EQIC360B0062.000
*        MODULES: FUPLOG (REV 3.6.0.04)                         EQIC360B0063.000
*        MODULES: FUPGBL (REV 3.6.0.03)                         EQIC360B0064.000
*        EQIC360B  08/24/93  10833  DO NOT ISSUE WARNING IF     EQIC360B0065.000
*                  IDIRSEOF IS SET BUT OPT.B.SE IS NOT SET;     EQIC360B0066.000
*                  CHANGE WARNING MESSAGE IN CASE WHERE         EQIC360B0067.000
*                  IDIRSEOF IS NOT SET BUT OPT.B.SE IS SET.     EQIC360B0068.000
*                                                                       0069.000
*        VOLMGR REV 3.6.0.09  BL 9                              CP12522 0070.000
*        MODULES: FUPRSD (REV 3.6.0.05)                         CP12522 0071.000
*        CP12522   07/27/93  10833  CORRECT INDEX REGISTER FOR  CP12522 0072.000
*                  SOFT EOF TESTS.                              CP12522 0073.000
*                                                                       0074.000
*        VOLMGR REV 3.6.0.07  BL 4                              S920696 0075.000
*        MODULES: FUPRSD (REV 3.6.0.04)                         S920696 0076.000
*        S920696   04/19/93  10833  CORRECT INVALID BRANCH TO   S920696 0077.000
*                  ERROR ROUTINE IF FIRST EOF ENCOUNTERED.      S920696 0078.000
*                                                                       0079.000
*        VOLMGR REV 3.6.0.06  BL 3                              CP12500 0080.000
*        MODULES: FUPRSD (REV 3.6.0.03)                         CP12500 0081.000
*        CP12500   04/05/93  10833  ADD MISSING INDEX REGISTER  CP12500 0082.000
*                  TO SET SEOF IF CHANGING TAPE DEVICE AT MOUNT.CP12500 0083.000
*                                                                       0084.000
*        VOLMGR REV 3.6.0.05                                    EQIC360A0085.000
*        MODULES: FUPRSD (REV 3.6.0.02)                                 0086.000
*        EQIC360A  03/11/93  10833  IF A NEW DEVICE IS MOUNTED  EQIC360A0087.000
*                  AFTER VOLMGR IS INVOKED (I.E. IF A NEW       EQIC360A0088.000
*                  DEVICE IS SPECIFIED THROUGH J.MOUNT), SET    EQIC360A0089.000
*                  OR RESET SEOF MODE ACCORDING TO THE UDT OF   EQIC360A0090.000
*                  THE NEW DEVICE.                              EQIC360A0091.000
*                                                                       0092.000
*        VOLMGR REV 3.6.0.01                                    EQIC360 0093.000
*        MODULES: FUPRSD (REV 3.6.0.01)                         EQIC360 0094.000
*        EQIC360   02/12/93  10833  ADD SCSI QIC SUPPORT        EQIC360 0095.000
*                                                                       0096.000
*********************************************************************   0097.000
*                                                                   *   0098.000
*        HISTORY OF FUPRSD             MPX 3.5U02A                  *   0099.000
*                                                                   *   0100.000
*********************************************************************   0101.000
*                                                                       0102.000
*        FUPRSD VERSION 3.5U02A.02 BL8                          CP12394 0103.000
*                                                               CP12394 0104.000
*        CP12394  09/09/92 10833 CODE TO INSERT SDIR (NODEDIR)  CP12394 0105.000
*                 FOR @SYSTEM(SYSTEM) DIRECTORY NAME MOVED TO   CP12394 0106.000
*                 FUPMAN VERSION 3.5U02A.04 FOR RESTORE         CP12394 0107.000
*                 FROM/TO PATHNAMES.  FOR RESTORE VOLUME=SYSTEM CP12394 0108.000
*                 THE CODE CHANGES REMAIN IN THIS MODULE.       CP12394 0109.000
*                                                                       0110.000
*        VOLMGR REV 3.5.U02A.07                                 E3RMS35 0111.000
*        MODULES: FUPRSD (REV 3.5U02A.01)                       E3RMS35 0112.000
*        ENHANCEMENT: E3RMS35                                   E3RMS35 0113.000
*                                                               E3RMS35 0114.000
*        08/14/92 10833 IF WE HAVE RMSS3.1 OR LATER AND ARE     E3RMS35 0115.000
*                 ON A NO SYSTEM VOLUME NODE, AND THE VOLUME    E3RMS35 0116.000
*                 COMPONENT OF THE "TO" PATHNAME IS "SYSTEM"    E3RMS35 0117.000
*                 AND THE TARGET DIRECTORY IS "SYSTEM", USE     E3RMS35 0118.000
*                 THE NAME OF NODEDIR FOR THE DIRECTORY NAME.   E3RMS35 0119.000
*+                                                                      0120.000
*        ENVIRONMENT                                                    0121.000
*                                                                       0122.000
*    EXTERNAL REFERENCES:                                               0123.000
*                                                                       0124.000
         EXT       MATCHNAM        NAME MATCHING ROUTINE                0125.000
         EXT       PRONUM          # FILE PROTOTYPE(S) USER INPUT       0126.000
         EXT       TAPZ            LFC G-STRING                         0127.000
         EXT       GEN.M027        ERROR MESSAGE                        0128.000
         EXT       IO1BUFF         DATA BUFFER                          0129.000
         EXT       GEN.M004        ERROR MESSAGE                        0130.000
         EXT       GEN.M012        ERROR MESSAGE                        0131.000
         EXT       GEN.M033        MULTI VOLUME LABEL ERROR    83-0776  0132.000
         EXT       GEN.M036        MISMATCH WITH SEOF=Y & TAPE  EQIC360 0133.000
         EXT       GEN.M037        MISMATCH WITH SEOF=N & TAPE  EQIC360 0134.000
         EXT       SPILLIO2        WRITE IO2BUFF TO TEMPORARY FILE      0135.000
         EXT       IO1BIDX         CURRENT IO1BUFF ENTRY ADDRESS        0136.000
         EXT       GEN.M022        ERROR MESSAGE                        0137.000
         EXT       PROLEN          CURRENT PROTOTYPE ENTRY ADDRESS      0138.000
         EXT       FUPABRT3        ABORT MODULE - ENTRY POINT           0139.000
*!       EXT       GEN.M011        ERROR MESSAGE               ! 32B01  0140.000
         EXT       X.CLOSE         CLOSE RESOURCE ROUTINE               0141.000
         EXT       INQ.BUF         BUFFER FILLED BY INQUIRY SERVICE     0142.000
         EXT       CNP.ACC3        CNP OPTION VALUE                     0143.000
*!       EXT       CNP.ACC8        UPDATE ACCESS & UNBLOCKED    Q067-32C0144.000
         EXT       CNP.ACC8        UPDATE & UNBLOCKED           S830769A0145.000
         EXT       CNP.ACCD        CNP OPTION VALUE                     0146.000
         EXT       X.RINQ          RESOURCE INQUIRY SERVICE             0147.000
         EXT       X.OPEN          GENERAL OPEN RESOURCE SERVICE        0148.000
         EXT       GEN.M001        ERROR MESSAGE                        0149.000
         EXT       SAVTIME         DOUBLEWORD AREA TO STORE CURRENT TIME0150.000
         EXT       IO1BLEN         ADDR OF END OF IO1BUFF               0151.000
         EXT       IO1FCB          FCB FOR "IO1" TEMPORARY FILE         0152.000
         EXT       FLAGWORD        BOOLEAN FLAGS IN "FUPIO2"            0153.000
         EXT       FLAGS           BOOLEAN FLAGS IN "FUPRES"            0154.000
         EXT       IO1COUNT        # ENTRY(S) IN IO1BUFF/IO1 TEMP FILE  0155.000
         EXT       WIO1BUFF        ROUTINE TO WRITE IO1BUFF             0156.000
         EXT       RIO1BUFF        ROUTINE TO READ IO1BUFF              0157.000
         EXT       AUDIT3          AUDIT AN EXPLICIT 'TO' FILE          0158.000
         EXT       F.RPOS          FUNCTION STRING FOR RESTORE POSITION 0159.000
         EXT       GEN.M002        'UNABLE TO GET TEMP FILE' ERROR MSG  0160.000
         EXT       FUPABORT        ABORT WITH MESSAGE ROUTINE           0161.000
         EXT       X.DALC          DEALLOCATE FILE                      0162.000
         EXT       X.RDALC         DEALLOCATE FILE, NO CHDATE UPDATE    0163.000
         EXT       LASTIO2         LAST POSSIBLE DIRECTORY ENTRY        0164.000
         EXT       IO2FCB          SCRATCH FILE IO2 FCB                 0165.000
         EXT       INITIO2         INITIALISE IO2 BUFFER POINTERS       0166.000
         EXT       IO2BUFF         BUFFER USED FOR IO2 SCRATCH FILE I/O 0167.000
         EXT       GETRD1          GET RD BY FIL/DIR/VOL                0168.000
         EXT       GETPROTO        GET NEXT PROTOTYPE                   0169.000
         EXT       DIRCOUNT        ENTRIES IN DIRECTORY                 0170.000
         EXT       TAPBUFF         TO HOLD DIRECTORY ON READING         0171.000
         EXT       TAPFCB          FCB FOR READING TAPE                 0172.000
         EXT       M.BCKR          BACK A RECORD                        0173.000
         EXT       M.FWDR          FORWARD A RECORD                     0174.000
         EXT       ERROR2          TO REPORT TAPE POSITION ERORS        0175.000
         EXT       ERROR5                                      85-0823  0176.000
         EXT       ERROR6                                       S850513 0177.000
         EXT       ABORTNOM                                     S850513 0178.000
         EXT       ERRDISC         REPORT DISC I/O ERRORS               0179.000
         EXT       FLAGBITS        PROGRAM GLOBAL BOOLEAN FLAG BITS     0180.000
         EXT       PRONEXT         *** TEMP ***                         0181.000
         EXT       PROTOTYP        *** TEMP ***                         0182.000
         EXT       PROFIELD                                             0183.000
         EXT       ERROR           ERROR HANDLER                        0184.000
         EXT       F.REST          FUNCTION STRING ADDRESS              0185.000
         EXT       FUN.SAVE        HOLDS ADDRESS OF F.REST              0186.000
         EXT       RID.FUP         HOLDS RID AFTER TEMP FILE CREATE     0187.000
         EXT       ADR.MASK        MASK CONDITION CODES                 0188.000
         EXT       AUDIT0          FOR RESTORE AUDIT TRAIL              0189.000
         EXT       AUDIT2                                       S860212 0190.000
         EXT       SS.SEGN                                      S851291A0191.000
         EXT       A.LOCAL1                                     S851291A0192.000
         EXT       BUILDCNP        BUILDS A CNP IN CNP.BUF              0193.000
         EXT       BUILDPNB        BUILDS A PNB IN PNB.BUF              0194.000
         EXT       CNP.BUF         HOLDS A CNP                          0195.000
         EXT       FUPERR5         'DIRECTORY MUST EXIST'               0196.000
         EXT       DISCFCB         FCB FOR TEMP FILE I/O                0197.000
         EXT       WRAN            WRITE RANDOM ROUTINE                 0198.000
         EXT       STACKPTR        SAVE OF R1                           0199.000
         EXT       TOPOSTK         TOP OF STACK                 S920696 0200.000
         EXT       FUP.000         MAIN DISPATCHER              S920696 0201.000
         EXT       FROMPATH        ERROR MESSAGE                        0202.000
         EXT       TOPATH          ERROR MESSAGE                        0203.000
         EXT       RCB.BUF         HOLDS AN RCB                         0204.000
         EXT       RSEQ            READ SEQUENTIAL                      0205.000
         EXT       WSEQ            WRITE SEQUENTIAL                     0206.000
         EXT       M.RWND          REWIND                               0207.000
         EXT       FUPERR4         "FILE NOT FOUND IN TAPE IMAGE"       0208.000
         EXT       M.FWDF          SKIP A FILE                          0209.000
         EXT       NEXTIO2         CURRENT RECORD IN IO2BUFF            0210.000
         EXT       RDTR.BUF        TO READ RDTR INTO                    0211.000
         EXT       COPYSTRG        COPY A STRING                        0212.000
         EXT       MODRD0          READ RD FOR MODIFICATION             0213.000
         EXT       MODRD1          REWRITE RD                           0214.000
         EXT       CONFIRM         CONFIRM OF OPERATION ROUTIINE        0215.000
         EXT       CHCKBAOR        TEST TASK ACTIVATION STATUS          0216.000
         EXT       COMPTIME        CHECK TIME CONSTRAINTS               0217.000
         EXT       RD1.BUF         HOLDS AN RD                          0218.000
         EXT       RD2.BUF         HOLDS AN RD                          0219.000
         EXT       BRESRCB         BUILDS RCB FOR TEMP FILE             0220.000
         EXT       X.ALOC2         ALLOCATE TEMP FILE                   0221.000
         EXT       RRS.OPT1        AUTO OPEN,UNBLOCKED         84-0835  0222.000
         EXT       ALCFCB          LFC=ALC                     84-0835  0223.000
         EXT       RRS.ACC2        WRITE ACCESS,EXCLUSIVE USE  84-0835  0224.000
         EXT       X.ALOC6         ALLOCATE FILE BY RID                 0225.000
         EXT       GETPATH         GET SIGNIFICANT LENGTH OF NAME       0226.000
         EXT       FUPTIME         START OF RUN TIME                    0227.000
         EXT       OWNER           OWNER NAME                           0228.000
         EXT       UGROUP          USERGROUP NAME                       0229.000
         EXT       GEN.M007        I/O ERROR MESSAGE                    0230.000
         EXT       FUPABRT2        I/O ERROR HANDLER                    0231.000
         EXT       SS.PATNM        STATE EXPRESSION FOR PATHNAME        0232.000
         EXT       SS.PATN2        STATE EXPRESSION FOR PATHNAME        0233.000
         EXT       SS.KWSYN        STATE EXPRESSION FOR KEYWORD SYNTAX  0234.000
         EXT       SS.FROM         STATE TABLES FOR "FROM=" KEYWORD     0235.000
         EXT       SS.TO           STATE TABLES FOR "TO=" KEYWORD       0236.000
         EXT       A.GLOBAL        ACTION ROUTINE TO SET UP FOR GLOBAL O0237.000
         EXT       A.MAKEP         MAKE A PROTOTYPE ENTRY               0238.000
         EXT       SS.CONF         STATE TABLES FOR CONFIRM BOOLEAN OPT.0239.000
         EXT       SS.TIMOP        STATE TABLES FOR TIME OPTIONS        0240.000
         EXT       SS.BRIE         STATE TABLES FOR BRIEF OPTION        0241.000
         EXT       PERR006         ERRVAL TRANSITION FOR NO PATHNAMES   0242.000
         EXT       A.LOCAL         ACTION ROUINE TO SET UP FOR LOCAL OPT0243.000
         EXT       SS.NEWE         STATE TABLES FOR NEWEST=BOOL OPTION  0244.000
         EXT       COMDADDR        PLACE TO PLANT THE ROUTINE ENTRY ADDR0245.000
         EXT       UDTADDR         UDT ADDRESS FOR TAPE DEVICE  EQIC360A0246.000
         EXT       INVKEY          ERROR MESSAGE FOR INVALID KEYWORD    0247.000
         EXT       C.DERES2        VOLMGR LOW LEVEL ENTRY POINT FOR     0248.000
         EXT       M.BCKF          BACKSPACE FILE              83-0813  0249.000
         EXT       M.BCKR          BACKSPACE RECORD            83-0813  0250.000
         EXT       PRINTOUT        PRINT TO SLO ROUTINE        83-0813  0251.000
*                                  DELETE RESOURCE                      0252.000
         EXT       SORTFIL         EXTERNAL SORT                        0253.000
         EXT       SORTINT         INTERNAL SORT                        0254.000
         EXT       RN.NAME         WILD CARD RENAME ROUTINE             0255.000
         SPACE                                                          0256.000
         EXT       A.INIT          **G**                                0257.000
         EXT       SS.STRNG        **G**                                0258.000
         EXT       PROTOTYP        **G**                                0259.000
         EXT       AS.LIST1        **G**                                0260.000
         EXT       AS.LIST2        **G**                                0261.000
         EXT       VOLNAME         **G**                                0262.000
         EXT       FORMATOT        ````                                 0263.000
         EXT       GEN.M025                                             0264.000
         EXT       SDIR            "SYSTEM" DIRECTORY NAME      E3RMS35 0265.000
         EXT       SYSTEM          NAME 'SYSTEM  '              E3RMS35 0266.000
         EXT       BLANKS          1 DW OF BLANKS               E3RMS35 0267.000
         EXT       DOBLOCK         DEFAULT OPTION BLOCK         EQIC360 0268.000
         EXT       SEOFWRN1        SEOF WARNING MESSAGE 1       EQIC360B0269.000
         EXT       SEOFWRN2        SEOF WARNING MESSAGE 2       EQIC360B0270.000
         EXT       SS.TRUN         ENHANCED TRUNCATE            ETRN361 0271.000
*                                                                       0272.000
*    EXTERNAL DEFINITIONS                                               0273.000
*                                                                       0274.000
         SPACE                                                          0275.000
         DEF       C.RESDIR        RESTORE DIRECTORY ENTRY POINT        0276.000
         DEF       S.RESDIR        STATE TABLE FOR THE COMMAND          0277.000
         DEF       C.RESPOS        RESTORE POSITION ENTRY POINT         0278.000
         DEF       S.RESPOS        STATE TABLE FOR THE COMMAND          0279.000
         DEF       OPENTAP         CHECK LFC TAP ASSIGNED, UNBLOCKED    0280.000
         SPACE                                                          0281.000
*                                                                       0282.000
*    SYSTEM MACRO CALLS FOR DEFINITIONS AND EQUATES                     0283.000
*                                                                       0284.000
         SPACE                                                          0285.000
         LIST      NOMAC                                                0286.000
         M.EQUS                    GENERAL SYSTEM EQUATES               0287.000
         M.FCB.                    FILE CONTROL BLOCK EQUATES           0288.000
         M.RCB                     RESOURCE CREATE BLOCK EQUATES        0289.000
         M.CNP                     CALLER NOTIFICATION PACKET EQUATES   0290.000
         M.DQE.                    DISPATCH QUEUE ENTRY EQUATES         0291.000
         M.RDCOM   RD              RESOURCE DESCRIPTOR EQUATES          0292.000
         M.RDSPD   RD              RESOURCE DESCRIPTOR EQUATES          0293.000
         STINIT                    TPARSE DEFINITIONS AND INIT          0294.000
         M.DFT.                    FILE ASSIGNMENT TABLE EQUATES        0295.000
         M.ME.DEQ                                                       0296.000
         M.UDT.                    UNIT DEFIN. TABLE EQUATES    EQIC360A0297.000
         SPACE                                                          0298.000
*                                                                       0299.000
*    LOCAL STORAGE                                                      0300.000
*                                                                       0301.000
         BOUND     1D                                                   0302.000
RESBLOCK REZ       6D              TO BUILD FIL/DIR/VOL IN              0303.000
RID.TO   REZ       4D              TO HOLD RID OF 'TO' FILE             0304.000
TEMPSTP  REZ       1W              TEMPORARY STACK STORAGE AREA         0305.000
TMP.ALOC REZ       1W              ALLOCATION INDEX FOR TEMP FILE       0306.000
CURRFILE REZ       1W              RELATIVE FILE POS OF CURRENT FILE    0307.000
PROTADDR REZ       1W              ADDRESS OF CURRENT PROTOTYPE         0308.000
RESIOERR REZ       1W              DISC I/O ERROR COUNT                 0309.000
RESFLAGS REZ       1W              FLAGWORD FOR EACH RESTORE FILE       0310.000
D.SAVDAT REZ       1W              STORAGE FOR SAVE DATE FROM DISC FILE 0311.000
D.SAVTIM REZ       1W              DITTO THE ABOVE, FOR SAVE TIME       0312.000
ERRCOD1  GEN       8/MOD.REX,24/14 'RESOURCE ALREADY ASSIGNED' R7       0313.000
ERRCOD3  GEN       8/MOD.VOM,24/7  'RESOURCE DOES NOT EXIST' R7         0314.000
B.EXPLCT EQU       0               EXPLICIT 'TO' FIELD                  0315.000
B.NODIR  EQU       1               DIRECTORY DOESNT EXIST ALREADY       0316.000
B.RESTIM EQU       2               RESTORE WHOLE IMAGE                  0317.000
B.EOD    EQU       3               END OF DIRECTORY REACHED             0318.000
B.EXISTS EQU       4               'TO' FILE EXISTS                     0319.000
B.RESPOS EQU       5               RESTORE BY POSITION                  0320.000
B.FAST   EQU       6               DO "REPLACE" IF SET; (AS OPPOSED TO  0321.000
*                                  CHANGE TEMPORARY FILE TO PERMANENT)  0322.000
B.INITP  EQU       7               IF SET, INITIALIZE "IO1BUFF" &       0323.000
*                                  ASSOCIATED POINTERS                  0324.000
B.TERM   EQU       8               SET FOR NON-WILD CARD NAME MATCH     0325.000
B.VOLU   EQU       9               SET IF 'VOLU=' OPTION SPECIFIED      0326.000
B.DISCON EQU       10              SET IF DISCONTIGUOUS RESTORE ATTEMPT 0327.000
B.BKONCE EQU       11              BACKSPACE ONCE FLAG         83-0813  0328.000
B.LASTFL EQU       12              RESTORE LAST FIL BY PATHN   83-0813  0329.000
B.SEGNUM EQU       13              'SEGNUM=' OPTION SPECIFIED   S851291A0330.000
IO11ST.F EQU       7               IF SET, FIRST I/O TO IO1 TEMP FILE   0331.000
*                                  HAS ALREADY BEEN PERFORMED           0332.000
QUOTED.F EQU       31              THIS BIT IN R6 SET IF NAME QUOTED    0333.000
QUOTE.F  EQU       7               SET IF NAME ON COMMAND LINE QUOTED   0334.000
NUMBZER2 EQU       X'606'                                               0335.000
NOTATBOI DATAB     C' TAPE NOT POSITIONED AT START OF AN IMAGE',0       0336.000
SKIPFMAX REZ       1W              MAX FILES TO SKIP           83-0813  0337.000
TEMPSAV  REZ       1W              TEMP STORAGE SPACE          83-0813  0338.000
TEMPFLAG REZ       1W              TEMPORARY FLAGS              E3RMS35 0339.000
VOLUFLAG EQU       0               'VOLU=' FOR DIRECTORY RESTOR E3RMS35 0340.000
RESERR1  DATAB     C' I/O ERROR ON RESTORE',0                           0341.000
RESERR2  DATAB     C' TAPE NOT POSITIONED AT START OF A FILE',0         0342.000
RESERR3  DATAB     C' EOF/EOM ENCOUNTERED ON WRITE TO DISC',0           0343.000
RESERR4  DATAB     C' FILE NOT IN CURRENT IMAGE',0                      0344.000
RESERR5  DATAB     C' EXPLICIT ""TO"" (DESTINATION) DIRECTORY DOES '    0345.000
         DATAB     C'NOT EXIST',0                                       0346.000
RESERR6  DATAB     C' RDTR   @0123456789ABCDEF(0123456789ABCDEF)'       0347.000
         DATAB     C'0123456789ABCDEF DOES NOT MATCH'          83-0813  0348.000
RESERR7  DATAB     C'          PATHNAME  @123456789ABCDEF'     83-0813  0349.000
         DATAB     C'(0123456789ABCDEF)0123456789ABCDEF'       83-0813  0350.000
***   IF REC.PERR .NE. 0 THEN DON'T RESTORE THAT FILE          85-0823  0351.000
RESERR8  DATAB     C' NO FILE DATA OR RD DESTROYED ON THE TAPE',0       0352.000
RESERR9  DATAB     C' A SAVE TAPE I/O ERROR OCCURRED '          S860212 0353.000
         DATAB     C' AND THE REMAINING TAPE DATA WAS LOST',0   S860212A0354.000
BOT      DATAB     C'*****  BOT  *****',0                       S860212 0355.000
VM14COD  DATAW     C'VM14'         RDTR NOT MATCH PATHNAME     83-0813  0356.000
         BOUND     1F                                          84-0835  0357.000
SAVREGS  REZ       8W              SAV AREA                    84-0835  0358.000
         SPACE                                                          0359.000
         BOUND     1D                                                   0360.000
         TITLE     'RESTORE VIA POSITION' FUP COMMAND MODULE            0361.000
         SPACE                                                          0362.000
         CSECT                                                          0363.000
         SPACE                                                          0364.000
*                                                                       0365.000
* ROUTINE C.RESPOS - ENTRY POINT FOR FUP 'RESTORE POSITION' COMMAND     0366.000
*                                                                       0367.000
*        THIS ROUTINE IS ENTERED BY THE FILE UTILITY MAIN               0368.000
*        COMMAND DISPATCHER AFTER THE 'RESTORE POSITION'                0369.000
*        COMMAND HAS BEEN SUCCESSFULLY PARSED.                          0370.000
*                                                                       0371.000
C.RESPOS EQU       $                                                    0372.000
         PUSH                      SAVE REGISTERS                       0373.000
         LA        R7,F.RPOS       FUNCTION STRING ADDRESS              0374.000
         STW       R7,FUN.SAVE                                          0375.000
*                                                                       0376.000
*  MAKE SURE LFC "TAP" ASSIGNED, UNBLOCKED & AT LEAST READ ACCESS       0377.000
*                                                                       0378.000
         BL        OPENTAP                                              0379.000
*                                                                       0380.000
* MAKE SURE TAPE IS AT BOF                                              0381.000
*                                                                       0382.000
         LA        R3,DOBLOCK      DEFAULT OPTION BLOCK         CP12522 0383.000
         LA        R2,TAPFCB                                            0384.000
         LI        R4,1                                                 0385.000
         BL        M.BCKR          BACK ONE RECORD (SHOULD BE EOF)      0386.000
         BCT       3,RESPOS1       BRANCH TO ERROR IF BOT               0387.000
         BCT       2,RESDIR35      BRANCH TO ERROR IF I/O PROBLEM       0388.000
*!       BCF       1,RESPOS1       BRANCH TO ERROR IF NOT EOF   EQIC360 0389.000
         BCF       1,RESPOS02      NEED TO CHECK IF SCSI        EQIC360 0390.000
         BU        RESPOS04        CONTINUE                     EQIC360 0391.000
RESPOS02 CEQU      $                                            EQIC360 0392.000
*        LA        R2,DOBLOCK      DEFAULT OPTION BLOCK EQIC360 CP12522 0393.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 0394.000
         BNS       RESPOS1         IF NOT, GO TO ERROR ROUTINE  EQIC360 0395.000
RESPOS04 CEQU      $                                            EQIC360 0396.000
*                                                                       0397.000
* ALL POTENTIALLY O.K., SO SKIP THE EOF JUST READ, SET B.RESPOS         0398.000
* TO INDICATE RESTORE POSITION, AND JOIN COMMON CODE.                   0399.000
*                                                                       0400.000
         BL        M.FWDR          SKIP EOF                             0401.000
         BCT       2,RESDIR35      BRANCH TO ERROR IF I/O PROBLEM       0402.000
         BCF       1,RESPOS06      NEED TO CHECK IF SCSI        EQIC360 0403.000
         BU        RESPOS08        CONTINUE                     EQIC360 0404.000
RESPOS06 CEQU      $                                            EQIC360 0405.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 0406.000
         BS        RESPOS1         IF SO, GO TO ERROR ROUTINE   EQIC360 0407.000
RESPOS08 CEQU      $                                            EQIC360 0408.000
         SBM       B.RESPOS,RESFLAGS                                    0409.000
         BU        RESDIR1         JOIN COMMON CODE                     0410.000
*                                                                       0411.000
* TAPE NOT AT BOF, SO ERROR                                             0412.000
*                                                                       0413.000
RESPOS1  BL        M.FWDR          SKIP RECORD JUST BACKED OVER         0414.000
         LA        R7,RESERR2      'TAPE NOT AT BOF'                    0415.000
         BL        ERROR2          REPORT ERROR                         0416.000
         BU        RESDIR7         AND EXIT                             0417.000
         TITLE     'RESTORE VIA DIRECTORY' FUP COMMAND MODULE           0418.000
*                                                                       0419.000
* ROUTINE C.RESDIR - ENTRY POINT FOR FUP 'RESTORE' COMMAND              0420.000
*                                                                       0421.000
*        THIS ROUTINE IS ENTERED BY THE FILE UTILITY MAIN               0422.000
*        COMMAND DISPATCHER AFTER THE 'RESTORE DIRECTORY'               0423.000
*        COMMAND HAS BEEN SUCCESSFULLY PARSED.                          0424.000
*                                                                       0425.000
C.RESDIR EQU       $                                                    0426.000
         PUSH                      SAVE REGISTERS                       0427.000
         LA        R7,F.REST       FUNCTION STRING ADDRESS              0428.000
         STW       R7,FUN.SAVE                                          0429.000
*                                                                       0430.000
* CLEAR GENERAL FLAGWORD USED THROUGHOUT THE RESTORE                    0431.000
* AND ENSURE THAT THE TAPE IS AT BEGINNING OF IMAGE (BOI).              0432.000
* THIS IS DETECTED EITHER BY THE TAPE BEING AT BOT OR THE               0433.000
* TWO PREVIOUS RECORDS BEING EOF'S.                                     0434.000
* IF THE TAPE IS NOT CORRECTLY POSITIONED THEN GENERATE                 0435.000
* A FUP ERROR AND EXIT THE COMMAND.                                     0436.000
*                                                                       0437.000
         ZBM       VOLUFLAG,TEMPFLAG    CLEAR FOR EACH IMAGE    E3RMS35 0438.000
         TBM       B.VOLU,RESFLAGS      "VOLU="?                E3RMS35 0439.000
         BNS       RESDIR0              NO - CONTINUE           E3RMS35 0440.000
         SBM       VOLUFLAG,TEMPFLAG    SET FLAG                E3RMS35 0441.000
RESDIR0  CEQU      $                                            E3RMS35 0442.000
         ZMW       RESFLAGS        CLEAR FLAGWORD              V.50     0443.000
         TBM       DREAD.F,FLAGBITS  TAPE DIRECTORY ALREADY READ ???    0444.000
         BS        RESDIR1         GO FOR TAPE DIRECTORY ALREADY READ   0445.000
*                                                                       0446.000
*  MAKE SURE LFC "TAP" ASSIGNED, UNBLOCKED & AT LEAST READ ACCESS       0447.000
*                                                                       0448.000
         BL        OPENTAP                                              0449.000
*  INSURE TAPE IS CORRECTLY POSITIONED                                  0450.000
         BL        VERIFY                                               0451.000
         BCT       4,RESDIR7       EXIT FUPRSD IF TAPE POS ERR  S850512 0452.000
*                                                                       0453.000
* CHECK TO SEE IF THERE ARE ANY FILES TO RESTORE AT ALL, AND            0454.000
* EXIT IMMEDIATELY IF NONE                                              0455.000
*                                                                       0456.000
* IF B.RESPOS (RESTORE BY POSITION) IS SET THEN WE ARE BOF ALREADY      0457.000
* SO GO READ THE RDTR DIRECTLY.                                         0458.000
*                                                                       0459.000
RESDIR1  BL        GETPROTO        GET FIRST PROTOTYPE ENTRY            0460.000
         BCT       1,RESDIR7       BRANCH IF EXIT IF NONE TO RESTORE    0461.000
         STW       R2,PROTADDR     SAVE PROTOTYPE ADDRESS               0462.000
*                                                                       0463.000
*!IF THE "TO" PATHNAME IS EXPLICIT, AND THE VOLUME COMPONENT    E3RMS35 0464.000
*!IS "SYSTEM", AND WE ARE ON A NO SYSTEM VOLUME NODE WITH       E3RMS35 0465.000
*!RMSS3.1 OR LATER, AND THE DIRECTORY COMPONENT IS "SYSTEM",    E3RMS35 0466.000
*!THEN REPLACE "SYSTEM" WITH THE NAME OF NODEDIR CONTAINED      E3RMS35 0467.000
*!IN SDIR.                                                      E3RMS35 0468.000
*!       TBM       GWILDT.F,FLAGBITS    WILDCARD IN "TO E3RMS35 CP12394 0469.000
*!       BS        RESDIR2              NO - CONTINUE   E3RMS35 CP12394 0470.000
*!       TBM       EXPSYSVN,FLAGBITS    EXPLICIT SYSTEM E3RMS35 CP12394 0471.000
*!       BNS       RESDIR2              NO - SPECIFIED  E3RMS35 CP12394 0472.000
*!       TBM       C.NOSVOL,C.BIT       NO SYSTEM VOLUM E3RMS35 CP12394 0473.000
*!       BNS       RESDIR2              NO - CONTINUE   E3RMS35 CP12394 0474.000
*!       TBM       C.RMS3.1,C.RMS       RMSS3.1 OR LATE E3RMS35 CP12394 0475.000
*!       BNS       RESDIR2              NO - KEEP OLD F E3RMS35 CP12394 0476.000
*!       LD        R6,SYSTEM            EXPLICIT SYSTEM E3RMS35 CP12394 0477.000
*!       CAMD      R6,PROTDN.O,X2       COMPARE TO PROT E3RMS35 CP12394 0478.000
*!       BNE       RESDIR2              SPECIFIED DIREC E3RMS35 CP12394 0479.000
*!       LD        R6,BLANKS            2ND HALF        E3RMS35 CP12394 0480.000
*!       CAMD      R6,PROTDN.O+1D,X2    JUST TO BE SURE E3RMS35 CP12394 0481.000
*!       BNE       RESDIR2              NOT EXPLICIT SY E3RMS35 CP12394 0482.000
*!       LA        R3,SDIR              ADDR OF SYS DIR E3RMS35 CP12394 0483.000
*!       LD        R6,0D,X3             GET REAL SYS DI E3RMS35 CP12394 0484.000
*!       STD       R6,PROTDN.O,X2       STORE IN PROTOT E3RMS35 CP12394 0485.000
*!       LD        R6,1D,X3             2ND HALF        E3RMS35 CP12394 0486.000
*!       STD       R6,PROTDN.O+1D,X2    STORE AWAY      E3RMS35 CP12394 0487.000
*!SDIR2  CEQU      $                                    E3RMS35 CP12394 0488.000
         ZMW       CURRFILE        COUNT OF FILES TO SKIP IN AN IMAGE   0489.000
         LA        R5,ALCFCB       GET LFC 'ALC'                S851291A0490.000
         BL        X.DALC          DEALLOCATE IT JUST IN CASE   S851291A0491.000
*                                                                       0492.000
         TBM       B.RESPOS,RESFLAGS                                    0493.000
         BS        RESDIR12        BRANCH TO READ RDTR IF REZ BY POS    0494.000
*                                                                       0495.000
* IF THE 'FROM' FILENAME IS ZERO THEN THE WHOLE IMAGE IS TO BE          0496.000
* RESTORED. IN THIS CASE SET B.RESTIM IN RESFLAGS TO INDICATE           0497.000
* THAT NO DIRECTORY CHECKING IS REQUIRED.                               0498.000
*                                                                       0499.000
         LW        R7,PROFFN.O,R2  'FROM' FILENAME                      0500.000
         BNZ       RESDIR5         BRANCH IF PRESENT                    0501.000
         SBM       B.RESTIM,RESFLAGS    RESTORE WHOLE IMAGE             0502.000
         READS     TAPFCB,IO2BUFF,IOBUFFSZ                     83-0776  0503.000
         BCT       1,READIR37      BRANCH TO ERROR IF EOF      83-0776  0504.000
*  THIS MEANS WE HAVE REACHED THE LOGICAL END-OF-TAPE          83-0776  0505.000
         BCT       2,RESDIR35      I/O PROBLEM                 83-0776  0506.000
         LA        R3,IO2BUFF      DIRECTORY BUFFER START      83-0776  0507.000
         LW        R4,0,X3         GET TYPE CODE               83-0776  0508.000
         LA        R2,DOBLOCK      GET DEFAULT OPT BLOCK ADDR   EQIC360 0509.000
         ZBR       R4,IDIRSEOF     SAVED UNDER SEOF TAPE MGMT?  EQIC360 0510.000
         BNS       RESD35.5        NO - CONTINUE                EQIC360 0511.000
         SBM       OPT.B.SE,OPT.FLGS,X2 FORCE SOFT EOF MGMT     EQIC360 0512.000
*        BS        RESD35.7        ALREADY SET - EOF MO EQIC360 EQIC360B0513.000
*        LA        R7,GEN.M036     MISMATCH SEOF, TAPE  EQIC360 EQIC360B0514.000
*        BL        ERROR2          ISSUE WARNING        EQIC360 EQIC360B0515.000
         BU        RESD35.7        CONTINUE PROCESSING          EQIC360 0516.000
RESD35.5 CEQU      $                                            EQIC360 0517.000
         TBM       OPT.B.SE,OPT.FLGS,X2 SEOF SET?               EQIC360 0518.000
         BNS       RESD35.7        NOT SET - EOF MODE OK        EQIC360 0519.000
*        LA        R7,GEN.M037     MISMATCH SEOF, TAPE  EQIC360 EQIC360B0520.000
         LA        R7,SEOFWRN1     MISMATCH SEOF, TAPE FLAG     EQIC360B0521.000
         BL        ERROR2          ISSUE WARNING AND CONTINUE   EQIC360 0522.000
         LA        R7,SEOFWRN2     MISMATCH SEOF, TAPE FLAG     EQIC360B0523.000
         BL        ERROR2          ISSUE WARNING AND CONTINUE   EQIC360B0524.000
RESD35.7 CEQU      $                                            EQIC360 0525.000
         CI        R4,1            IMAGE DIRECTORY FILE TYPE=1 83-0776  0526.000
         BNE       READIR32        IF NOT, REPORT ERROR        83-0776  0527.000
         LI        R4,1            SKIP THE .....              83-0776  0528.000
         LA        R2,TAPFCB       ..... TAPE .....            83-0776  0529.000
         BL        M.FWDF          .....DIRECTORY FILE         83-0776  0530.000
         BU        RESDIR12        READ FIRST RDTR RECORD DIRECTLY      0531.000
*                                                                       0532.000
* GENERAL EXIT ROUTE FOR EOF, EOM AND I/O ERRORS                        0533.000
*                                                                       0534.000
RESDIR35 EQU       $                                            S850513 0535.000
         LB        R4,FCB.SFLG,R2  GET STATUS                   S850513 0536.000
         CI        R4,X'44'        IS IT A TAPE ID OR NUM ERR?  S850513 0537.000
         BNE       RESD35.1        IF NOT, REAL I/O ERROR       S850513 0538.000
         LW        R2,FCB.FATA,R2  GET FAT ADDR                 S850513 0539.000
         BL        ERROR6          PRINT MESSAGE                S850513 0540.000
         BU        ABORTNOM        ABORT                        S850513 0541.000
RESD35.1 LA        R6,GEN.M007     I/O ERROR MESSAGE            S850513 0542.000
         BL        FUPABRT2        CALL ABORT HANDLER                   0543.000
*                                                                       0544.000
* SPECIFIC FILES ARE BEING RESTORED.                                    0545.000
* READ THE DIRECTORY FROM TAPE AND IF IT IS GREATER THAN ONE BLOCK      0546.000
* LONG ( >127 ENTRIES ) WRITE IT TO SCRATCH FILE IO2 SO THAT            0547.000
* DIRECTORY COMPARISONS CAN BE MADE AS FILES ARE RESTORED.              0548.000
*                                                                       0549.000
* THE SAME VARIABLES USED IN THE SAVE ROUTINES ARE USED HERE FOR        0550.000
* CONSISTENCY.                                                          0551.000
* NOTE THAT READS AND WRITES MACROS USE R2,R6 AND R7                    0552.000
*                                                                       0553.000
RESDIR5  EQU       $                                                    0554.000
         TBM       DREAD.F,FLAGBITS     TEMP FILE USED TO HOLD DIR. ??? 0555.000
         BS        RESDIR32        GO FOR TAPE DIR ALREADY READ         0556.000
         BL        READDIR         READ THE TAPE DIRECTORY              0557.000
RESDIR32 EQU       $                                                    0558.000
*                                                                       0559.000
*  RESET DIRECTORY BUFFER POINTERS AND/OR REWIND TEMPORARY FILE         0560.000
*  HOLDING (TAPE) DIRECTORY                                             0561.000
*                                                                       0562.000
         BL        INITIO2B                                             0563.000
*                                                                       0564.000
* NOW SCAN THE WHOLE DIRECTORY SEEING WHICH FILES REQUESTED             0565.000
* TO BE RESTORED ARE IN THE IMAGE.                                      0566.000
* NOTE THAT THE DIRECTORY ON TAPE AND THE PROTOTYPE ENTRIES             0567.000
* DEFINING THE FILES TO BE RESTORED ARE BOTH ORDERED ALPHABETICALLY     0568.000
* AND THEREFORE ONLY ONE PASS OF THE TAPE DIRECTORY NEED BE MADE        0569.000
* TO DETERMINE IF A PATHNNAME TO BE RESTORED EXISTS ON THE TAPE.        0570.000
*                                                                       0571.000
* THE FIRST PROTOTYPE HAS ALREADY BEEN READ SO SKIP INTO THE            0572.000
* REAL PROCESSING STRAIGHT AWAY.                                        0573.000
*                                                                       0574.000
         LW        R2,PROTADDR     PROTOTYPE ADDRESS                    0575.000
         BU        RESDIR40                                             0576.000
*                                                                       0577.000
* GET THE NEXT PROTOTYPE ENTRY                                          0578.000
* CC1 WILL BE SET IF THERE ARE NO MORE ENTRIES                          0579.000
* R2 CONTAINS THE ADDRESS OF THE ENTRY IF THERE ARE MORE                0580.000
*                                                                       0581.000
RESDIR4  BL        GETPROTO                                             0582.000
         BCF       1,RESDIR37      BRANCH IF MORE PROTOTYPES            0583.000
*                                                                       0584.000
* THRE ARE NO MORE PROTOTYPES, SO MOVE TO THE START OF THE NEXT         0585.000
* IMAGE IN READINESS FOR MORE COMMANDS, THEN EXIT                       0586.000
*                                                                       0587.000
         LI        R4,1            SKIP ONE RECORD TO SEE IF AT EOI     0588.000
         LA        R2,TAPFCB                                            0589.000
         BL        M.FWDR                                               0590.000
         BCT       1,RESDIR7       BRANCH TO EXIT IF EOF (AT EOI)       0591.000
*                                                                       0592.000
RESDIR41 BL        M.FWDF          SKIP A FILE .....                    0593.000
         BCT       2,RESDIR35      GO FOR I/O ERROR                     0594.000
         BL        M.FWDR          ..... AND A RECORD .....             0595.000
         BCT       1,RESDIR7       ..... BRANCH IF TWO EOF'S (AT EOI)   0596.000
         BU        RESDIR41        ELSE LOOP                            0597.000
*                                                                       0598.000
* THERE ARE MORE PROTOTYPES                                             0599.000
*                                                                       0600.000
RESDIR37 STW       R2,PROTADDR     SAVE PROTOTYPE ADDRESS               0601.000
*                                                                       0602.000
*!SEE IF THE USER HAS REQUESTED CONFIRMATION BEFORE THE RESTORE         0603.000
*!TAKES PLACE.                                                          0604.000
*!                                                                      0605.000
RESDIR40 EQU       $                                           83-0089  0606.000
*!       TBM       OPT.B.CO,OPT.FLGS,R3 TEST CONFIRM BIT                0607.000
*!       BNS       RESDIR16        BRANCH IF NO CONFIRMATION            0608.000
*!                                                                      0609.000
*!       BL        CHCKBAOR        CHECK TASK ACTIVATION STATUS         0610.000
*!       BS        RESDIR16        IF NOT INTERACTIVE, IGNORE CONFIRM   0611.000
*!                                                                      0612.000
*!       BL        CONFIRM         ASK THE USER                         0613.000
*!       BCF       1,RESDIR4       SKIP THE RESTORE IF NEGATIVE REPLY   0614.000
*                                                                       0615.000
* SCAN FROM THE CURRENT POSITION IN THE DIRECTORY BUFFER (IO2BUFF)      0616.000
* LOOKING FOR A MATCH OF PATHNAME BETWEEN THE PROTOTYPE ENTRY JUST      0617.000
* READ AND THE NEXT DIRECTORY ENTRY.                                    0618.000
* THE SCAN IS TERMINATED WHEN A MATCH IS FOUND OR THE END OF THE        0619.000
* DIRECTORY IS REACHED (ENTRY NOT THERE) OR THE POINT IN THE            0620.000
* DIRECTORY BUFFER WHERE THE PROTOTYPE ENTRY SHOULD BE IS PASSED        0621.000
* (ENTRY NOT THERE).                                                    0622.000
* B.EOD WILL BE SET IF END OF DIRECTORY HAS ALREADY BEEN REACHED.       0623.000
*                                                                       0624.000
RESDIR16 TBM       B.EOD,RESFLAGS  END OF DICTIONARY REACHED??          0625.000
         BS        RESDIR6         BRANCH IF EOD TO "FILE NOT FOUND"    0626.000
*                                                                       0627.000
RESDIR10 LW        R3,NEXTIO2      ADDRESS OF DIRECTORY ENTRY           0628.000
*                                                                       0629.000
* COMPARE VOLUME NAMES                                                  0630.000
*                                                                       0631.000
         LD        R6,PROFVN.O,R2  PROTOTYPE VOLUME                     0632.000
         CAMD      R6,DIRVN.O,R3   DIRECTORY VOLUME                     0633.000
         BGT       RESDIR8         BRANCH IF PRO>DIR (GET NEXT DIR)     0634.000
         BNE       RESDIR6         BRANCH IF PRO<DIR (FILE NOT FOUND)   0635.000
         LD        R6,PROFVN.O+2W,R2    PROTOTYPE VOLUME (LOW D/WORD)   0636.000
         CAMD      R6,DIRVN.O+2W,R3     DIRECTORY VOLUME (HIGH D/WORD)  0637.000
         BGT       RESDIR8         BRANCH IF PRO>DIR (GET NEXT DIR)     0638.000
         BNE       RESDIR6         BRANCH IF PRO<DIR (FILE NOT FOUND)   0639.000
*                                                                       0640.000
* VOLUMES ARE THE SAME, MOVE TO THE DIRECTORY ENTRIES                   0641.000
*                                                                       0642.000
         LD        R6,PROFDN.O,R2  PROTOTYPE DIRECTORY                  0643.000
         CAMD      R6,DIRDN.O,R3   DIRECTORY DIRECTORY                  0644.000
         BGT       RESDIR8         BRANCH IF PRO>DIR (GET NEXT DIR)     0645.000
         BNE       RESDIR6         BRANCH IF PRO<DIR (FILE NOT FOUND)   0646.000
         LD        R6,PROFDN.O+2W,R2    PROTOTYPE DIRECTORY (LOW D/WORD)0647.000
         CAMD      R6,DIRDN.O+2W,R3     DIRECTORY DIRECTORY (HIGH D/WORD0648.000
         BGT       RESDIR8         BRANCH IF PRO>DIR (GET NEXT DIR)     0649.000
         BNE       RESDIR6         BRANCH IF PRO<DIR (FILE NOT FOUND)   0650.000
*                                                                       0651.000
* DIRECTORIES ARE THE SAME, MOVE TO THE FILE ENTRIES                    0652.000
*                                                                       0653.000
         LD        R6,PROFFN.O,R2  PROTOTYPE FILE                       0654.000
         CAMD      R6,DIRFN.O,R3   DIRECTORY FILE                       0655.000
         BGT       RESDIR8         BRANCH IF PRO>DIR (GET NEXT DIR)     0656.000
         BNE       RESDIR6         BRANCH IF PRO<DIR (FILE NOT FOUND)   0657.000
         LD        R6,PROFFN.O+2W,R2    PROTOTYPE FILE (LOW D/WORD)     0658.000
         CAMD      R6,DIRFN.O+2W,R3     DIRECTORY FILE (HIGH D/WORD)    0659.000
         BLT       RESDIR6         BRANCH IF PRO<DIR (FILE NOT FOUND)   0660.000
         BEQ       RESDIR13        BRANCH IF A MATCH FOUND              0661.000
*                                                                       0662.000
* MOVE TO THE NEXT DIRECTORY ENTRY BECAUSE WE HAVE NOT YET              0663.000
* REACHED THE PATHNAME TO BE RESTORED.                                  0664.000
* THEN LOOP TO CHECK NEXT ENTRY (OR EOD)                                0665.000
*                                                                       0666.000
RESDIR8  BL        NEXTDIR         MOVE TO NEXT DIRECTORY ENTRY         0667.000
         BU        RESDIR16        AND LOOP                             0668.000
         SPACE     2                                                    0669.000
* B.RDTRIO OF REC.PERR IS SET, I.E., TAPE I/O ERROR OCCURRED    S860212 0670.000
* DURING THE SAVE OPERATION, PRINT OUT MESSAGE, REWIND, EXIT.   S860212 0671.000
RESD.71  EQU       $                                            S860212 0672.000
         LW        R2,PROTADDR     GET PROTOTYPE ADDR           S860212 0673.000
         LA        R7,RESERR9      GET ERROR MESSAGE            S860212 0674.000
         BL        ERROR2          PRINT                        S860212 0675.000
         LA        R2,TAPFCB       GET TAP FCB                  S860212 0676.000
         BL        M.RWND          REWIND SERVICE               S860212 0677.000
         LA        R7,BOT          BOT MESSAGE                  S860212 0678.000
         BL        AUDIT2          PRINT OUT                    S860212 0679.000
         BU        RESDIR7         LOOK FOR NEXT COMMAND        S860212 0680.000
RESDIR7  EQU        $              RESTORE REGISTERS                    0681.000
         ZMW        RESFLAGS       RESET FLAG WORD FOR NEXT RESTOR3114.V0682.000
         POP                                                            0683.000
         TRSW      R0                                                   0684.000
*                                                                       0685.000
* THE FILE SPECIFIED BY THE PROTOTYPE ENTRY DOES NOT EXIST              0686.000
* ON TAPE IN THE CURRENT IMAGE.                                         0687.000
*                                                                       0688.000
*!SDIR6  LW        R7,FUPERR4      "FILE NOT IN IMAGE"         32C19    0689.000
*!       BL        ERROR                                       32C19    0690.000
RESDIR6  LW        R2,PROTADDR     GET PROTOTYPE ADDR          32C19    0691.000
         BL        ERROR5          PRINT                       32C19    0692.000
         LA        R7,RESERR4      ERROR MESSAGE                        0693.000
         BL        ERROR2          PRINT IT                             0694.000
         BU        RESDIR4         LOOP FOR NEXT PROTOTYPE              0695.000
*                                                                       0696.000
* A FILE IS TO BE RESTORED.                                             0697.000
* CURRFILE CONTAINS THE NUMBER OF FILE IMAGES TO BE SKIPPED             0698.000
* IN ORDER TO REACH THE BEGINNING OF THE CORRECT FILE ON TAPE.          0699.000
*                                                                       0700.000
RESDIR13 LW        R4,CURRFILE     FILE IMAGES TO SKIP                  0701.000
         BZ        RESDIR12        BRANCH IF TAPE ALREADY POSITIONED    0702.000
         CAMW      R4,SKIPFMAX     RESTORE THE LAST FILE?      83-0813  0703.000
         BLT       RESD.131        IF NOT,DON'T UNDERSKIP      83-0813  0704.000
         SBM       B.LASTFL,RESFLAGS  RESTOR LAST FIL BY PATHN 83-0813  0705.000
         CI        R4,1            SKIP ONLY ONE FILE?         83-0813  0706.000
         BEQ       RESD.131        YES                         83-0813  0707.000
         SUI       R4,1                                        83-0813  0708.000
RESD.131 LA        R2,TAPFCB       TAPE FCB                             0709.000
         BL        M.FWDF          SKIP THE FILES                       0710.000
         BCT       2,RESDIR35      BRANCH TO ERROR IF I/O PROBLEM       0711.000
*                                                                       0712.000
* WE HAVE REACHED THE CORRECT TAPE POSITION SO THE FILE                 0713.000
* PROCESSING CAN START.                                                 0714.000
*                                                                       0715.000
* EXECUTE THE FOLLOWING:                                                0716.000
*                                                                       0717.000
*        (1) READ THE RDTR INTO MEMORY (RDTR.BUF)                       0718.000
*        (2) VALIDATE ANY DATE COMPARISONS (AND 'NEWEST' OPTION)        0719.000
*        (3) CREATE THE TEMPORORY FILE TO READ TAPE INTO                0720.000
*        (4) SKIP TO START OF FILE DATA (M.FWDF)                        0721.000
*        (5) READ THE TAPE AND WRITE TO TEMPORARY FILE UNTIL EOF (TAPE) 0722.000
*        (6) MAKE THE TEMPORARY FILE PERMANENT:                         0723.000
*                  H.VOMM,23 IF ON DISC ALREADY & TAPE OR DISC FILE     0724.000
*                            IS MARKED AS "FAST" IN THEIR RES. DESCR'S. 0725.000
*                  H.VOMM,9  IF IT DOESNT ALREADY EXIST OR EXISTS BUT   0726.000
*                            NEITHER TAPE OR DISC FILE IS "FAST"        0727.000
*                                                                       0728.000
* ERRORS DETECTED AT ANY POINT WILL TERMINATE THE RESTORE.              0729.000
*                                                                       0730.000
RESDIR12 READS     TAPFCB,RDTR.BUF,RDTR.SIZ                             0731.000
*                                                                       0732.000
* CHECK FOR READ ERRORS AND ABORT IF SO                                 0733.000
*                                                                       0734.000
         BCT       2,RESDIR35      BRANCH TO ERROR IF I/O PROBLEM       0735.000
*                                                                       0736.000
* IF EOF DETECTED AND THE WHOLE IMAGE IS NOT BEING RESTORED             0737.000
* THEN ERROR, ELSE WE HAVE REACHED THE END OF THE IMAGE.                0738.000
*                                                                       0739.000
         BCF       1,RESDIR31      BRANCH IF NOT EOF/EOM                0740.000
         TBM       B.RESTIM,RESFLAGS                                    0741.000
         BS        RESDIR7         BRANCH TO EXIT IF WHOLE IMAGE        0742.000
         BU        RESDIR35        BRANCH TO ERROR OTHERWISE            0743.000
*                                                                       0744.000
* IF A WHOLE IMAGE IS BEING RESTORED AND THE CONFIRM OPTION             0745.000
* IS SET THEN ASK THE USER FOR CONFIRMATION.                            0746.000
* THIS IS THE FIRST OPPORTUNITY FOR THIS TO HAPPEN BECAUSE ALL          0747.000
* DIRECTORY PROCESSING WAS SKIPPED AND THE FIL/DIR/VOL NAME             0748.000
* HAS TO BE RETRIEVED FROM THE RDTR RECORD.                             0749.000
*                                                                       0750.000
* IF RESTORE BY POSITION IS BEING EXECUTED TREAT IT AS RESTORE IMAGE    0751.000
* (THE OPTIONS WILL ALL BE RESET THOUGH)                                0752.000
*                                                                       0753.000
RESDIR31 EQU       $                                                    0754.000
         TBM       B.RESTIM,RESFLAGS    WHOLE IMAGE BEING RESTORED?     0755.000
         BS        RESDIR30        BRANCH IF RESTORE WHOLE IMAGE        0756.000
         TBM       B.RESPOS,RESFLAGS    RESTORE BY POSITION?            0757.000
         BS        RESDIR30        BRANCH IF NOT SPECIFIC FILES3114.V42 0758.000
         TBM       B.VOLU,RESFLAGS 'VOLU=' OPTION SPECIFIED?   3114.V42 0759.000
*        BNS       RESDIR38        NO, SO GO                   3114.V42 0760.000
         BS        RESDIR30        S,  GO AND GET 'FROM' NAMES !83-0813 0761.000
* THEN IT MUST BE BY NAME. SEE IF THE RDTR NAME/DIRE/VOL MATCH.!83-0813 0762.000
RESDIR33 LW        R2,PROTADDR     PROTOTYPE ADDR TO COMPARE...!83-0813 0763.000
         LA        R3,RDTR.BUF     RDTR ADDR;                 ! 83-0813 0764.000
         ADI       R3,REC.PATH     NOW R3->FILENAME IN RDTRBUF! 83-0813 0765.000
         LD        R6,PROFFN.O,X2  PROTOTYPE 'FROM' FILE      ! 83-0813 0766.000
         CAMD      R6,PROFFN.O,X3  FILE   NAMES SAME?         ! 83-0813 0767.000
         BNE       RONGFERR        WRONG FILE ERROR           ! 83-0813 0768.000
         LD        R6,PROFFN.O+1D,X2 GET LAST 8 CHARS OF FILE ! 83-0813 0769.000
         CAMD      R6,PROFFN.O+1D,X3 LAST 8 CHARS MATCH ?     ! 83-0813 0770.000
         BNE       RONGFERR        NOP! WRONG FILE            ! 83-0813 0771.000
         LD        R6,PROFDN.O,R2  PROTO DIRECTORY NAME       ! 83-0813 0772.000
         CAMD      R6,PROFDN.O,R3  DIRE SAME IN PROTO & RDTR ?! 83-0813 0773.000
         BNE       RONGFERR        WRONG FILE ERROR           ! 83-0813 0774.000
         LD        R6,PROFDN.O+1D,X2 2ND HALF OF DIRE NAME    ! 83-0813 0775.000
         CAMD      R6,PROFDN.O+1D,X3 SAME LAST 8 CHARS ?      ! 83-0813 0776.000
         BNE       RONGFERR        WRONG FILE ERROR.          ! 83-0813 0777.000
         LD        R6,PROFVN.O,X2  VOLUME NAME IN PROTO       ! 83-0813 0778.000
         CAMD      R6,PROFVN.O,X3  SAME ?                     ! 83-0813 0779.000
         BNE       RONGFERR        WRONG FILE                 ! 83-0813 0780.000
         LD        R6,PROFVN.O+1D,X2 2ND HALF OF VOL NAME     ! 83-0813 0781.000
         CAMD      R6,PROFVN.O+1D,X3 ARE THEY THE SAME?       ! 83-0813 0782.000
         BNE       RONGFERR        NO, WRONG FILE             ! 83-0813 0783.000
* AT THIS POINT IT'S BEEN VERIFIED THAT THE CORRECT FILE IS THE ONE     0784.000
* WE ARE LOOKING AT.                                                    0785.000
         BU        RESDIR38        MATCH; CONTINUE            ! 83-0813 0786.000
RONGFERR TBM       B.BKONCE,RESFLAGS  BACKSPACE ONCE            83-0813 0787.000
         BS        RESDIR34        GO AND PRINT ERROR           83-0813 0788.000
         SBM       B.BKONCE,RESFLAGS  SET FLAG                  83-0813 0789.000
         TBM       B.LASTFL,RESFLAGS   IS IT LAST FILE?         83-0813 0790.000
         BNS       $+6W            ;NOT LAST ONE                83-0813 0791.000
         LA        R2,TAPFCB       ;FCB ADDR                    83-0813 0792.000
         LI        R4,1            ;FORWARD ONCE                83-0813 0793.000
         BL        M.FWDF          ;SKIP A FILE                 83-0813 0794.000
         BCT       2,RESDIR35      ;IO ERROR                    83-0813 0795.000
         BU        TRYREAD         ;IF OK, RETRY READ           83-0813 0796.000
         LA        R2,TAPFCB                                    83-0813 0797.000
         LI        R4,2                                         83-0813 0798.000
         BL        M.BCKF          ;BACKSPACE TWICE             83-0813 0799.000
         BCT       2,RESDIR35      ;IO ERROR                    83-0813 0800.000
         BCT       3,TRYREAD       ;IF BOT, DON'T SKIP          83-0813 0801.000
         LA        R2,TAPFCB       ;                            83-0813 0802.000
         LI        R4,1            ;FORWARD ONCE                83-0813 0803.000
         BL        M.FWDR          ;SKIP EOF AHEAD OF THE FILE  83-0813 0804.000
         BCT       2,RESDIR35                                   83-0813 0805.000
TRYREAD  READS     TAPFCB,RDTR.BUF,RDTR.SIZ  GET NEXT RDTR      83-0813 0806.000
         BCT       2,RESDIR35      ERROR                        83-0813 0807.000
         BU        RESDIR33        CHECK RDTR NAME              83-0813 0808.000
RESDIR34 TRR       R3,R1                                        83-0813 0809.000
         LA        R3,RESERR6+2W                                83-0813 0810.000
BLDERR67 ADI       R1,32           MOV POINTER                 83-0813  0811.000
         LI        R5,-3           3 UNITS (VOL,DIR,FIL)        83-0813 0812.000
OUTLOOP  ADI       R3,1            POINTER PAST DELIMITOR       83-0813 0813.000
         LI        R6,-16          MAX 16 CHAR PER UNIT        83-0813  0814.000
INLOOP   LB        R4,0,X1                                      83-0813 0815.000
         STB       R4,0,X3                                      83-0813 0816.000
         ADI       R1,1                                         83-0813 0817.000
         ADI       R3,1                                         83-0813 0818.000
         BIB       R6,INLOOP                                    83-0813 0819.000
         SUI       R1,32           MOV ADDR POINTER BACK                0820.000
         BIB       R5,OUTLOOP                                   83-0813 0821.000
         TRR       R2,R2                                        83-0813 0822.000
         BEQ       $+4W            DONE                         83-0813 0823.000
         TRR       R2,R1                                        83-0813 0824.000
         ZR        R2                                           83-0813 0825.000
         LA        R3,RESERR7+5W                                83-0813 0826.000
         BU        BLDERR67                                     83-0813 0827.000
         LA        R6,RESERR6      FIRST LINE OF ERROR MSG      83-0813 0828.000
         LI        R7,74           COUNT=74 BYTES              83-0813  0829.000
         BL        PRINTOUT        PRINT                       ! 83-08130830.000
         LA        R6,RESERR7      SECOND LINE OF ERROR MSG     83-0813 0831.000
         LI        R7,71           COUNT=71 BYTES              83-0813  0832.000
         BL        PRINTOUT        PRINT                        83-0813 0833.000
         M.BORT    VM14COD         ABORT                        83-0813 0834.000
*                                                                       0835.000
* COPY THE FIL/DIR/VOL NAME FROM THE RDTR RECORD INTO THE PROTOTYPE     0836.000
* 'FROM' FILE ENTRY FOR EASE OF EXECUTING RESTORE CODE.                 0837.000
*                                                                       0838.000
RESDIR30 EQU       $                                                    0839.000
         LA        R2,RDTR.BUF                                          0840.000
         ADI       R2,REC.PATH     ADDRESS OF FIL/DIR/VOL               0841.000
         SPACE     2                                                    0842.000
         LA        R3,VOLNAME      VOL. NAME. SPECIFIED ON COMMAND LINE 0843.000
         LD        R4,0D,X3        VOL. NAME SPECIFIED ON COMMAND LINE  0844.000
         BZ        RESDIR3A        GO FOR NOT SPECIFIED ON COMMAND LINE 0845.000
         STD       R4,PROFVN.O,X2  PLANT 1ST HALF OF VOL. NAME IN BUFFER0846.000
         LD        R4,1D,X3        2ND HALF OF VOL. NAME ON COMMAND LINE0847.000
         STD       R4,PROFVN.O+1D,X2    PLANT 2ND HALF IN BUFFER        0848.000
RESDIR3A EQU       $                                                    0849.000
         SPACE     2                                                    0850.000
         LW        R3,PROTADDR                                          0851.000
         ADI       R3,PROFFN.O     ADDRESS OF PROTOTYPE 'FROM' ENTRY    0852.000
         LI        R4,12W          XFER 12 WORDS                        0853.000
         BL        COPYSTRG        DO THE COPY                          0854.000
*                                                                       0855.000
*                                                                       0856.000
* NOW MAKE SURE THAT ANY TIME CONSTRAINTS PUT AS OPTIONS ALLOW          0857.000
* THE FILE TO BE RESTORED                                               0858.000
*                                                                       0859.000
RESDIR38 LA        R3,RDTR.BUF     LOAD RDTR BUFFER ADDRESS    85-0823  0860.000
         TBM       B.RDTRIO,REC.PERR,X3  TAPE I/O ERR OCCURRED? S860212 0861.000
         BS        RESD.71         IF SET, REWIND AND EXIT      S860212 0862.000
         LW        R3,REC.PERR,X3       ANY PHASE ERROR?       85-0823  0863.000
         BNE       RESD14.1        PHASE ERROR,DON'T RESTORE   85-0823  0864.000
         ZBM       B.EXPLCT,RESFLAGS    RESET 'TO' FILE STATUS          0865.000
         ZBM       B.NODIR,RESFLAGS     RESET 'TO' DIRECTORY STATUS     0866.000
         ZBM       B.EXISTS,RESFLAGS    RESET 'TO' FILE EXISTS FLAG     0867.000
         ZBM       B.FAST,RESFLAGS      RESET "REPLACE" FLAG            0868.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS           0869.000
         LW        R3,PROFOA.O,R2                                       0870.000
         BL        COMPTIME        VALIDATE THE TIMES                   0871.000
         BCF       1,RESDIR14      BRANCH IF NO RESTORE TO BE DONE      0872.000
         LA        R3,RD1.BUF      RD FOR TAPE FILE                     0873.000
         TBM       RD.FAST,RD.SFLGS,X3  FAST FILE ???                   0874.000
         BNS       RD38.5          GO FOR NOT FAST                      0875.000
         SBM       B.FAST,RESFLAGS      INDICATE FAST FILE              0876.000
*                                                                       0877.000
*  NOW TEST FOR CONFIRM OPTION AND ISSUE PROMPT IF SPECIFIED            0878.000
*                                                                       0879.000
RD38.5   EQU       $                                                    0880.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS  83-0089  0881.000
         LW        R3,PROFOA.O,R2  OPTION BLOCK ADDRESS        83-0089  0882.000
         TBM       OPT.B.CO,OPT.FLGS,R3 TEST CONFIRM BIT       83-0089  0883.000
         BNS       RD38.6          BRANCH IF NO CONFIRMATION   83-0089  0884.000
*                                                              83-0089  0885.000
* IF IN BATCH MODE, CONFIRM OPTION IS NOT VALID SO DONT PROCESS IT      0886.000
*                                                              83-0089  0887.000
         BL        CHCKBAOR        TEST TASK ACTIVATION STATUS 83-0089  0888.000
         BS        RD38.6          IF NOT INTERACTIVE, IGNORE C83-0089  0889.000
*                                                              83-0089  0890.000
         BL        CONFIRM         ASK THE USER                83-0089  0891.000
         BCF       1,RESDIR14      BRANCH IF FILE NOT TO BE RES83-0089  0892.000
*                                                                       0893.000
* SEE IF THE 'TO' DIRECTORY EXISTS. THIS MAY BE IMPLICIT OR EXPLICIT.   0894.000
*                                                                       0895.000
RD38.6   LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS  83-0089  0896.000
* IF WE HAD EITHER A WILDCARD IN THE "TO" PATHNAME AND THE      E3RMS35 0897.000
* VOLUME COMPONENT IS "SYSTEM", OR WE HAD "VOLUME=SYSTEM" AS    E3RMS35 0898.000
* THE COMMAND, AND WE ARE ON A NO SYSTEM VOLUME NODE WITH       E3RMS35 0899.000
* RMSS3.1 OR LATER, AND THE DIRECTORY COMPONENT IS "SYSTEM",    E3RMS35 0900.000
* THEN REPLACE "SYSTEM" WITH THE NAME OF NODEDIR CONTAINED      E3RMS35 0901.000
* IN SDIR.                                                      E3RMS35 0902.000
*!       TBM       GWILDT.F,FLAGBITS    WILDCARD IN "TO E3RMS35 CP12394 0903.000
*!       BS        RD38.53              YES - CONTINUE  E3RMS35 CP12394 0904.000
         TBM       VOLUFLAG,TEMPFLAG    'VOLU='?                E3RMS35 0905.000
*!       BS        RD38.55              YES - CHECK IF  E3RMS35 CP12394 0906.000
*!       BU        RD38.57              NO NEED TO SUBS E3RMS35 CP12394 0907.000
         BNS       RD38.57              NO NEED TO SUBSTITUTE   E3RMS35 0908.000
*!38.53  CEQU      $                                    E3RMS35 CP12394 0909.000
*!       TBM       EXPSYSVN,FLAGBITS    EXPLICIT SYSTEM E3RMS35 CP12394 0910.000
*!       BNS       RD38.57              NO - SKIP CHECK E3RMS35 CP12394 0911.000
*!       TBM       C.NOSVOL,C.BIT       NO SYSTEM VOLUM E3RMS35 CP12394 0912.000
*!       BNS       RD38.57              NO - CONTINUE   E3RMS35 CP12394 0913.000
*!       TBM       C.RMS3.1,C.RMS       RMSS3.1 OR LATE E3RMS35 CP12394 0914.000
*!       BNS       RD38.57              NO - KEEP OLD F E3RMS35 CP12394 0915.000
*!       LD        R6,SYSTEM            EXPLICIT SYSTEM E3RMS35 CP12394 0916.000
*!       CAMD      R6,PROTDN.O,X2       COMPARE TO PROT E3RMS35 CP12394 0917.000
*!       BNE       RD38.57              SPECIFIED DIREC E3RMS35 CP12394 0918.000
*!       LD        R6,BLANKS            2ND HALF        E3RMS35 CP12394 0919.000
*!       CAMD      R6,PROTDN.O+1D,X2    JUST TO BE SURE E3RMS35 CP12394 0920.000
*!       BNE       RD38.57              NOT EXPLICIT SY E3RMS35 CP12394 0921.000
*!       LA        R3,SDIR              ADDR OF SYS DIR E3RMS35 CP12394 0922.000
*!       LD        R6,0D,X3             GET REAL SYS DI E3RMS35 CP12394 0923.000
*!       STD       R6,PROTDN.O,X2       STORE IN PROTOT E3RMS35 CP12394 0924.000
*!       LD        R6,1D,X3             2ND HALF        E3RMS35 CP12394 0925.000
*!       STD       R6,PROTDN.O+1D,X2    STORE AWAY      E3RMS35 CP12394 0926.000
*!       BU        RD38.57              GO ON           E3RMS35 CP12394 0927.000
*!38.55  CEQU      $                    "VOLU="         E3RMS35 CP12394 0928.000
         TBM       RMS31NSV,FLAGBITS    >= RMSS3.1, NO SYS VOL? CP12394 0929.000
         BNS       RD38.57              NO - CONTINUE           CP12394 0930.000
         LD        R6,SYSTEM            VOLUME=SYSTEM?          E3RMS35 0931.000
         CAMD      R6,PROFVN.O,X2       COMPARE TO PROTOTYPE    E3RMS35 0932.000
         BNE       RD38.57              NOT SYSTEM              E3RMS35 0933.000
         LD        R6,BLANKS            2ND HALF                E3RMS35 0934.000
         CAMD      R6,PROFVN.O+1D,X2    JUST TO BE SURE         E3RMS35 0935.000
         BNE       RD38.57              NOT SYSTEM              E3RMS35 0936.000
         LD        R6,SYSTEM            DIRECTORY = SYSTEM?     E3RMS35 0937.000
         CAMD      R6,PROFDN.O,X2       COMPARE TO PROTOTYPE    E3RMS35 0938.000
         BNE       RD38.57              NOT SYSTEM              E3RMS35 0939.000
         LD        R6,BLANKS            2ND HALF                E3RMS35 0940.000
         CAMD      R6,PROFDN.O+1D,X2    JUST TO BE SURE         E3RMS35 0941.000
         BNE       RD38.57              NOT SYSTEM              E3RMS35 0942.000
         LA        R3,SDIR              ADDR OF SYS DIR NAME    E3RMS35 0943.000
         LD        R6,0D,X3             GET REAL SYS DIR NAME   E3RMS35 0944.000
         STD       R6,PROFDN.O,X2       STORE IN PROTOTYPE      E3RMS35 0945.000
         LD        R6,1D,X3             2ND HALF                E3RMS35 0946.000
         STD       R6,PROFDN.O+1D,X2    STORE AWAY              E3RMS35 0947.000
RD38.57  CEQU      $                                            E3RMS35 0948.000
         LW        R7,PROTFN.O,R2  SEE IF 'TO' FILENAME IS ZERO         0949.000
         BZ        RESDIR42        BRANCH IF 'TO' IMPLICIT              0950.000
         ADI       R2,PROTFN.O     MOVE TO 'TO' FIL/DIR/VOL FIELD       0951.000
         SBM       B.EXPLCT,RESFLAGS    SET 'EXPLICIT TO' FLAG          0952.000
RESDIR42 TRR       R2,R5           SAVE FIL/DIR/VOL POSITION            0953.000
         ADI       R2,PROFDN.O     MOVE TO DIRECTORY PORTION            0954.000
         LA        R3,RESBLOCK     CREATE 0/DIR/VOL FOR PNB .....       0955.000
         ZMD       0D,R3           .....                                0956.000
         ZMD       1D,R3           .....                                0957.000
         ADI       R3,2D           .....                                0958.000
         LI        R4,8W           .....                                0959.000
         BL        COPYSTRG        ..... INTO RESBLOCK                  0960.000
*                                                                       0961.000
         LA        R2,RESBLOCK     ADDRESS OF 0/DIR/VOL                 0962.000
         LA        R7,RD2.BUF      ATTEMPT TO LOCATE .....              0963.000
         BL        GETRD1          ..... THE DIRECTORY                  0964.000
         BCF       1,RESDIR19      BRANCH IF IT EXISTS                  0965.000
*                                                                       0966.000
         CAMW      R7,ERRCOD3      "RESOURCE DOES NOT EXIST" ??         0967.000
         BNE       RESDIR25        ERROR IF NOT                         0968.000
         SBM       B.NODIR,RESFLAGS     INDICATE NO DIRECTORY           0969.000
         BU        RESDIR17        AND PROCEED WITH THE RESTORE         0970.000
*                                                                       0971.000
* NOW CHECK TO SEE IF THE 'NEWEST' FLAG IS SET, AND IF IT IS            0972.000
* VALIDATE THAT THE FILE ON TAPE IS NEWER THAN THE EXISTING DISC        0973.000
* VESION (IF ANY).                                                      0974.000
* THE CONDITIONS ARE:                                                   0975.000
*                                                                       0976.000
*        (1) FILE DOES NOT ALREADY EXIST - RESTORE IT                   0977.000
*        (2) FILE EXISTS, CREATE DATES MATCH, CHANGED DATE              0978.000
*            ON TAPE IS NEWER THAN ON DISC - REATORE IT                 0979.000
*        (3) FILE EXISTS, CREATE DATE ON TAPE IS NEWER THAN             0980.000
*            CREATE DATE ON DISC - RESTORE IT                           0981.000
*                                                                       0982.000
*        OTHERWISE DO NOT RESTORE IT.                                   0983.000
*                                                                       0984.000
* THE RD OF THE DISC FILE IS GOTTEN BY DOING A LOCATE RESOURCE          0985.000
* WHICH ALSO CHECKS THE EXISTENCE OF THE FILE.                          0986.000
*                                                                       0987.000
* GET THE DISC RD INTO RD2.BUF (THE TAPE RD IS IN RD1.BUF)              0988.000
* IF THE 'TO' PATHNAME IS IMPLICIT (FIRST WORD OF THE 'TO'              0989.000
* FILENAME FIELD = 0) THEN USE THE 'FROM' PATHNAME ELSE USE             0990.000
* THE 'TO' PATHNAME.                                                    0991.000
*                                                                       0992.000
* R5 CONTAINS A POINTER TO EITHER THE 'FROM' OR 'TO' FIL/DIR/VOL        0993.000
* PART OF THE PROTOTYPE ENTRY ALREADY.                                  0994.000
*                                                                       0995.000
RESDIR19 TRR       R5,R2           ADDRESS OF FIL/DIR/VOL               0996.000
         LA        R7,RD2.BUF                                           0997.000
         BL        GETRD1          LOCATE RD BY FIL/DIR/VOL NAME        0998.000
         BCF       1,RESDIR18      BRANCH IF FILE FOUND                 0999.000
*                                                                       1000.000
         CAMW      R7,ERRCOD3      "RESOURCE DOES NOT EXIST" ??         1001.000
         BNE       RESDIR25        ERROR IF NOT                         1002.000
         BU        RESDIR17        ELSE CONTINUE RESTORE                1003.000
*                                                                       1004.000
* THE 'TO' FILE EXISTS, SO COPY THE RID OUT OF RD2.BUF BECAUSE          1005.000
* THE MODIFYRD ROUTINE CLOBBERS RD2.BUF LATER, AND THE RID IS NEEDED    1006.000
* FOR THE M.REPLAC SERVICE.                                             1007.000
*                                                                       1008.000
RESDIR18 EQU       $                                                    1009.000
         LA        R2,RD2.BUF      RD FOR DISC FILE                     1010.000
         LW        R4,RD.SVDAT,R2  GET SAVE DATE FROM DISC FILE         1011.000
         STW       R4,D.SAVDAT     STORE FOR FUTURE USE IN MODIFYRD     1012.000
         LW        R4,RD.SVTIM,R2  DITTO THE SAVE TIME                  1013.000
         STW       R4,D.SAVTIM                                          1014.000
         TBM       RD.FAST,RD.SFLGS,X2  FAST FILE ???                   1015.000
         BNS       RD18.5          GO FOR NOT FAST                      1016.000
         SBM       B.FAST,RESFLAGS      INDICATE FAST FILE              1017.000
RD18.5   EQU       $                                                    1018.000
         SBM       B.EXISTS,RESFLAGS                                    1019.000
         LI        R4,8W                                                1020.000
         LA        R3,RID.TO                                            1021.000
         LA        R2,RD2.BUF                                           1022.000
         BL        COPYSTRG                                             1023.000
*                                                                       1024.000
         LW        R2,PROTADDR     RETRIEVE .....                       1025.000
         LW        R3,PROFOA.O,R2  ..... OPTION BLOCK ADDRESS           1026.000
         TBM       OPT.B.NW,OPT.FLGS,R3 CHECK NEWEST FLAG               1027.000
         BNS       RESDIR17        BRANCH IF NEWEST NOT SET             1028.000
*                                                                       1029.000
* CHECK THE CREATE/CHANGED DATES/TIMES.                                 1030.000
*                                                                       1031.000
         LA        R2,RD1.BUF      TAPE RD ADDRESS                      1032.000
         TRR       R7,R3           DISC RD ADDRESS                      1033.000
         LW        R7,RD.CRDAT,R2  TAPE CREATION DATE                   1034.000
         CAMW      R7,RD.CRDAT,R3  VS DISC CREATION DATE                1035.000
         BGT       RESDIR17        BRANCH TAPE NEWER                    1036.000
         BNE       RESDIR14        BRANCH DISC NEWER                    1037.000
*                                                                       1038.000
         LW        R7,RD.CRTIM,R2  TAPE CREATION TIME                   1039.000
         CAMW      R7,RD.CRTIM,R3  VS DISC CREATION TIME                1040.000
         BGT       RESDIR17        BRANCH TAPE NEWER                    1041.000
         BNE       RESDIR14        BRANCH DISC NEWER                    1042.000
*                                                                       1043.000
         LW        R7,RD.CHDAT,R2  TAPE CHANGED DATE                    1044.000
         CAMW      R7,RD.CHDAT,R3  VS DISC CHANGED DATE                 1045.000
         BGT       RESDIR17        BRANCH TAPE NEWER                    1046.000
         BNE       RESDIR14        BRANCH DISC NEWER                    1047.000
*                                                                       1048.000
         LW        R7,RD.CHTIM,R2  TAPE CHANGED TIME                    1049.000
         CAMW      R7,RD.CHTIM,R3  VS DISC CHANGED TIME                 1050.000
         BLE       RESDIR14        BRANCH DISC NEWER OR SAME            1051.000
*                                                                       1052.000
* GET HERE WHEN THE TAPE VERSION IS NEWER THAN THE DISC VERSION         1053.000
* OR THE DISC VERSION DOES NOT EXIST AT ALL.                            1054.000
* AT LAST VERIFICATION OF THE OPTIONS HAS FINISHED AND THE              1055.000
* RESTORE CAN PROCEED.                                                  1056.000
*                                                                       1057.000
* IF THE 'TO' PATHNAME IS IMPLICIT (B.EXPLCT RESET) AND THE 'TO'        1058.000
* DIRECTORY DOES NOT EXIST THEN CREATE IT FROM THE INFORMATION          1059.000
* ABOUT THE ORIGINAL DIRECTORY (SAVED ON THE TAPE AND NOW IN RDTR.BUF)  1060.000
*                                                                       1061.000
* IF THE 'TO' PATHNAME IS EXPLICIT (B.EXPLCT SET) AND THE 'TO'          1062.000
* DIRECTORY DOES NOT EXIST THEN ERROR AND MOVE TO THE NEXT FILE.        1063.000
*                                                                       1064.000
* ALL ATTRIBUTES FOR THE FILE TO BE RESTORED COME FROM THE TAPE         1065.000
* RD EXCEPT FOR THE OWNER AND USERGROUP FIELDS. THESE ARE               1066.000
* SET UP AS FOLLOWS:                                                    1067.000
*                                                                       1068.000
* IF THE 'TO' PATHNAME IS PRESENT (B.EXPLCT SET) AND THE LOGON          1069.000
* OWNER IS NOT THE SYSTEM ADMINISTRATOR THEN USE THE OWNER AND          1070.000
* USERGROUP OF THE LOGON PERSON.                                        1071.000
* IN ALL OTHER CASES USE THE OWNER AND USERGROUP FROM THE TAPE.         1072.000
*                                                                       1073.000
RESDIR17 TBM       B.EXPLCT,RESFLAGS    TEST FOR EXPLICIT 'TO' FILE     1074.000
         BNS       RESDIR21        BRANCH IF IMPLICIT                   1075.000
*                                                                       1076.000
* EXPLICIT 'TO' PATHNAME, SEE IF THE DIRECTORY EXISTS                   1077.000
*                                                                       1078.000
         TBM       B.NODIR,RESFLAGS     DOES THE EXPLICIT DIR EXIST??   1079.000
         BNS       RESDIR22             BRANCH IF DIRECTORY EXISTS      1080.000
*                                                                       1081.000
* EXPLICIT 'TO' DIRECTORY DOES NOT EXIST, ERROR                         1082.000
*                                                                       1083.000
*!       LW        R7,FUPERR5      ERROR - EXPLICIT DIR MUST EXIST 32C191084.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS           1085.000
         ADI       R2,PROTFN.O     ..... FOR THE ERROR MESSAGE          1086.000
*!       BL        ERROR           LOG THE ERROR               32C19    1087.000
         BL        ERROR5          PRINT                       32C19    1088.000
         LA        R7,RESERR5      ERROR MESSAGE                        1089.000
         BL        ERROR2          PRINT IT                             1090.000
         BU        RESDIR14        MOVE TO NEXT FILE TO RESTORE         1091.000
*                                                                       1092.000
* EXPLICIT 'TO' DIRECTORY EXISTS SO SET UP THE OWNER/USERGROUP          1093.000
* FIELDS FOR THE TEMPORARY FILE TO BE CREATED, DEPENDING ON             1094.000
* WHETHER THE CURRENT USER IS SYSTEM ADMINISTRATOR.                     1095.000
* MACRO TESTSAM USES REGISTER R3.                                       1096.000
*                                                                       1097.000
RESDIR22 TESTSAM                   MACRO TO TEST T.SAM BIT IN TSA       1098.000
         BS        RESDIR23        BRANCH IF SYSTEM ADMINISTRATOR       1099.000
*                                                                       1100.000
* GET OWNER/USERGROUP                                                   1101.000
*                                                                       1102.000
         LD        R6,OWNER        OWNER NAME                           1103.000
         LA        R2,RCB.BUF      TEMP FILE RCB                        1104.000
         STD       R6,RCB.OWNR,R2  OWNER NAME INTO RCB                  1105.000
         LD        R6,UGROUP       USERGROUP NAME                       1106.000
         STD       R6,RCB.USER,R2  USERGROUP NAME INTO RCB              1107.000
         BU        RESDIR24        COMMON SET UP OF REST OF RCB         1108.000
*                                                                       1109.000
* IMPLICIT 'TO' PATHNAME, SEE IF 'TO' DIRECTORY EXISTS                  1110.000
*                                                                       1111.000
RESDIR21 TBM       B.NODIR,RESFLAGS     DIRECTORY EXIST??               1112.000
         BNS       RESDIR23        BRANCH IF IT EXISTS                  1113.000
*                                                                       1114.000
* IMPLICIT 'TO' DIRECTORY DOES NOT EXIST, SO RECONSTRUCT                1115.000
* IT TO HAVE THE SAME ATTRIBUTES AS THE DIRECTORY FROM WHICH            1116.000
* THE FILE TO BE RESTORED WAS SAVED.                                    1117.000
* THIS INFORMATION WAS BUILT INTO AN RCB FORMAT AND SAVED               1118.000
* ON THE TAPE IN THE RDTR BY THE SAVE COMMAND.                          1119.000
* SET UP A CNP, FORM A PATHNAME BLOCK FOR THE DIRECTORY,                1120.000
* AND CALL THE CREATE DIRETORY SERVICE (H.VOMM,4) JUST                  1121.000
* LIKE THE CREATE DIRECTORY FUP COMMAND.                                1122.000
*                                                                       1123.000
         ZR        R7              NO OPTIONS IN CNP                    1124.000
         BL        BUILDCNP                                             1125.000
*                                                                       1126.000
         LA        R2,RDTR.BUF     RDTR RECORD ADDRESS                  1127.000
         ADI       R2,REC.PATH+4W  ADDRESS OF DIR FIELD                 1128.000
         LI        R4,8W           COPY DIR/VOL                         1129.000
         LA        R3,RESBLOCK     TEMP BUFFER FOR THE PATHNAME         1130.000
         ZMD       0D,R3           FIRST 8 CHARS                        1131.000
         ZMD       1D,R3           SECOND 8 CHARS                       1132.000
         ADI       R3,PROFDN.O     SKIP FILENAME FIELD                  1133.000
         BL        COPYSTRG        GET DIR/VOL NAMES                    1134.000
         LA        R2,RESBLOCK     ADDRESS OF FIL/DIR/VOL               1135.000
         BL        BUILDPNB        BUILD PNB INTO PNB.BUF               1136.000
*                                                                       1137.000
         PUSHSTP                   SAVE R1                              1138.000
         TRR       R7,R1           PATHNAME DESCRIPTOR (FROM BUILDPNB)  1139.000
         LA        R2,RDTR.BUF     TAPE RDTR RECORD                     1140.000
         ADI       R2,REC.DRCB     ADDRESS OF SAVED DIRECTORY RCB       1141.000
         LA        R7,CNP.BUF      CNP FOR ERROR REPLY                  1142.000
         SVC2.23                   H.VOMM,4 (CREATE DIRECTORY)          1143.000
         POPSTP                    RESTORE R1                           1144.000
*                                                                       1145.000
* CHECK FOR ANY ERRORS                                                  1146.000
*                                                                       1147.000
         CHECKERR  MOD.VOM,NORTN                                        1148.000
         BNZ       RESDIR25        BRANCH IF ERRORS TO NEXT FILE        1149.000
*                                                                       1150.000
* GET HERE WHEN ALL LOOKS O.K. AND THE 'TO' DIRECTORY NOW EXISTS.       1151.000
* SET UP THE OWNER AND USERGROUP FOR THE TEMP FILE FROM THE             1152.000
* TAPE RD FOR THE FILE, THEN GO AND BUILD THE REST OF THE RCB AND       1153.000
* CREATE THE TEMPORARY FILE.                                            1154.000
*                                                                       1155.000
* THE RD IS IN BUFFER RD1.BUF                                           1156.000
*                                                                       1157.000
RESDIR23 LA        R3,RD1.BUF      RD FOR FILE TO BE RESTORED           1158.000
         LA        R2,RCB.BUF      RCB BUFFER ADDRESS                   1159.000
         LD        R6,RD.OWNR,R3   OWNER NAME                           1160.000
         STD       R6,RCB.OWNR,R2  OWNER NAME INTO RCB                  1161.000
*                                                                       1162.000
         LD        R6,RD.UGRP,R3   USER GROUP                           1163.000
         STD       R6,RCB.USER,R2  USER GROUP INTO RCB                  1164.000
*                                                                       1165.000
* COMMON POINT WHEN THE TEMPORARY FILE TO READ THE TAPE FILE            1166.000
* INTO IS TO BE CREATED.                                                1167.000
* THE OWNER/USERGROUP NAMES MUST HAVE ALREADY BEEN PUT INTO             1168.000
* RCB.BUF, JUST BUILD THE REST OF THE RCB (ROUTINE BRESRCB).            1169.000
*                                                                       1170.000
* FINALLY CALL THE CREATE TEMPORARY FILE SERVICE (H.VOMM,2)             1171.000
*                                                                       1172.000
* A CNP MUST BE BUILT BEFORE THE SERVICE IS CALLED.                     1173.000
*                                                                       1174.000
*!SDIR24 BL        BRESRCB                                      S851291A1175.000
RESDIR24 EQU       $               BUILD RCB FOR TEMP FILE      S851291A1176.000
         LW        R2,PROTADDR     GET CURRENT PROTOTYPE ENTRY  S851291A1177.000
         LW        R2,PROFOA.O,X2  GET OPTION BLOCK             S851291A1178.000
         LW        R7,OPT.PSIZ,X2  GET SEGMENT NUMBER           S851291A1179.000
         BL        BRESRCB         BUILD TEMP FILE RCB          S851291A1180.000
*                                                                       1181.000
         TRR       R7,R7           SEGNUM PROVIDED?             S851291A1182.000
         BEQ       RESD24.3        IF NO, SKIP                  S851291A1183.000
         SBM       B.SEGNUM,RESFLAGS  SET FLAG                  S851291A1184.000
RESD24.3 EQU       $               JOIN                         S851291A1185.000
         ZR        R7              NO OPTIONS                           1186.000
         BL        BUILDCNP                                             1187.000
*                                                                       1188.000
*  IF THE "TO" PATHNAME IS PRESENT, CREATE THE TEMPORARY FILE ON        1189.000
*  THE "TO" VOLUME, OTHERWISE, USE THE "FROM" VOLUME                    1190.000
*                                                                       1191.000
RESD24.4 PUSHT                     ALLOCATE A STACK FRAME FOR TEMP STOR.1192.000
         LW        R2,PROTADDR     PROTOTYPE ADDRESS                    1193.000
         LA        R3,PROFVN.O,X2  ASSUME USING "FROM" VOLUME           1194.000
         LW        R6,PROTFN.O,X2  "TO" PATHNAME PRESENT ???            1195.000
         BZ        RESD24.5        GO FOR "TO" FILE NOT PRESENT         1196.000
         LA        R3,PROTVN.O,X2  POSITION FOR "TO" VOLUME             1197.000
RESD24.5 EQU       $                                                    1198.000
         LI        R0,G'@'         VOLUME INDICATOR                     1199.000
         STB       R0,3W+3B,X1     PLANT ON STACK                       1200.000
         LD        R6,0D,X3        1ST HALF OF VOLUME NAME              1201.000
         STD       R6,4W,X1        PLANT ON STACK                       1202.000
         LD        R6,1D,X3             2ND HALF OF VOLUME NAME         1203.000
         STD       R6,6W,X1        PLANT ON STACK                       1204.000
*        LA        R7,3W+3B,X1     ADDRESS OF VOLUME PATHNAME   S861241 1205.000
         LA        R7,4W,X1        ADDRESS OF VOLUME PATHNAME   S861241 1206.000
         BL        GETPATH         MAKE A PATHNAME DESCRIPTOR           1207.000
         SLLD      R6,8            GET THE SIZE IN R6           S861241 1208.000
         ABR       R6,31           ADD 1 MORE CHAR '@' TO SIZE  S861241 1209.000
         LA        R7,3W+3B,X1     GET THE PATHNAME ADDRESS     S861241 1210.000
         SLL       R7,8            SHIFT ADDRESS OVER FOR SIZE  S861241 1211.000
         SRLD      R6,8            SHIFT BACK THE SIZE          S861241 1212.000
         PUSHSTP                   SAVE THE STACK POINTER               1213.000
         TRR       R7,R1           PATHNAME STRING DESCRIPTOR FOR       1214.000
*  (DESTINATION) VOLUME NAME  --  GET TEMPORARY FILE ON THIS VOLUME     1215.000
         LA        R2,RCB.BUF      RCB ADDRESS                          1216.000
         LB        R7,RCB.OPTS+2B,R2   GET SEGNUM VAL           S851291A1217.000
         SLL       R7,24           MOVE TO BYTE 0 POS           S851291A1218.000
         LA        R3,CNP.BUF      GET CNP ADDR                 S851291A1219.000
         STW       R7,CP.OPTS,R3   MERGE INTO WORD 2 OF CNP     S851291A1220.000
         LA        R7,CNP.BUF      CNP ADDRESS                          1221.000
         SVC2.21                   H.VOMM,2 (CREATE TEMP FILE)          1222.000
         POPSTP                    RESTORE R1                           1223.000
         POPT                      DEALLOCATE STACK FRAME USED FOR      1224.000
*                                  TEMPORARY STORAGE                    1225.000
         SPACE                                                          1226.000
*                                                                       1227.000
* CHECK FOR ERRORS                                                      1228.000
*                                                                       1229.000
         CHECKERR  MOD.VOM,NORTN                                        1230.000
         BZ        RESD24.6        BRANCH IF NO ERRORS          V.48    1231.000
         CI        R7,53           VM53 ERROR?                  S851291A1232.000
         BNE       RESDIR25        IF OTHER ERRORS, REPORT      S851291A1233.000
         LI        R7,11           CHANGE VM53 TO VM11          Q188-33 1234.000
         BU        RESDIR25        REPORT VM11 ERROR            Q188-33 1235.000
*!       CI        R7,11           NO DISC SPACE AVAILABLE?V.48 S851291A1236.000
*!       BNE       RESDIR25        DIFFERENT ERROR -REPORT V.48 S851291A1237.000
*!       LA        R3,RD1.BUF      GET RD OF "FROM" FILE   V.48 S851291A1238.000
*!       TBM       RD.AUTO,RD.SFLGS,X3 AUTO-EXTEND SET ?   V.48 S851291A1239.000
*!       BNS       RESDIR25        NO - REPORT ERROR       V.48 S851291A1240.000
*!       SBM       B.DISCON,RESFLAGS INDICATE RETRY DONE   V.48 S851291A1241.000
*!       BS        RESDIR25        ERROR IF WE'VE ALREADY  V.48 S851291A1242.000
*!       LW        R4,RD.SEGDF+1W,X3 GET FIRST SEGDF OF RD V.48 S851291A1243.000
*!       STW       R4,RCB.OSIZ,X2  STORE IN RCB FOR RETRY  V.48 S851291A1244.000
*!       BU        RESD24.4        GO FOR THE RETRY        V.48 S851291A1245.000
*                                                                       1246.000
* THE TEMPORARY FILE NOW EXISTS, SO GO AND ALLOCATE IT READY            1247.000
* FOR ACCESS.                                                           1248.000
*                                                                       1249.000
RESD24.6 ZBM       B.DISCON,RESFLAGS CLEAR DISCONT RESTORE BIT  V.48    1250.000
         LA        R2,RID.FUP      ADDRESS OF TEMP FILE RID             1251.000
         LA        R7,DISCFCB      ADDRESS OF 'DSC' FCB                 1252.000
         LW        R6,RRS.ACC2     WRITE EXCLUSIVE ACCESS               1253.000
         LW        R4,RRS.OPT1     AUTO OPEN, UNBLOCKED                 1254.000
*                                                                       1255.000
         PUSHSTP                   SAVE REG. 1                          1256.000
         LA        R1,RD1.BUF      RD OF TAPE FILE                      1257.000
         TBM       RD.BLOCK,RD.SFLGS,X1  IS FILE BLOCKED                1258.000
         BNS       NO.BLCK                                              1259.000
         LI        R5,8                                                 1260.000
NO.BLCK  POPSTP                    RESTORE REG. 1                       1261.000
*                                                                       1262.000
         BL        X.ALOC6         ALLOCATE TEMP FILE                   1263.000
         BCT       1,RESDIR25      BRANCH IF ERRORS TO NEXT FILE        1264.000
         STW       R5,TMP.ALOC     SAVE ALLOCATION INDEX                1265.000
*                                                                       1266.000
* THE READ TAPE, WRITE TEMPORARY FILE SEQUENCE IS NOW READY.            1267.000
* THE TAPE IS CURRENTLY POSITIONED AT THE START OF THE FILES DATA       1268.000
*                                                                       1269.000
         BL        READDATA        ROUTINE TO READ TAPE/WRITE FILE      1270.000
         BL        MODIFYRD        GET TEMP RD READY FOR PERM FILE      1271.000
         BCT       1,RESDIR27      BRANCH IF NOT SUCCESSFUL             1272.000
*                                                                       1273.000
* THE FINAL ACTION OF THE RESTORE IS TO MAKE THE TEMPORARY FILE         1274.000
* PERMANENT.                                                            1275.000
*                                                                       1276.000
* IF THE FILE BEING RESTORED ALREADY EXISTS ON THE DISC                 1277.000
* AND EITHER THE DISC FILE OR THE TAPE FILE IS MARKED AS "FAST" THEN USE1278.000
* H.VOMM,23 SERVICE (M.REPLAC) ELSE USE THE H.VOMM,9 SERVICE            1279.000
* (MAKE TEMP FILE PERM).                                                1280.000
*                                                                       1281.000
         TBM       B.EXISTS,RESFLAGS                                    1282.000
         BNS       RESDIR11        BRANCH IF 'TO' FILE DOES NOT EXIST   1283.000
* "TO" FILE EXISTS, NOW CHECK IF IT HAPPENS TO BE SLO          84-0835  1284.000
         STF       R0,SAVREGS      SAV                         84-0835  1285.000
         LA        R2,RID.TO       'TO' FILE RID ADDRESS       84-0835  1286.000
         LW        R4,RRS.OPT1     AUO OPEN,UNBLOCKED          84-0835  1287.000
         LW        R6,RRS.ACC2     WRITE ACCESS,EXCLUSIVE USE  84-0835  1288.000
         LA        R7,ALCFCB       LFC FOR ALLOCATION TEST     84-0835  1289.000
         BL        X.ALOC6         ALLOCATION                  84-0835  1290.000
         BCF       1,RESDIR9       BRANCH IF NO ERROR          84-0835  1291.000
         LW        R5,TMP.ALOC     TEMP FIL ALLOCATION INDEX   84-0835  1292.000
         BL        X.DALC          DEALLOCATE TEMP FIL         84-0835  1293.000
         BU        RESDIR27        BRANCH TO PRINT 32C16 09/04 84-0835  1294.000
RESDIR9  LF        R0,SAVREGS      RESTORE                     84-0835  1295.000
*    NOW DETERMINE WHETHER "M.REPLAC" OR "M.PERM"              84-0835  1296.000
         TBM       B.FAST,RESFLAGS      FAST FILE ???                   1297.000
         BNS       RD39.5          GO FOR NOT FAST                      1298.000
*                                                                       1299.000
* USE THE M.REPLAC SERVICE CALL                                         1300.000
*                                                                       1301.000
         ZR        R7                                                   1302.000
         BL        BUILDCNP        BUILD A NOWAIT CNP                   1303.000
*                                                                       1304.000
         PUSHSTP                   SAVE R1                              1305.000
         LI        R0,RID.SIZE     PASS RID TO VOMM23                   1306.000
         LA        R1,RID.TO       ADDRESS OF 'TO' FILES RID            1307.000
         SLL       R1,8                                                 1308.000
         SRLD      R0,8            PRODUCE COUNT/ADDRESS IN R1          1309.000
         TRR       R1,R2           PUT 'TO' FILE INTO R1                1310.000
         LA        R1,DISCFCB      FCB ADDRESS OF TEMP FILE             1311.000
         LA        R7,CNP.BUF      CNP BUFFER ADDRESS                   1312.000
         SVC2.30                   H.VOMM,23 (M.REPLAC SERVICE)         1313.000
         POPSTP                    RETRIEVE R1                          1314.000
         CHECKERR  MOD.VOM,NORTN   ANY ERRORS?                          1315.000
         BNZ       RESDIR27        LOG THE ERROR                        1316.000
*                                                                       1317.000
* PRINT THE AUDIT LINE.                                                 1318.000
*                                                                       1319.000
* LOCATE THE NEW FILE FIRST OF ALL SO THAT WE GET THE CORRECT RD.       1320.000
*                                                                       1321.000
* IF THE 'TO' FILE IS EXPLICIT THEN USE THE 'TO' FIL/DIR/VOL            1322.000
* FOR THE AUDIT, ELSE USE THE 'FROM' FIL/DIR/VOL.                       1323.000
*                                                                       1324.000
RESDIR15 CEQU      $                                            ETRN361 1325.000
*ESDIR15 LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS   ETRN361 1326.000
         LA        R5,ALCFCB                                    ETRN361 1327.000
         BL        X.DALC          DEALLOCATE ALCFCB            ETRN361 1328.000
*                                                               ETRN361 1329.000
* CHECK GLOBAL AND LOCAL OPTION BLOCKS FOR ENHANCED TRUNCATED   ETRN361 1330.000
* OPTION                                                        ETRN361 1331.000
*                                                               ETRN361 1332.000
         LW        R2,PROTADDR     GET PROTOTYPE ADDRESS        ETRN361 1333.000
         LW        R2,PROFOA.O,X2  GET OPTION TABLE ADDRESS     ETRN361 1334.000
         TBM       OPT.B.TR,OPT.FLGS,X2 ENCHANCED TRUNCATE?     ETRN361 1335.000
         BNS       RD29.5          NO, SKIP TRUNCATE            ETRN361 1336.000
         LW        R2,PROTADDR     FIL/DIR/VOL .....            ETRN361 1337.000
         ADI       R2,PROTFN.O     ..... OF 'TO' FILE           ETRN361 1338.000
         PUSHSTP                                                ETRN361 1339.000
         BL        BUILDPNB        BUILD PATHNAME BLOCK VECTOR  ETRN361 1340.000
         TRR       R7,R4           SAVE PNB                     ETRN361 1341.000
         ZR        R7                                           ETRN361 1342.000
         BL        BUILDCNP        BUILD CNP                    ETRN361 1343.000
         LA        R7,CNP.BUF      GET CNP ADDRESS              ETRN361 1344.000
         TRR       R7,R2           CNP ADDRESS TO INDEX REG     ETRN361 1345.000
         SBM       TRN.EOM,CP.OPTS,X2 SET ENH. TRUNC BIT        ETRN361 1346.000
         TRR       R4,R1           RESTORE PNB                  ETRN361 1347.000
         SVC2.26                   H.VOMM,7 TRUNCATE 'TO' FILE  ETRN361 1348.000
         POPSTP                    RETRIEVE R1                  ETRN361 1349.000
         CHECKERR  MOD.VOM,NORTN   CHECK FOR ERRORS             ETRN361 1350.000
         BNZ       RD26.5          ERROR OUTPUT                 ETRN361 1351.000
         SPACE     2                                            ETRN361 1352.000
RD29.5   CEQU      $                                            ETRN361 1353.000
*                                                               ETRN361 1354.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS   ETRN361 1355.000
         TBM       B.EXPLCT,RESFLAGS    IMPLICIT 'TO'??                 1356.000
         BNS       RESDIR29        BRANCH IF IMPLICIT                   1357.000
         ADI       R2,PROTFN.O     MOVE TO 'TO' FIL/DIR/VOL             1358.000
RESDIR29 LA        R7,RD1.BUF      TO HOLD RD                           1359.000
         BL        GETRD1          GET RD BY FIL/DIR/VOL                1360.000
         BCT       1,RESDIR25      BRANCH TO ERROR IF CANNOT LOCATE     1361.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS           1362.000
*                                                                       1363.000
* IF 'TO' FILE IS EXPLICIT CALL AUDIT3 ELSE CALL AUDIT0                 1364.000
*                                                                       1365.000
         TBM       B.EXPLCT,RESFLAGS                                    1366.000
         BS        RESDIR39        BRANCH IF EXPLICIT 'TO' FILE         1367.000
         BL        AUDIT0          GO AUDIT THE RESTORE                 1368.000
*        LA        R5,ALCFCB                            84-0835 ETRN361 1369.000
*        BL        X.DALC          DEALLOCATE ALCFCB    84-0835 ETRN361 1370.000
*                                                                       1371.000
* MOVE TO THE NEXT FILE TO BE RESTORED                                  1372.000
*                                                                       1373.000
         BU        RESDIR26                                             1374.000
*                                                                       1375.000
* AUDIT AN EXPLICIT 'TO' FILE                                           1376.000
*                                                                       1377.000
RESDIR39 BL        AUDIT3                                               1378.000
*        LA        R5,ALCFCB                            84-0835 ETRN361 1379.000
*        BL        X.DALC          DEALLOCATE ALCFCB    84-0835 ETRN361 1380.000
         BU        RESDIR26        LOOP FOR NEXT FILE TO BE RESTORED    1381.000
         SPACE     2                                                    1382.000
RD39.5   EQU       $                                                    1383.000
*  DESTINATION ("TO") FILE EXISTS SO ATTEMPT TO DELETE IT               1384.000
         LW        R2,PROTADDR     PROTOTYPE ADDRESS                    1385.000
         TBM       B.EXPLCT,RESFLAGS    "TO" PATHNAME EXPLICITLY STATED 1386.000
         BNS       RD39.7          GO FOR IMPLICIT "TO"                 1387.000
*  EXPLICIT "TO" FILE, SO POSITION TO THE "TO" FIL/DIR/VOL IN THE       1388.000
*  PROTOTYPE ENTRY                                                      1389.000
         ADI       R2,PROTFN.O                                          1390.000
RD39.7   EQU       $                                                    1391.000
         BL        C.DERES2        DELETE DESTINATION ("TO") FILE       1392.000
         BS        RESDIR27        GO FOR ERROR(S)                      1393.000
*                                                                       1394.000
* THE 'TO' FILE DOES NOT EXIST, SO USE THE M.PERM SERVICE TO            1395.000
* MAKE THE TEMPORARY FILE PERMANENT.                                    1396.000
*                                                                       1397.000
RESDIR11 ZR        R7                                                   1398.000
         BL        BUILDCNP        BUILD A NOWAIT CNP                   1399.000
*                                                                       1400.000
         LW        R2,PROTADDR     FORM ADDRESS OF 'TO' FILE .....      1401.000
         TBM       B.EXPLCT,RESFLAGS .....                              1402.000
         BNS       RESDIR28        .....                                1403.000
         ADI       R2,PROTFN.O     .....                                1404.000
RESDIR28 BL        BUILDPNB        BUILD PNB FOR 'TO' FILE              1405.000
         TRR       R7,R2           COUNT/ADDRESS OF PNB TO R2           1406.000
         PUSHSTP                   SAVE R1                              1407.000
         LA        R1,DISCFCB      TEMP FILE FCB ADDRESS                1408.000
         LA        R7,CNP.BUF      CNP BUFFER ADDRESS                   1409.000
         SVC2.28                   H.VOMM,9 (MAKE TEMP PERM)            1410.000
         POPSTP                    RETRIEVE R1                          1411.000
         CHECKERR  MOD.VOM,NORTN   ANY ERRORS?                          1412.000
         BNZ       RESDIR27        BRANCH IF ERRORS                     1413.000
         LW        R5,TMP.ALOC     ALLOCATION INDEX                     1414.000
         BL        X.RDALC         DE ALLOCATE THE FILE        3114.V42 1415.000
         BU        RESDIR15        MOVE TO NEXT FILE                    1416.000
*                                                                       1417.000
* AN ERROR HAS OCCURRED AFTER THE READ FROM TAPE HAS BEEN COMPLETED     1418.000
*                                                                       1419.000
* LOG THE ERROR AND MOVE TO THE NEXT FILE.                              1420.000
*                                                                       1421.000
* DEALLOCATE THE TEMPORARY FILE ALSO.                                   1422.000
*                                                                       1423.000
* THE TAPE IS CURRENTLY POSITIONED AT THE START OF THE                  1424.000
* NEXT FILE ON TAPE.                                                    1425.000
*                                                                       1426.000
RESDIR27 LW        R2,PROTADDR     FIL/DIR/VOL ADDRESS                  1427.000
         BL        ERROR                                                1428.000
         LW        R5,TMP.ALOC     ALLOCATION INDEX                     1429.000
         BL        X.DALC          DEALLOCATE TEMP FILE                 1430.000
         LA        R5,ALCFCB                                   84-0835  1431.000
         BL        X.DALC          DEALLOCATE ALCFCB           84-0835  1432.000
         BU        RESDIR26        LOOP FOR NEXT FILE                   1433.000
*                                                                       1434.000
* NO FILE DATA ON THE TAPE ERROR HANDLING                      85-0823  1435.000
*                                                                       1436.000
RESD14.1 EQU       $               NO FILE DATA HANDLING       85-0823  1437.000
         LW        R2,PROTADDR     PROTOTYP ADDRESS            85-0823  1438.000
         BL        ERROR5                                      85-0823  1439.000
         LA        R7,RESERR8      NO FILE DATA ERROR MSG      85-0823  1440.000
         BL        ERROR2          PRINT                       85-0823  1441.000
         BU        RESDIR14                                    85-0823  1442.000
*                                                                       1443.000
* GENERAL ERROR EXIT FOR SERVICE CALL ERRORS.                           1444.000
*                                                                       1445.000
RESDIR25 ZBM       B.DISCON,RESFLAGS IN CASE DISCONT RESTORE FAILED V.481446.000
         LW        R2,PROTADDR     PROTOTYPE ADDRESS                    1447.000
         BL        ERROR           ELSE ERROR                           1448.000
*                                                                       1449.000
* THE FILE IS NOT TO BE RESTORED FOR SOME REASON.                       1450.000
* IF THE WHOLE IMAGE IS BEING RESTORED THEN SKIP TO THE START           1451.000
* OF THE NEXT FILE AND LOOP IMMEDIATELY FOR THE READ OF THE             1452.000
* NEXT RDTR.                                                            1453.000
*                                                                       1454.000
* IF RESTORE BY POSITION THEN SKIP TO START OF NEXT FILE                1455.000
* AND THEN EXIT                                                         1456.000
*                                                                       1457.000
* OTHERWISE SKIP TO THE START OF THE NEXT FILE AND LOOP FOR             1458.000
* THE NEXT PROTOTYPE.                                                   1459.000
*                                                                       1460.000
* THE TAPE IS CURRENTLY POSITIONED AT THE END OF THE RDTR.              1461.000
*                                                                       1462.000
RESDIR14 LA        R2,TAPFCB                                            1463.000
         LI        R4,1                                                 1464.000
         BL        M.FWDF                                               1465.000
         BCT       2,RESDIR35      BR IF I/O ERROR                      1466.000
*                                                                       1467.000
* COMMON LOOP POINT FOR SUCCESSFUL AND UNSUCCESSFUL RESTORES.           1468.000
* MOVE TO THE NEXT DIRECTORY ENTRY (TAPE IS CURRENTLY POSITIONED        1469.000
* ONE FILE AHEAD OF DIRECTORY POINTER "NEXTIO2").                       1470.000
*                                                                       1471.000
RESDIR26 TBM       B.RESTIM,RESFLAGS                                    1472.000
         BS        RESDIR12        BRANCH IF WHOLE IMAGE BEING RESTORED 1473.000
         TBM       B.RESPOS,RESFLAGS                                    1474.000
         BS        RESDIR7         BRANCH IF RESTORE BY POSITION TO EXIT1475.000
         BL        NEXTDIR         MOVE TO NEXT DIRECTORY ENTRY         1476.000
         ZMW       CURRFILE        RESET "FILES TO SKIP" COUNT          1477.000
         BU        RESDIR4         ELSE LOOP FOR NEXT PROTOTYPE         1478.000
*                                                               ETRN361 1479.000
* TRUNCATE ERROR                                                ETRN361 1480.000
*                                                               ETRN361 1481.000
RD26.5   CEQU      $                                            ETRN361 1482.000
         BL        ERROR           REPORT ERROR                 ETRN361 1483.000
         BU        RESDIR15        CONTINUE WITH NEXT FILE      ETRN361 1484.000
         TITLE     MOVE TO NEXT DIRECTORY ENTRY                         1485.000
*                                                                       1486.000
* THIS ROUTINE MOVES TO THE NEXT DIRECTORY ENTRY, READING SCRATCH       1487.000
* FILE IO2 IF NECESSARY, AND UPDATING "NEXTIO2".                        1488.000
* B.EOD IS SET IN "RESFLAGS" IF END OF DIRECTORY IS REACHED.            1489.000
* I/O ERRORS CAUSE AN ABORT.                                            1490.000
*                                                                       1491.000
NEXTDIR  PUSH                      SAVECREGISTERS                       1492.000
         LW        R5,DIRCOUNT     DIRECTORY ENTRIES REMAINING          1493.000
         SUI       R5,1            DECREMENT .....                      1494.000
         BP        NEXTDIR1        ..... AND BRANCH IF SOME LEFT        1495.000
*                                                                       1496.000
* END OF DIRECTORY, SET "B.EOD" AND EXIT.                               1497.000
*                                                                       1498.000
         SBM       B.EOD,RESFLAGS  INDICATE EOD                         1499.000
NEXTDIR2 POP                       RESTORE REGISTERS                    1500.000
         TRSW      R0              AND EXIT                             1501.000
*                                                                       1502.000
* THERE ARE MORE DIRECTORY ENTRIES, SO SET NEXTIO2 TO POINT             1503.000
* TO THE NEXT ONE                                                       1504.000
*                                                                       1505.000
NEXTDIR1 ABM       31,CURRFILE     ONE MORE FILE IMAGE TO SKIP          1506.000
         STW       R5,DIRCOUNT     DIRECTORY ENTRIES REMAINING          1507.000
         LW        R6,NEXTIO2      CURRENT DIRECTORY ENTRY              1508.000
         ADI       R6,DIRENTSZ     ADD IN AN ENTRY SIZE                 1509.000
         STW       R6,NEXTIO2      AND SAVE NEW ENTRY POINTER           1510.000
         CAMW      R6,LASTIO2      REACHED END OF CURRENT BUFFER??      1511.000
         BLE       NEXTDIR2        BRANCH IF IN BUFFER STILL TO EXIT    1512.000
*                                                                       1513.000
* MUST READ THE NEXT DIRECTORY BUFFER FROM SCRATCH FILE AND REINITIALISE1514.000
* THE BUFFER POINTERS                                                   1515.000
*                                                                       1516.000
         READS     IO2FCB,IO2BUFF,IOBUFFSZ                              1517.000
*                                                                       1518.000
* CHECK FOR READ ERRORS                                                 1519.000
*                                                                       1520.000
         BCT       1,RESDIR35      BRANCH TO ERROR IF EOF/EOM           1521.000
         BCT       2,RESDIR35      BRANCH TO ERROR IF I/O PROBLEM       1522.000
*                                                                       1523.000
         LI        R7,DIRENTSZ     ENTRY SIZE IN IO2BUFF                1524.000
         BL        INITIO2         REINITIALISE POINTERS                1525.000
         BU        NEXTDIR2        AND EXIT                             1526.000
         TITLE     READ THE FILE DATA FROM TAPE                         1527.000
*                                                                       1528.000
* THIS ROUTINE IS CALLED WHEN THE TAPE DATA IS TO BE READ TO DISC       1529.000
*                                                                       1530.000
* INPUTS:                                                               1531.000
*        TAPE POSITIONED AT START OF DATA                               1532.000
*                                                                       1533.000
* OUTPUTS:                                                              1534.000
*                                                                       1535.000
* ANY ERRORS CAUSE AN ABORT                                             1536.000
*                                                                       1537.000
READDATA EQU       $                                                    1538.000
         ANMW      R0,ADR.MASK     CLEAR CC7S                           1539.000
         PUSH                      SAVE REGISTERS                       1540.000
*                                                                       1541.000
* THE LFC 'DSC' IS USED FOR THE TEMPORARY DISC FILE.                    1542.000
* THE LFC 'IN' IS USED TO READ THE TAPE.                                1543.000
* BUFFER 'TAPBUFF' IS THE COMMON LINK.                                  1544.000
*                                                                       1545.000
*                                                                       1546.000
* READ THE TAPE RECORED                                                 1547.000
*                                                                       1548.000
READ1    READS     TAPFCB,TAPBUFF,IOBUFFSZ                              1549.000
         BCT       1,READ2         BRANCH IF EOF/EOM                    1550.000
*        BCT       2,READ3.1       BRANCH IF TAPE READ ERROR    S850513A1551.000
         BCT       2,READ3.2       BRANCH IF TAPE READ ERROR    S850513A1552.000
*                                                                       1553.000
* O.K. SO WRITE THE BUFFER TO TEMPORARY DISC FILE.                      1554.000
* R6 AND R7 ARE STILL SET UP FROM THE TAPE READ.                        1555.000
*                                                                       1556.000
         WRITES    DISCFCB                                              1557.000
         BCT       1,READ4         EOF/EOM ON TEMPORARY FILE            1558.000
         BCT       2,READ3         BRANCH ON DISC WRITE ERROR           1559.000
*                                                                       1560.000
         BU        READ1           LOOP FOR NEXT RECORD                 1561.000
*                                                                       1562.000
* EOF/EOM HAS BEEN FOUND ON THE TAPE.                                   1563.000
* THE RESTORE TO TEMPORARY FILE HAS BEEN COMPLETED SO RETURN            1564.000
* TO THE CALLER TO MAKE THE TEMPORARY FILE PERMANENT.                   1565.000
*                                                                       1566.000
READ2    LW        R4,RESIOERR     WAS THERE ANY DISC I/O ERRORS?       1567.000
         BZ        READ2.1         NO, BRANCH                           1568.000
         LW        R2,PROTADDR     GET PROTOTYPE ADDRESS                1569.000
         BL        ERRDISC         GO REPORT ERROR                      1570.000
         ZMW       RESIOERR        RESET DISC I/O ERROR COUNTER         1571.000
READ2.1  POP                       RESTORE REGISTERS                    1572.000
         TRSW      R0                                                   1573.000
*                                                                       1574.000
* AN I/O ERROR ON THE 'TAPE'/'TEMP' FILE                                1575.000
* FIELD THE ERROR AND CHECK IT IF A BAD ERROR THEN ABORT                1576.000
*                                                                       1577.000
READ3    TBM       4,FCB.SFLG,R2   WAS IT A BAD ERROR                   1578.000
         BS        READ3.1         YES, BRANCH                          1579.000
         ABM       31,RESIOERR     INCREAMENT I/O ERROR COUNTER         1580.000
         BU        READ1           GO ON                                1581.000
READ3.1  LA        R6,RESERR1      ERROR ON RESTORE                     1582.000
         BU        READ5           AND ABORT                   3114.V43 1583.000
READ3.2  EQU       $               TAPE ID OR NUM ERROR         S850513A1584.000
         LB        R6,FCB.SFLG,R2  GET ERROR CODE               S850513A1585.000
         CI        R6,X'44'        IS IT TAPE ID OR NUM ERROR?  S850513A1586.000
         BNE       READ3.1         IF NOT, BRNACH               S850513A1587.000
         LW        R2,FCB.FATA,R2  GET FAT ADDR                 S850513A1588.000
         BL        ERROR6          PRINT                        S850513A1589.000
         LW        R5,TMP.ALOC     TEMP FILE ALOC INDEX         S850513A1590.000
         BL        X.DALC          DEALLOCATE TEMP FILE         S850513A1591.000
         BU        ABORTNOM        ABORT                        S850513A1592.000
         SPACE     2                                                    1593.000
*                                                                       1594.000
* EOF/EOM ENCOUNTERED ON THE 'TEMP' FILE                                1595.000
*                                                                       1596.000
READ4    LA        R6,RESERR3      ERROR ON RESTORE                     1597.000
*                                                                       1598.000
READ5    LW        R5,TMP.ALOC     TEMP. FILE ALLOC. INDEX     3114.V43 1599.000
         BL        X.DALC          DEALLOCATE TEMP FILE        3114.V43 1600.000
         BL        FUPABRT2        AND ABORT                            1601.000
         TITLE     MODIFY RD AFTER SUCCESSFUL RESTORE                   1602.000
*                                                                       1603.000
* THIS ROUTINE MODIFY'S THE RD OF THE TEMPORARY FILE TO                 1604.000
* REFLECT THE DATES ETC OF THE FILE RESTORED.                           1605.000
* THE PERSON RUNNING FUP IS THE OWNER OF THE TEMP FILE                  1606.000
* AND THEREFORE CAN MODIFY THE RD.                                      1607.000
*                                                                       1608.000
* INPUTS:                                                               1609.000
*        RD1.BUF CONTAINS THE TAPE RD                                   1610.000
*                                                                       1611.000
* OUTPUTS:                                                              1612.000
*        CC1 IS SET IF ERRORS                                           1613.000
*        R7 CONTAINS THE ERROR CODE IF ERRORS                           1614.000
*                                                                       1615.000
MODIFYRD EQU       $                                                    1616.000
         ANMW      R0,ADR.MASK     CLEAR CC'S                           1617.000
         PUSH                      SAVE REGISTERS                       1618.000
*                                                                       1619.000
* GO AND READ THE TEMP FILE RD.                                         1620.000
* THE RID IS IN RID.FUP WHICH WAS SET UP WHEN THE FILE                  1621.000
* WAS CREATED.                                                          1622.000
*                                                                       1623.000
MOD.011  LA        R3,RID.FUP      RID ADDRESS                          1624.000
         LA        R7,RD2.BUF      TO READ RD INTO                      1625.000
         BL        MODRD0          READ RD                              1626.000
         BCT       1,MODIFY2       BRANCH IF ERRORS                     1627.000
*                                                                       1628.000
* UPDATE THE FOLLOWING FIELDS:                                          1629.000
*                                                                       1630.000
*        OWNER ACCESS RIGHTS (FROM TAPE RD) - THEY WERE SET TO          1631.000
*                             DEFAULT ACCESS (HOPEFULLY ALL) SO         1632.000
*                             THIS MODIFY RD COULD BE DONE!             1633.000
*        CREATED BY OWNER (FROM TAPE RD)                       ! 32B03  1634.000
*        CREATE DATE/TIME (FROM TAPE RD)                                1635.000
*        CHANGED BY OWNER (FROM TAPE RD)                       ! 32B03  1636.000
*        CHANGED DATE/TIME (FROM TAPE RD)                               1637.000
*        RESTORED DATE/TIME (FROM TAPE RD)                              1638.000
*        SAVED DATE/TIME (0 IF NOT SAM, ALSE FROM TAPE RD)              1639.000
*                                                                       1640.000
         PUSHSTP                   SAVE R1                              1641.000
         LA        R2,RD1.BUF      TAPE RD ADDRESS                      1642.000
         LA        R1,RD2.BUF      TEMP FILE RD                         1643.000
         LW        R7,RD.AOWNR,R2  OWNER ACCESS RIGHTS                  1644.000
         STW       R7,RD.AOWNR,R1                                       1645.000
*                                                                       1646.000
         LD        R6,RD.CROWN,R2  CREATED BY OWNER            ! 32B03  1647.000
         STD       R6,RD.CROWN,R1                              ! 32B03  1648.000
*                                                                       1649.000
         LW        R7,RD.CRDAT,R2  CREATE DATE                          1650.000
         STW       R7,RD.CRDAT,R1                                       1651.000
*                                                                       1652.000
         LW        R7,RD.CRTIM,R2  CREATE TIME                          1653.000
         STW       R7,RD.CRTIM,R1                                       1654.000
*                                                                       1655.000
         LD        R6,RD.CHOWN,R2  CHANGED BY OWNER            ! 32B03  1656.000
         STD       R6,RD.CHOWN,R1                              ! 32B03  1657.000
*                                                                       1658.000
         LW        R7,RD.CHDAT,R2  CHANGED DATE                         1659.000
         STW       R7,RD.CHDAT,R1                                       1660.000
*                                                                       1661.000
         LW        R7,RD.CHTIM,R2  CHANGED TIME                         1662.000
         STW       R7,RD.CHTIM,R1                                       1663.000
*                                                                       1664.000
         STW       R1,TEMPSTP     SAVE THE STACK POINTER.               1665.000
         LA        R1,SAVTIME      LOAD ADDR. OF AREA TO STORE TIME     1666.000
         ORMW      R1,=X'01000000' INDICATE BINARY FORMAT               1667.000
         SVC       2,X'50'         GET CURRENT TIME. USES STACK PTR!!!  1668.000
         LW        R1,TEMPSTP     RESTORE THE STACK POINTER             1669.000
         LD        R6,SAVTIME                                           1670.000
*                                                                       1671.000
         STW       R6,RD.RSDAT,R1  RESTORED DATE                        1672.000
         STW       R7,RD.RSTIM,R1  RESTORED TIME                        1673.000
         SPACE                                                          1674.000
*                                                                       1675.000
* COPY USER DEFINED DATA IN SAVE TAPE TO RD OF TEMP. FILE RD            1676.000
*                                                                       1677.000
         LI        R0,-31          31 WORDS OF DATA POSSIBLE            1678.000
         TRR       R1,R4           DITTO                                1679.000
         TRR       R2,R5           DITTO                                1680.000
         LA        R1,160W,X1      USER DEFINED DATA STARTS HERE        1681.000
         LA        R2,160W,X2      USER DEFINED DATA STARTS HERE        1682.000
MOD.010  EQU       $                                                    1683.000
         LW        R7,0W,X2        GET DATA FROM SAVE TAPE RD.          1684.000
         STW       R7,0W,X1        PLANT DATA IN TEMP. FILE RD          1685.000
         ABR       R2,29           +1W                                  1686.000
         ABR       R1,29           +1W                                  1687.000
         BIB       R0,MOD.010      LOOP UNTIL DONE                      1688.000
         TRR       R4,R1           RESTORE R1                           1689.000
         TRR       R5,R2           RESTOE R2                            1690.000
         SPACE                                                          1691.000
*                                                                       1692.000
* IF SYSTEM ADMINISTRATOR SET SAVE DATE/TIME FROM TAPE RD               1693.000
* ELSE ZERO IT.                                                         1694.000
*                                                                       1695.000
         TESTSAM                   SYSYEM ADMINISTRATOR??               1696.000
         BCT       1,MODIFY3       BRANCH IF SAM                        1697.000
         TBM       B.EXISTS,RESFLAGS  DOES DEST. FILE EXIST ON DISC?    1698.000
         BNS       MODIFY5         IF NOT, BRANCH                       1699.000
*                                                                       1700.000
         LW        R7,D.SAVDAT     DISC SAVE DATE                       1701.000
         STW       R7,RD.SVDAT,R1  STORE IN NEW RD                      1702.000
         LW        R7,D.SAVTIM     DITTO THE TIME                       1703.000
         STW       R7,RD.SVTIM,R1                                       1704.000
         BU        MOD3.5                                               1705.000
*                                                                       1706.000
MODIFY5  ZR        R7                                                   1707.000
         ZMW       RD.SVDAT,R1     SAVE DATE                            1708.000
         ZMW       RD.SVTIM,R1     SAVE TIME                            1709.000
         BU        MOD3.5                                               1710.000
*                                                                       1711.000
MODIFY3  LW        R7,RD.SVDAT,R2  SAVE DATE                            1712.000
         STW       R7,RD.SVDAT,R1                                       1713.000
*                                                                       1714.000
         LW        R7,RD.SVTIM,R2  SAVE TIME                            1715.000
         STW       R7,RD.SVTIM,R1                                       1716.000
*                                                                       1717.000
* IF WE ARE RESTORING A SHARED IMAGE UPDATE THE RD                      1718.000
* UPDATE 5 WORD GCF DATA AREA IN RD FOR ANY FILE TYPE           EGCFI34 1719.000
*                                                                       1720.000
*!D3.5   LB        R4,RD.SFLGS,X2  GET RESOURCE TYPE       V.49 EGCFI34 1721.000
MOD3.5   EQU       $                                            EGCFI34 1722.000
         LI        R0,-5           GET CTR FOR GCF DATA MOVE    EGCFI34 1723.000
*!       CI        R4,X'BA'        IS IT A SHARED IMAGE ?? V.49 EGCFI34 1724.000
*!       BNE       MODIFY4         BRNCH IF NOT            V.49 EGCFI34 1725.000
*!       LI        R0,-10          TRANSFER 10 WORDS       V.49 EGCFI34 1726.000
MOD.020  EQU       $                                           V.49     1727.000
         LW        R7,86W,X2       GET DATA FROM "FROM" RD      EGCFI34 1728.000
         STW       R7,86W,X1       PUT INTO TEMP FILE RD        EGCFI34 1729.000
*!       LW        R7,ME.PPAGE,X2  GET DATA FROM "FROM" RD V.49 EGCFI34 1730.000
*!       STW       R7,ME.PPAGE,X1  STORE IN TEMP FILE RD   V.49 EGCFI34 1731.000
         ABR       R2,29           INCREMENT R2                V.49     1732.000
         ABR       R1,29           INCREMENT R1                V.49     1733.000
         BIB       R0,MOD.020      GET NEXT WORD               V.49     1734.000
MODIFY4  POPSTP                    RESTORE R1                           1735.000
*                                                                       1736.000
* NOW WRITE THE TEMP FILE AWAY AGAIN                                    1737.000
*                                                                       1738.000
         LA        R7,RD2.BUF      ADDRESS OF NEW RD                    1739.000
         BL        MODRD1          REWRITE DESCRIPTOR                   1740.000
         BCT       1,MODIFY2       BRANCH IF ERRORS                     1741.000
*                                                                       1742.000
MODIFY1  POP                       RESTORE REGISTERS                    1743.000
         TRSW      R0                                                   1744.000
*                                                                       1745.000
* AN ERROR OCCURRED WHEN READING OR REWRITING THE TEMP FILE             1746.000
* RD. SET CC1 AND RETURN THE ERROR CODE TO THE CALLER.                  1747.000
*                                                                       1748.000
MODIFY2  SBM       CC1,0W,R1       SET CC1                              1749.000
         STW       R7,7W,R1        RETURN R7                            1750.000
         BU        MODIFY1         COMMON EXIT                          1751.000
         TRSW      R0                                                   1752.000
         TITLE     HANDLE WILD CARD RESTORE                             1753.000
RESRES   EQU       $                                                    1754.000
         PUSH                      SAVE REGS                            1755.000
*  HAVE FUNCTION NAME AVAILABLE NOW ... IN CASE IT IS NEEDED FOR ERROR  1756.000
*  MESSAGES                                                             1757.000
         LA        R7,F.REST       FUNCTION STRING ADDRESS              1758.000
         STW       R7,FUN.SAVE                                          1759.000
*                                                                       1760.000
         ZBM       B.SPILL,FLAGWORD IN CASE IT'S NOT DONE LATER3114.V45 1761.000
*                                                                       1762.000
*  ANY PATHNAME(S) SPECIFIED OR IS IT RESTORE WHOLE SAVE IMAGE          1763.000
*                                                                       1764.000
         LA        R2,PROTOTYP     1ST ENTRY OF PROTOTYPE TABLE         1765.000
         LW        R7,PROFFN.O,X2  "FROM" FILENAME                      1766.000
         BZ        RES.EX          GO FOR RESTORE WHOLE IMAGE           1767.000
*  SELECTIVE RESTORE                                                    1768.000
         TBM       GWILD.F,FLAGBITS     WERE WILD CARDS USED IN 3114.V441769.000
*  PATHNAME(S) ???                                                      1770.000
         BS        RES.10          GO FOR WILDCARDS USED                1771.000
         SBM       SORT.F,FLAGBITS TELL MAIN MODULE THAT SORTING OF     1772.000
*  PATHNAME(S) IS MANDATORY                                             1773.000
         TBM       GWILDT.F,FLAGBITS    WILD CARDED 'TO' NAME?          1774.000
         BNS       RES.EX          NO, GO TO RTN. EXIT POINT   V.40     1775.000
*                                                              V.40     1776.000
* TRANSFER PROTOTYPE ENTRIES TO IO1BUFF FOR RENAME OPERATION.  V.40     1777.000
*                                                              V.40     1778.000
         LW        R2,PRONUM       RETAIN # ENTRY(S) IN BUFFER V.40     1779.000
         STW       R2,IO1COUNT                                 V.40     1780.000
         LA        R2,PROTOTYP     SOURCE ADDRESS              V.40     1781.000
         LA        R3,IO1BUFF      DESTINATION ADDRESS         V.40     1782.000
         LI        R4,IO3MXIDX     LENGTH OF TRANSFER          V.40     1783.000
         BL        COPYSTRG        COPY FROM PRO. TO IO1BUFF   V.40     1784.000
*                                                              V.40     1785.000
* RENAME WILD CARDED 'TO' PATHNAMES NOW CONTAINED IN IO1BUFF   V.40     1786.000
*                                                              V.40     1787.000
         BL        RN.NAME         RENAME 'TO' PATHNAMES       V.40     1788.000
         BU        RES.EX          GO TO ROUTINE EXIT POINT             1789.000
         SPACE     2                                                    1790.000
RES.10   EQU       $                                                    1791.000
*  CHECK FOR LFC "TAP" ASSIGNED, UNBLOCKED, AND READ ACCESS             1792.000
         BL        OPENTAP                                              1793.000
*  INSURE TAPE IS CORRECTLY POSITIONED                                  1794.000
         BL        VERIFY                                               1795.000
         BCT       4,RES.EX        EXIT RESRES IF TAP POS ERR   S850512 1796.000
*  READ SAVE IMAGE DIRECTORY INTO "IO2BUFF" AND/OR IO2 SCRATCH FILE     1797.000
         BL        READDIR                                              1798.000
         ABM       28,NEXTIO2      SKIP 2 INFO WORDS IN TAPE DIRECTORY  1799.000
         SBM       DREAD.F,FLAGBITS     INDICATE (TO MAIN RESTORE CODE) 1800.000
*  THAT TAPE DIRECTORY HAS ALREADY BEEN READ                            1801.000
         SPACE     2                                                    1802.000
*  INITIALIZE FOR PROTOTYPE TABLE                                       1803.000
         LA        R0,PROTOTYP     PROTOTYPE TABLE                      1804.000
         STW       R0,PRONEXT                                           1805.000
         LNW       R0,PRONUM       # PROTOTYPES USER SPECIFIED          1806.000
         STW       R0,PROLEN       SAVE NEGATED # FOR LOOP COUNT        1807.000
         ZMW       FLAGS           INITIALIZE                           1808.000
         ZMW       IO1COUNT        INITIALIZE                           1809.000
         SBM       B.INITP,RESFLAGS     INDICATE WANT TO INITIALIZE     1810.000
*                                  "IO1BUFF" & ASSOCIATED POINTERS      1811.000
         BU        RES.115         BRANCH INTO LOOP FOR INITIALIZATION  1812.000
         SPACE     2                                                    1813.000
RES.100  EQU       $                                                    1814.000
*  SEE IF THERE IS ANOTHER PROTOTYPE                                    1815.000
         ABM       31,PROLEN       DECREMENT REMAINING PROTO. COUNT     1816.000
         BZ        RES.150         GO FOR NONE REMAINING                1817.000
         LI        R0,PROSZ.O      LENGTH OF PROTOTYPE ENTRY            1818.000
         ARMW      R0,PRONEXT      ADDRESS OF CURRENT PROTOTYPE ENTRY   1819.000
         SPACE                                                          1820.000
RES.115  EQU       $                                                    1821.000
         SPACE                                                          1822.000
*                                                                       1823.000
*  RESET DIRECTORY BUFFER POINTERS AND/OR REWIND TEMPORARY FILE         1824.000
*  HOLDING (TAPE) DIRECTORY                                             1825.000
*                                                                       1826.000
         BL        INITIO2B                                             1827.000
RES.120  EQU       $                                                    1828.000
*  POSITION TO VOLUME PROTOTYPE                                         1829.000
         BL        GETVP                                                1830.000
*  GET VOLUME NAME PART OF TAPE DIRECTORY ENTRY                         1831.000
         BL        GETVN                                                1832.000
*  SEE IF VOLUME PROTOTYPE & NAME WILL MATCH                            1833.000
         BL        MATCHNAM                                             1834.000
         BS        RES.140         GO FOR NO MATCH                      1835.000
*  POSITION TO DIRECTORY PROTOTYPE                                      1836.000
         BL        GETDP                                                1837.000
*  GET DIRECTORY NAME PART OF TAPE DIRECTORY ENTRY                      1838.000
         BL        GETDN                                                1839.000
*  SEE IF DIRECTORY PROTOTYPE & NAME WILL MATCH                         1840.000
         BL        MATCHNAM                                             1841.000
         BS        RES.140         GO FOR NO MATCH                      1842.000
*  POSITION TO FILE PROTOTYPE                                           1843.000
         BL        GETFP                                                1844.000
*  GET FILE NAME PART OF TAPE DIRECTORY ENTRY                           1845.000
         BL        GETFN                                                1846.000
*  SEE IF FILE PROTOTYPE & NAME WILL MATCH                              1847.000
         BL        MATCHNAM                                             1848.000
         BS        RES.140         GO FOR NO MATCH                      1849.000
         BCT       CC2,RES.130     GO FOR WILD CARD MATCH               1850.000
         SBM       B.TERM,RESFLAGS NON-WILD CARD MATCH -- NO MORE       1851.000
*  MATCHES POSSIBLE                                                     1852.000
         SPACE                                                          1853.000
*                                                                       1854.000
*  PLANT THE MATCHED PATHNAME (FROM TAPE DIRECTORY ENTRY) IN            1855.000
*  "IO1BUFF" AND/OR "IO1" TEMPORARY FILE                                1856.000
*                                                                       1857.000
RES.130  EQU       $                                                    1858.000
         BL        PLANTIO1        PLANT IT                             1859.000
         ZBM       B.TERM,RESFLAGS NON-WILD CARD MATCH ???              1860.000
         BS        RES.100         GO FOR NON-WILD CARD MATCH           1861.000
*  CONTINUE FOR WILD CARD MATCH                                         1862.000
RES.140  EQU       $                                                    1863.000
*                                                                       1864.000
*  MOVE TO THE NEXT TAPE DIRECTORY ENTRY (IF THERE ARE ANY REMAINING)   1865.000
*                                                                       1866.000
         BL        NEXTDIR                                              1867.000
         TBM       B.EOD,RESFLAGS  END OF DIRECTORY REACHED ???         1868.000
         BS        RES.100         GO FOR END OF DIRECTORY              1869.000
         BU        RES.120         PROCESS A DIRECTORY ENTRY            1870.000
         SPACE     2                                                    1871.000
RES.150  EQU       $                                                    1872.000
         ZBM       B.NOMAT,FLAGBITS WERE ANY MATCHES FOUND ?   82-1402  1873.000
         BS        RES.155          BRANCH IF THERE WERE       82-1402  1874.000
         LA        R2,GEN.M025     ELSE OUTPUT NO MATCHES      82-1402  1875.000
         BL        FORMATOT        ERROR MESSAGE               82-1402  1876.000
RES.155  EQU       $                                           82-1402  1877.000
         SPACE                                                          1878.000
*                                                                       1879.000
*  RESET "IO1" BUFFER AND/OR REWIND "IO1" TEMPORARY FILE                1880.000
*                                                                       1881.000
         TBM       IO11ST.F,FLAGS  "IO1" TEMPORARY FILE USED ???        1882.000
         BNS       RES.160         GO FOR TEMP FILE NOT USED            1883.000
         BL        WIO1BUFF        WRITE OUT LAST BUFFER TO FILE        1884.000
         ZBM       IO11ST.F,FLAGS  EFFECT A REWIND OF THE FILE          1885.000
         BL        RIO1BUFF        READ A BUFFER FULL                   1886.000
         SBM       IO1USE.F,FLAGBITS  INDICATE SCRATCH FILE WAS USED    1887.000
RES.160  EQU       $                                                    1888.000
*                                                                       1889.000
*  INITIALIZE BUFFER POINTERS                                           1890.000
*                                                                       1891.000
         LA        R0,IO1BUFF                                           1892.000
         STW       R0,IO1BIDX                                           1893.000
         ADI       R0,IO1MXIDX                                          1894.000
         STW       R0,IO1BLEN                                           1895.000
         ZBM       GWILD.F,FLAGBITS     WILD CARDED FROM NAME  3114.V44 1896.000
         BS        RES.170                                     3114.V44 1897.000
         SBM       GWILDT.F,FLAGBITS   WILD CARDS USED IN ANY "TO"      1898.000
*  PATHNAME ???                                                         1899.000
         BNS       RES.171         GO FOR NO WILD CARDS USED IN 3114.V441900.000
*                                                              3114.V44 1901.000
* 'FROM' PATHNAME HAS A WILDCARD CHARACTER.  IF THE TO PATHNAME3114.V44 1902.000
* BEEN SPECIFIED, DO THE RENAME.  OTHERWISE THERE IS NO NEED   3114.V44 1903.000
*                                                              3114.V44 1904.000
RES.170  EQU       $                                           3114.V44 1905.000
         SBM       GWILDT.F,FLAGBITS                           3114.V44 1906.000
         LA        R2,PROTOTYP                                 3114.V44 1907.000
         LW        R2,PROTFN.O,R2                              3114.V44 1908.000
         BZ        RES.171                                     3114.V44 1909.000
         BL        RN.NAME         PERFORM THE WILD CARD RENAME         1910.000
RES.171  EQU       $                                                    1911.000
         TBM       IO11ST.F,FLAGS  "IO1" TEMPORARY FILE USED ???        1912.000
         BNS       RES.180         GO FOR TEMP FILE NOT USED            1913.000
*  SET UP FOR EXTERNAL SORT                                             1914.000
         LA        R2,IO1FCB       ADDRESS OF FCB FOR FILE TO BE SORTED 1915.000
         LA        R3,IO1COUNT     # OF RECORDS WRITTEN                 1916.000
         BL        SORTFIL         GO SET-UP & SORT                     1917.000
         ZBM       IO11ST.F,FLAGS  EFFECT A REWIND OF IO1 TEMP. FILE    1918.000
         BU        RES.EX          JOIN COMMON CODE                     1919.000
         SPACE     2                                                    1920.000
RES.180  EQU       $                                                    1921.000
*  SET UP FOR INTERNAL SORT                                             1922.000
         LA        R2,IO1BUFF      BUFFER CONTAINING ENTRY(S) TO SORT   1923.000
         LA        R3,IO1COUNT     # ENTRY(S) IN BUFFER TO SORT         1924.000
         LI        R4,PRONM.O*3    LENGTH OF KEY - IE., VOLUME NAME &   1925.000
*                                  DIRECTORY NAME & FILE NAME           1926.000
         BL        SORTINT         IN MEMORY SORT                       1927.000
         SPACE                                                          1928.000
RES.EX   EQU       $                                                    1929.000
         POP                       RESTORE REGS                         1930.000
         TRSW      R0              RETURN                               1931.000
         SPACE     5                                                    1932.000
INITIO2B EQU       $                                                    1933.000
         PUSH                      SAVE REGS                            1934.000
*                                                                       1935.000
*  RESET DIRECTORY BUFFER POINTERS AND/OR REWIND TEMPORARY FILE         1936.000
*  HOLDING (TAPE) DIRECTORY                                             1937.000
*                                                                       1938.000
         TBM       B.SPILL,FLAGWORD     SCRATCH FILE USED  ???          1939.000
         BNS       INI.110         GO FOR FILE NOT USED                 1940.000
*  SCRATCH FILE USED; REWIND THE FILE AND READ A BUFFER FULL            1941.000
         LA        R2,IO2FCB       FCB ADDRESS FOR TEMPORARY FILE       1942.000
         BL        M.RWND          REWIND FILE                          1943.000
         READS     ,IO2BUFF,IOBUFFSZ    R2 ALREADY CONTAINS FCB ADDRESS 1944.000
INI.110  EQU       $                                                    1945.000
         LI        R7,DIRENTSZ     TAPE DIRECTORY ENTRY SIZE            1946.000
         BL        INITIO2         INITIALIZE BUFFER POINTERS           1947.000
         LW        R2,NEXTIO2      DIRECTORY BUFFER START               1948.000
         LW        R0,REC.DCNT,X2  GET COUNT OF ENTRY(S)                1949.000
         STW       R0,DIRCOUNT                                          1950.000
         STW       R0,TEMPSAV      SAV R0                      83-0813  1951.000
         SUI       R0,1            CAN'T GO OVER EOM           83-0813  1952.000
         STW       R0,SKIPFMAX     MAX FILES TO SKIP           83-0813  1953.000
         LW        R0,TEMPSAV      RESTORE R0                  83-0813  1954.000
         ABM       28,NEXTIO2      SKIP 2 INFO WORDS                    1955.000
         ZBM       B.EOD,RESFLAGS  INITIALIZE END OF DIRECTORY FLAG     1956.000
         POP                       RESTORE REGS                         1957.000
         TRSW      R0              RETURN                               1958.000
         SPACE     5                                                    1959.000
GETVP    EQU       $                                                    1960.000
         ZR        R6              INITIALIZE                           1961.000
         PUSH                      SAVE REGS                            1962.000
         LW        R2,PRONEXT      ADDRESS OF CURRENT PROTOTYPE ENTRY   1963.000
         LB        R0,PROFVL.O,X2  LENGTH OF VOLUME PROTOTYPE (NAME)    1964.000
         STW       R0,5W,X1        PLANT ON STACK FOR RETURN            1965.000
         TBM       QUOTE.F,PROFVF.O,X2  VOLUME PROTO. (NAME) QUOTED ??? 1966.000
         BNS       GETVP.10        GO FOR NOT QUOTED                    1967.000
         SBM       QUOTED.F,6W,X1  INDICATE PROTO. (NAME) QUOTED        1968.000
GETVP.10 EQU       $                                                    1969.000
         LA        R0,PROFVN.O,X2  ADDRESS OF VOLUME PROTO. (NAME)      1970.000
         STW       R0,3W,X1        PLANT ON STACK FOR RETURN            1971.000
         POP                       RESTORE REGS                         1972.000
         TRSW      R0              RETURN                               1973.000
         SPACE     5                                                    1974.000
GETDP    EQU       $                                                    1975.000
         ZR        R6              INITIALIZE                           1976.000
         PUSH                      SAVE REGS                            1977.000
         LW        R2,PRONEXT      ADDRESS OF CURRENT PROTOTYPE ENTRY   1978.000
         LB        R0,PROFDL.O,X2  LENGTH OF DIR. PROTOTYPE (NAME)      1979.000
         STW       R0,5W,X1        PLANT ON STACK FOR RETURN            1980.000
         TBM       QUOTE.F,PROFDF.O,X2  DIR. PROTO. (NAME) QUOTED ???   1981.000
         BNS       GETDP.10        GO FOR NOT QUOTED                    1982.000
         SBM       QUOTED.F,6W,X1  INDICATE PROTO. (NAME) QUOTED        1983.000
GETDP.10 EQU       $                                                    1984.000
         LA        R0,PROFDN.O,X2  ADDRESS OF DIR. PROTO. (NAME)        1985.000
         STW       R0,3W,X1        PLANT ON STACK FOR RETURN            1986.000
         POP                       RESTORE REGS                         1987.000
         TRSW      R0              RETURN                               1988.000
         SPACE     5                                                    1989.000
GETFP    EQU       $                                                    1990.000
         ZR        R6              INITIALIZE                           1991.000
         PUSH                      SAVE REGS                            1992.000
         LW        R2,PRONEXT      ADDRESS OF CURRENT PROTOTYPE ENTRY   1993.000
         LB        R0,PROFFL.O,X2  LENGTH OF FILE PROTOTYPE (NAME)      1994.000
         STW       R0,5W,X1        PLANT ON STACK FOR RETURN            1995.000
         TBM       QUOTE.F,PROFFF.O,X2  FILE PROTO. (NAME) QUOTED ???   1996.000
         BNS       GETFP.10        GO FOR NOT QUOTED                    1997.000
         SBM       QUOTED.F,6W,X1  INDICATE PROTO. (NAME) QUOTED        1998.000
GETFP.10 EQU       $                                                    1999.000
         LA        R0,PROFFN.O,X2  ADDRESS OF FILE PROTO. (NAME)        2000.000
         STW       R0,3W,X1        PLANT ON STACK FOR RETURN            2001.000
         POP                       RESTORE REGS                         2002.000
         TRSW      R0              RETURN                               2003.000
         SPACE     5                                                    2004.000
GETVN    EQU       $                                                    2005.000
         PUSH                      SAVE REGS                            2006.000
         LW        R3,NEXTIO2      CURRENT TAPE DIRECTORY ENTRY         2007.000
         LA        R7,DIRVN.O,X3   ADDR OF VOL. NAME IN DIR. ENTRY      2008.000
         STW       R7,2W,X1        PLANT ON STACK FOR RETURN            2009.000
         BL        GETPATH         GET SIGNIFICANT LENGTH OF NAME       2010.000
         SRL       R7,24           POSITION LENGTH                      2011.000
         STW       R7,4W,X1        PLANT ON STACK FOR RETURN            2012.000
         POP                       RESTORE REGS                         2013.000
         TRSW      R0              RETURN                               2014.000
         SPACE     5                                                    2015.000
GETDN    EQU       $                                                    2016.000
         PUSH                      SAVE REGS                            2017.000
         LW        R3,NEXTIO2      CURRENT TAPE DIRECTORY ENTRY         2018.000
         LA        R7,DIRDN.O,X3   ADDR OF DIR. NAME IN DIR. ENTRY      2019.000
         STW       R7,2W,X1        PLANT ON STACK FOR RETURN            2020.000
         BL        GETPATH         GET SIGNIFICANT LENGTH OF NAME       2021.000
         SRL       R7,24           POSITION LENGTH                      2022.000
         STW       R7,4W,X1        PLANT ON STACK FOR RETURN            2023.000
         POP                       RESTORE REGS                         2024.000
         TRSW      R0              RETURN                               2025.000
         SPACE     5                                                    2026.000
GETFN    EQU       $                                                    2027.000
         PUSH                      SAVE REGS                            2028.000
         LW        R3,NEXTIO2      CURRENT TAPE DIRECTORY ENTRY         2029.000
         LA        R7,DIRFN.O,X3   ADDR OF FILE NAME IN DIR. ENTRY      2030.000
         STW       R7,2W,X1        PLANT ON STACK FOR RETURN            2031.000
         BL        GETPATH         GET SIGNIFICANT LENGTH OF NAME       2032.000
         SRL       R7,24           POSITION LENGTH                      2033.000
         STW       R7,4W,X1        PLANT ON STACK FOR RETURN            2034.000
         POP                       RESTORE REGS                         2035.000
         TRSW      R0              RETURN                               2036.000
         TITLE     PLANTIO1 -- PUT MATCHED ENTRY INTO COLLECTION BUFFER 2037.000
*++                                                                     2038.000
*                                                                       2039.000
*  INPUT:                                                               2040.000
*        "NEXTIO2" CONTAINS ADDRESS OF CURRENT TAPE DIRECTORY ENTRY     2041.000
*        "PRONEXT" CONTAINS ADDRESS OF CURRENT PROTOTYPE ENTRY          2042.000
*                                                                       2043.000
*--                                                                     2044.000
         SPACE                                                          2045.000
PLANTIO1 EQU       $                                                    2046.000
         SPACE                                                          2047.000
         ANMW      R0,ADR.MASK     INITIALIZE CC'S FOR RETURN           2048.000
         PUSH                      SAVE REGS                            2049.000
         ZBM       B.INITP,RESFLAGS     INITIALIZE BUFFER & INDEX ???   2050.000
         BS        PLA.010         GO TO INITIALIZE                     2051.000
         LW        R3,IO1BIDX      ADDR. OF CURRENT ENTRY IN "IO1BUFF"  2052.000
         ADI       R3,PROSZ.O      SIZE OF AN ENTRY                     2053.000
         CAMW      R3,IO1BLEN      END OF BUFFER ???                    2054.000
         BLT       PLA.030         GO FOR NOT END OF BUFFER             2055.000
         BL        WIO1BUFF        WRITE OUT THE BUFFER                 2056.000
PLA.010  EQU       $                                                    2057.000
         LA        R3,IO1BUFF      ADDR. OF 1ST ENTRY                   2058.000
         TRR       R3,R0           DITTO                                2059.000
         ADI       R0,IO1MXIDX     END OF BUFFER                        2060.000
         STW       R0,IO1BLEN      SAVE BUFFER END ADDRESS              2061.000
*  ZERO DOWN "IO1BUFF"                                                  2062.000
         LI        R0,-IO1MXIDX    NEG # BYTES IN "IO1BUFF"             2063.000
         LA        R2,IO1BUFF      BUFFER STARTING ADDRESS              2064.000
PLA.020  EQU       $                                                    2065.000
         ZMD       0D,X2           INITIALIZE                           2066.000
         ADI       R2,1D           NEXT DOUBLE WORD                     2067.000
         BID       R0,PLA.020      LOOP TIL DONE                        2068.000
PLA.030  EQU       $                                                    2069.000
         ABM       31,IO1COUNT     BUMP ENTRY COUNT                     2070.000
         STW       R3,IO1BIDX      SAVE CURRENT ENTRY ADDRESS           2071.000
         LW        R2,NEXTIO2      ADDR. OF CURRENT TAPE DIR. ENTRY     2072.000
         LI        R4,PRONM.O*3    COPY VOL/DIR/FIL FROM TAPE DIR. ENTRY2073.000
         BL        COPYSTRG                                             2074.000
         LW        R2,PRONEXT      ADDR. OF CURRENT PROTOTYPE ENTRY     2075.000
         STW       R2,PROFPA.O,X3  RETAIN ADDRESS OF MEMORY RESIDENT    2076.000
*  PROTOTYPE TABLE ENTRY                                                2077.000
         LW        R0,PROFOA.O,X2  OPTION BLOCK ADDRESS                 2078.000
         STW       R0,PROFOA.O,X3  PLANT IN ENTRY                       2079.000
         POP                       RESTORE REGS                         2080.000
         TRSW      R0              RETURN                               2081.000
*++                                                                     2082.000
*                                                                       2083.000
*  OPENTAP - MAKE SURE LFC "TAP" WAS ASSIGNED, IT IS UNBLOCKED, AND     2084.000
*            HAVE READ ACCESS.                                          2085.000
*                                                                       2086.000
*--                                                                     2087.000
         SPACE                                                          2088.000
OPENTAP  EQU       $                                                    2089.000
         SPACE                                                          2090.000
         PUSH                      SAVE REGS                            2091.000
*                                                                       2092.000
*  SEE IF TAPE IS ASSIGNED AND UNBLOCKED MODE WAS SPECIFIED             2093.000
*                                                                       2094.000
         LW        R7,TAPZ         LFC G-STRING                         2095.000
         BL        X.RINQ          RESOURCE INQUIRY SET-UP ROUTINE      2096.000
*                                                                       2097.000
*  R5 = 0 FOR UNASSIGNED ELSE ALLOCATION INDEX                          2098.000
*  R7 = CNP STATUS                                                      2099.000
*  "INQ.BUF" = BUFFER HOLDING RETURNED INQUIRY INFORMATION              2100.000
*                                                                       2101.000
         BNS       CON.003         GO FOR INQUIRY ACCEPTED & COMPLETE   2102.000
*                                                                       2103.000
*  LOGICAL FILE CODE "TAP" MUST NOT BE ASSIGNED -- HAVE TO ABORT        2104.000
*                                                                       2105.000
         LA        R7,GEN.M012     ERROR MESSAGE                        2106.000
         BL        FUPABRT3        ENTRY POINT IN ABORT ROUTINE         2107.000
         SPACE     2                                                    2108.000
CON.003  EQU       $               LFC ASSINGED, NOW CHECK FOR UNBLOCKED2109.000
         SPACE                                                          2110.000
*                                                                       2111.000
*  CHECK FAT TO SEE IF TAPE WAS ASSIGNED AS UNBLOCKED                   2112.000
*                                                                       2113.000
         LA        R2,INQ.BUF      BUFFER FILLED BY INQUIRY SERVICE     2114.000
*!       LW        R3,2W,X2        UDT ADDRESS FOR LFC "TAP"    Q067-32C2115.000
*!       LB        R5,5B,X3        DEVICE TYPE CODE             Q067-32C2116.000
*!       CI        R5,X'0E'        IS IT FLOPPY DISC?           Q067-32C2117.000
*!       BNE       CON.005         NO, BRANCH                   Q067-32C2118.000
*!       LH        R3,CNP.ACC8     YES, MODIFY ACCESS MODE      Q067-32C2119.000
*!       STH       R3,CNP.ACC3       TO UPDATE & UNBLOCKED      Q067-32C2120.000
CON.005  LW        R3,1W,X2        FAT ADDRESS FOR LFC "TAP"            2121.000
*!       TBM       0,DFT.FLGS,X3   BLOCKING BUFFER PRESENT BIT ! 32B01  2122.000
*!       BNS       CON.006         BRANCH FOR UNBLOCKED        ! 32B01  2123.000
*                                                                       2124.000
*  TAPE WAS ASSIGNED AS BLOCKED (SYSTEM DEFAULT) -- MUST ABORT          2125.000
*                                                                       2126.000
*!       LA        R7,GEN.M011     ERROR MESSAGE               ! 32B01  2127.000
*!       BL        FUPABRT3        ENTRY POINT IN ABORT ROUTINE! 32B01  2128.000
         SPACE     2                                                    2129.000
CON.006  EQU       $                                                    2130.000
         SPACE                                                          2131.000
         TBM       0,DFT.STB,X3    IS DEVICE OPEN ???                   2132.000
         BNS       CON.008         GO FOR NOT OPEN                      2133.000
*                                                                       2134.000
*  FILE IS OPEN -- NOW SEE IF CURRENT ACCESS MODE ALLOWS READ           2135.000
*                                                                       2136.000
         LB        R4,DFT.CACM,X3  CURRENT ACCESS MODE FROM FAT         2137.000
         CI        R4,UPDATE.M     IS IT UPDATE ACCESS ???              2138.000
         BEQ       CON.010         GO FOR UPDATE ACCESS                 2139.000
*!       CI        R5,X'0E'        IS IT FLOPPY DISC?           Q067-32C2140.000
*!       BEQ       CON.007         YES, GO CLOSE THE FILE       Q067-32C2141.000
         CI        R4,READ.M       IS IT READ ACCESS ???                2142.000
         BEQ       CON.010         GO FOR READ ACCESS                   2143.000
*                                                                       2144.000
*  DON'T HAVE DESIRED (READ) ACCESS, SO CLOSE & RE-OPEN                 2145.000
*                                                                       2146.000
CON.007  LH        R7,CNP.ACCD     CNP OPTION FIELD VALUE      83-0769  2147.000
         LA        R5,TAPFCB       FCB ADDRESS                          2148.000
         BL        X.CLOSE         CLOSE THE DEVICE                     2149.000
         BNS       CON.008         GO FOR NO ERRORS                     2150.000
*  CLOSE FAILED -- SO ABORT                                             2151.000
         LA        R6,GEN.M022     ERROR MESSAGE                        2152.000
*  R7 CONTAINS MODULE #/ERROR # COMBO RETURN FROM SERVICE               2153.000
         BL        FUPABORT        ABORT MODULE -- ENTRY POINT          2154.000
         SPACE     2                                                    2155.000
CON.008  EQU       $                                                    2156.000
*                                                                       2157.000
*        OPEN THE SAVE TAPE                                             2158.000
*                                                                       2159.000
**************** CHECK DEV TYPE, IF FLOPPY TRY UPDATE ACCESS    S830769A2160.000
         LW        R3,2W,X2        GET UDT ADDR                 S830769A2161.000
         STW       R3,UDTADDR      STORE FOR FUTURE REFERENCE   EQIC360A2162.000
         LB        R5,5B,X3        GET DEV TYPE                 S830769A2163.000
         CI        R5,X'0E'        IS IT FLOPPY?                S830769A2164.000
         BNE       CON.08A         IF NOT, OPEN READ ACCESS     S830769A2165.000
         LA        R5,TAPFCB       FCB ADDR TO R5               S830769A2166.000
         LH        R7,CNP.ACC8     UPDATE & UNBLOCKED           S830769A2167.000
         BL        X.OPEN          BUILD CNP & OPEN FILE        S830769A2168.000
         BNS       CON.010         BRANCH IF SUCCESSFUL         S830769A2169.000
**************** IF CAN'T OPEN WITH UPDATE, TRY READ ONLY NEXT  S830769A2170.000
CON.08A  EQU       $               OPEN WITH READ ONLY ACCESS   S830769A2171.000
         LA        R5,TAPFCB       FCB ADDR                             2172.000
         LH        R7,CNP.ACC3     CNP ACCESS - READ ONLY, IMPLICIT SHAR2173.000
         BL        X.OPEN          BUILD CNP & ISSUE "OPEN" SERVICE CALL2174.000
         BNS       CON.010         BRANCH FOR SUCCESSFUL OPEN           2175.000
*                                                                       2176.000
*        OPEN FAILED  --  ISSUE ERROR MESSAGE & TERMINATE THIS COMMAND  2177.000
*                                                                       2178.000
         LA        R6,GEN.M001     ERROR MESSAGE                        2179.000
*        R7 ALREADY CONTAINS MODULE #/ERROR #  --  AS                   2180.000
*        RETURNED FROM SERVICE ROUTINE                                  2181.000
         BL        FUPABORT        ABORT ROUTINE                        2182.000
         SPACE     2                                                    2183.000
CON.010  EQU       $                                                    2184.000
         LW        R7,TAPZ         LFC TAP                      EQIC360A2185.000
         BL        X.RINQ          M.INQUIRY SETUP AND CALL     EQIC360A2186.000
         BNS       CON.030         NO ERROR - CONTINUE          EQIC360A2187.000
         LA        R7,GEN.M012     ERROR MESSAGE                EQIC360A2188.000
         BL        FUPABRT3        ABORT ROUTINE                EQIC360A2189.000
CON.030  CEQU      $                                            EQIC360A2190.000
         LA        R2,INQ.BUF      GET BUFFER ADDRESS           EQIC360A2191.000
         LW        R3,2W,X2        GET UDT ADDRESS              EQIC360A2192.000
         CAMW      R3,UDTADDR      SAME AS BEFORE OPEN?         EQIC360A2193.000
         BEQ       CON.060         YES - NO CHANGES             EQIC360A2194.000
         LA        R2,DOBLOCK      DEFAULT OPTION BLOCK ADDRESS EQIC360A2195.000
         TBM       UDT.SEOF,UDT.OPT,X3  SOFT EOF MANAGEMENT?    EQIC360A2196.000
         BNS       CON.050         NO - RESET SEOF FLAG         EQIC360A2197.000
*        SBM       OPT.B.SE,OPT.FLGS  SOFT EOF MODE    EQIC360A CP12500 2198.000
         SBM       OPT.B.SE,OPT.FLGS,X2 SOFT EOF MODE           CP12500 2199.000
         BU        CON.060         AND EXIT                     EQIC360A2200.000
CON.050  CEQU      $                                            EQIC360A2201.000
         ZBM       OPT.B.SE,OPT.FLGS,X2  NO SEOF MODE           EQIC360A2202.000
CON.060  CEQU      $                                            EQIC360A2203.000
         SPACE                                                          2204.000
         POP                       RESTORE REGS                         2205.000
         TRSW      R0              RETURN                               2206.000
         TITLE     VERIFY -- ENSURE TAPE IS AT BEGINNING OF IMAGE       2207.000
*                                                                       2208.000
* ENSURE THAT THE TAPE IS AT BEGINNING OF IMAGE (BOI).                  2209.000
* THIS IS DETECTED EITHER BY THE TAPE BEING AT BOT OR THE               2210.000
* TWO PREVIOUS RECORDS BEING EOF'S.                                     2211.000
* IF THE TAPE IS NOT CORRECTLY POSITIONED THEN GENERATE                 2212.000
* A FUP ERROR AND EXIT THE COMMAND.                                     2213.000
*                                                                       2214.000
         SPACE                                                          2215.000
VERIFY   EQU       $                                                    2216.000
         PUSH                      SAVE REGS                            2217.000
         ZBM       CC4,0W,R1       ZERO CC4                     E3RMS35 2218.000
*        TRR       R2,R3           SAVE R2 AS IDENTIFIERS850512 EQIC360 2219.000
         TRR       R2,R5           SAVE R2 AS IDENTIFIER        EQIC360 2220.000
         LA        R2,TAPFCB       FCB                                  2221.000
         LI        R4,1            COUNT OF BACK RECORDS                2222.000
         BL        M.BCKR          BACK A RECORD                        2223.000
         BCT       3,VER1       BRANCH IF AT BOT                        2224.000
         BCF       1,VER3       BRANCH TO ERROR IF NOT AN EOF           2225.000
         LA        R3,DOBLOCK      DEFAULT OPTION BLOCK         EQIC360 2226.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 2227.000
         BS        VER1.5          IF SO, ONLY 1 BCKR           EQIC360 2228.000
         BL        M.BCKR          BACK ANOTHER RECORD                  2229.000
         BCF       1,VER2       BRANCH TO ERROR IF NOT 2 CONSEC EOF'S   2230.000
VER1.5   CEQU      $                                            EQIC360 2231.000
*                                                                       2232.000
* WE ARE AT BOI, SO SKIP THE TWO RECORDS WE HAVE JUST BACKED OVER.      2233.000
*                                                                       2234.000
         LI        R4,1            FORWARD ONE RECORD AT A TIME         2235.000
         BL        M.FWDR                                               2236.000
         BCT       2,VER4          GO FOR I/O ERROR                     2237.000
         TBM       OPT.B.SE,OPT.FLGS,X3 SOFT EOF?               EQIC360 2238.000
         BS        VER1            IF SO, ONLY 1 FWDR           EQIC360 2239.000
         BL        M.FWDR                                               2240.000
         BCT       2,VER4          GO FOR I/O ERROR                     2241.000
*  MAKE SURE IT'S NOT AT LOGICAL EOT                                    2242.000
         LI        R4,1            FORWARD COUNT               83-1076  2243.000
         BL        M.FWDR          FORWARD ONE RECORD          83-1076  2244.000
         BCT       2,VER4          BRANCH IF I/O ERROR         83-1076  2245.000
         BCT       1,READIR37      IF EOF,THEN ERROR (EOT)     83-1076  2246.000
         LI        R4,1            BACK OVER ONE RECORD        83-1076  2247.000
         BL        M.BCKR            TO WHERE WE WERE          83-1076  2248.000
         BCT       2,VER4          BRANCH IF I/O ERROR         83-1076  2249.000
         BU        VER1                                                 2250.000
         SPACE     2                                                    2251.000
*                                                                       2252.000
* THE TAPE IS NOT POSITIONED AT BOI, POSITION THE TAPE TO WHERE         2253.000
* IT STARTED AND THEN ERROR.                                            2254.000
*                                                                       2255.000
VER2     LI        R4,1            ONE FORWARD RECORD                   2256.000
         BL        M.FWDR                                               2257.000
         BCT       2,VER4          GO FOR I/O ERRORS                    2258.000
VER3     LI        R4,1            ONE FORWARD RECORD                   2259.000
         BL        M.FWDR                                               2260.000
         BCT       2,VER4          GO FOR I/O ERRORS                    2261.000
         LA        R4,PROTOTYP     GET PROTOTYP ADDR            S850512 2262.000
*        CAR       R3,R4           CALLED FROM RESRES ROS850512 EQIC360 2263.000
         CAR       R5,R4           CALLED FROM RESRES ROUTINE?  EQIC360 2264.000
         BEQ       $+3W            IF YES, SKIP PRINTOUT        S850512 2265.000
         LA        R7,NOTATBOI     "TAPE NOT AT BOI"                    2266.000
*        BL        ERROR2          REPORT THE SITUATION         S850512 2267.000
         BL        FUPABRT3        PRINT ERR AND SET ABOT.F     S850512 2268.000
         SBM       CC4,0W,R1       SET CC1 FOR RETURN           S850512 2269.000
VER1     EQU       $                                                    2270.000
         POP                       RESTORE REGISTERS                    2271.000
         TRSW      R0                                                   2272.000
         SPACE     2                                                    2273.000
VER4     EQU       $                                                    2274.000
         LA        R6,GEN.M007     I/O ERROR MESSAGE                    2275.000
         BL        FUPABRT2        CALL ABORT HANDLER                   2276.000
         TITLE     READDIR - READ SAVE IMAGE DIRECTORY INTO BUFFER/FILE 2277.000
*                                                                       2278.000
* READ THE DIRECTORY FROM TAPE AND IF IT IS GREATER THAN 8 BLOCKS       2279.000
* LONG ( >127 ENTRIES ) WRITE IT TO SCRATCH FILE IO2 SO THAT            2280.000
* DIRECTORY COMPARISONS CAN BE MADE AS FILES ARE RESTORED.              2281.000
*                                                                       2282.000
* THE SAME VARIABLES USED IN THE SAVE ROUTINES ARE USED HERE FOR        2283.000
* CONSISTENCY.                                                          2284.000
* NOTE THAT READS AND WRITES MACROS USE R2,R6 AND R7                    2285.000
*                                                                       2286.000
READDIR  EQU       $                                                    2287.000
         SPACE                                                          2288.000
         PUSH                      SAVE REGS                            2289.000
         LI        R7,DIRENTSZ     ENTRY SIZE IN TAPBUFF                2290.000
         BL        INITIO2         INITIALISE BUFFER POINTERS           2291.000
         READS     TAPFCB,IO2BUFF,IOBUFFSZ                              2292.000
*                                                                       2293.000
* CHECK FOR READ ERRORS AND ABORT IF SO                                 2294.000
*                                                                       2295.000
         BCT       1,READIR37      BRANCH TO ERROR IF EOF               2296.000
*  THIS MEANS WE HAVE REACHED THE LOGICAL END-OF-TAPE                   2297.000
         BCT       2,READIR35      BRANCH TO ERROR IF I/O PROBLEM       2298.000
*                                                                       2299.000
         LW        R3,NEXTIO2      DIRECTORY BUFFER START               2300.000
         LW        R4,0,X3         GET TYPE CODE               83-0776  2301.000
         ZBR       R4,IDIRSEOF     GET RID OF SEOF FLAG         EQIC360 2302.000
         CI        R4,1            IMAGE DIRECTORY FILE TYPE=1 83-0776  2303.000
         BNE       READIR32        IF NOT, REPORT ERROR        83-0776  2304.000
         LW        R4,REC.DCNT,R3  GET COUNT OF ENTRIES                 2305.000
         STW       R4,DIRCOUNT                                          2306.000
         STW       R4,TEMPSAV      SAV R4                      83-0813  2307.000
         SUI       R4,1            CAN'T GO OVER EOM           83-0813  2308.000
         STW       R4,SKIPFMAX     MAX FILES TO SKIP           83-0813  2309.000
         LW        R4,TEMPSAV      RESTORE R4                  83-0813  2310.000
*                                                                       2311.000
* IF THE NUMBER OF ENTRIES IN THE DIRECTORY IS >127 THEN SCRATCH        2312.000
* FILE IO2 MUST BE USED TO HOLD THE TOTAL DIRECTORY ( >8 BLOCKS)        2313.000
* (IE., >1 TAPE RECORD)                                                 2314.000
*                                                                       2315.000
         CI        R4,127                                               2316.000
         BLE       READIR33        BRANCH IF ONLY ONE TAPE RECORD       2317.000
*                                                                       2318.000
* ALLOCATE AND OPEN THE SCRATCH FILE IO2.                               2319.000
* IF THE FILE IS ALREADY ALLOCATED THEN REWIND IT.                      2320.000
*                                                                       2321.000
         ZMW       FLAGWORD        INITIALIZE                           2322.000
READIR36 EQU       $                                                    2323.000
         BL        SPILLIO2        WRITE TO IO2 SCRATCH FILE            2324.000
         READS     TAPFCB          READ NEXT DIRECTORY BLOCK            2325.000
         BCT       2,READIR35      BRANCH TO ERROR IF I/O PROBLEM       2326.000
         BCF       1,READIR36      LOOP IF NOT EOF FOR NEXT BLOCK       2327.000
         BU        READIR34        COMMON CODE                          2328.000
*                                                                       2329.000
* ONLY ONE BLOCK OF DIRECTORY, SO IT CAN BE HELD IN IO2BUFF WITHOUT     2330.000
* THE NEED FOR A SCRATCH FILE.                                          2331.000
* SKIP OVER THE DIRECTORY EOF AND THEN JOIN COMMON CODE                 2332.000
*                                                                       2333.000
READIR33 LI        R4,1            SKIP ONE FILE                        2334.000
         BL        M.FWDF                                               2335.000
         BCT       2,READIR35      BRANCH TO ERROR IF I/O PROBLEM       2336.000
*                                                                       2337.000
READIR34 EQU       $                                                    2338.000
         POP                       RESTORE REGS                         2339.000
         TRSW      R0              RETURN                               2340.000
         SPACE     2                                                    2341.000
READIR32 EQU       $                                           83-0776  2342.000
         LA        R7,GEN.M033     MULTI-VOLUME LABEL ERROR    83-0776  2343.000
         BL        FUPABRT3        ENTRY POINT IN ABORT ROUTIN 83-0776  2344.000
READIR35 EQU       $                                                    2345.000
         LB        R4,FCB.SFLG,R2  GET STATUS                   S850513 2346.000
         CI        R4,X'44'        IS IT A TAPE ID OR NUM ERR?  S850513 2347.000
         BNE       READ35.1        IF NOT, REAL I/O ERROR       S850513 2348.000
         LW        R2,FCB.FATA,R2  GET FAT ADDR                 S850513 2349.000
         BL        ERROR6          PRINT MESSAGE                S850513 2350.000
         BU        ABORTNOM        ABORT                        S850513 2351.000
READ35.1 EQU       $                                            S850513 2352.000
         LA        R6,GEN.M007     I/O ERROR MESSAGE                    2353.000
         BL        FUPABRT2        CALL ABORT HANDLER                   2354.000
         SPACE     2                                                    2355.000
READIR37 EQU       $                                                    2356.000
         LA        R7,GEN.M027     LOGICAL END OF TAPE MESSAGE          2357.000
         BL        ERROR2          REPORT ERROR                         2358.000
         LA        R6,GEN.M004     EOF/EOM ERROR MESSAGE                2359.000
         SBM       EOT.F,FLAGBITS  FLAG FOR END OF TAPE         CP11905 2360.000
*        BNS       READIR32        IF 1ST TIME SET, NO  CP11905 S920696 2361.000
         BNS       READIR38        IF 1ST TIME SET, NO ERROR    S920696 2362.000
         BL        FUPABRT2        CALL ABORT HANDLER                   2363.000
*                                                               S920696 2364.000
* WE DO NOT NEED TO ABORT, SO GO GET NEXT COMMAND               S920696 2365.000
*                                                               S920696 2366.000
READIR38 CEQU      $                                            S920696 2367.000
         LA        R1,TOPOSTK      RESTORE STACK POINTER        S920696 2368.000
         BU        FUP.000         RETURN TO COMMAND PROCESSING S920696 2369.000
         TITLE     RESTORE COMMAND STATE TABLES & ACTION ROUTINES       2370.000
*                                                                       2371.000
* A.CMD    - ACTION WHEN VALID RESTORE COMMAND IS PARSED                2372.000
*                                                                       2373.000
         SPACE                                                          2374.000
A.CMDDIR EQU       $                                                    2375.000
         PUSH                      SAVE REGS                            2376.000
         BL        RESRES          SET UP FOR WILD OR NON-WILD CARD RES.2377.000
         LA        R7,C.RESDIR     GET ADDRESS OF COMMAND PROCESSOR     2378.000
         STW       R7,COMDADDR     SAVE FOR DISPATCHER                  2379.000
         SBM       TPMVFLAG,FLAGBITS  TAPE MOVEMENT             EQIC360 2380.000
         POP                       RESTORE REGS                         2381.000
         TRSW      R0              RETURN TO PARSER                     2382.000
         SPACE     2                                                    2383.000
A.CMDPOS EQU       $                                                    2384.000
         LA        R7,C.RESPOS     COMMAND PROCESSOR ENTRY POINT        2385.000
         STW       R7,COMDADDR     SAVE FOR DISPATCHER                  2386.000
         SBM       TPMVFLAG,FLAGBITS  TAPE MOVEMENT             EQIC360 2387.000
         TRSW      R0              RETURN TO PARSER                     2388.000
         SPACE     5                                                    2389.000
         SPACE                                                          2390.000
         BOUND     1W              ALIGN                                2391.000
         SPACE                                                          2392.000
*++                                                                     2393.000
* S.RESDIR - STATE TABLES FOR RESTORE VIA DIRECTORY COMMAND             2394.000
*                                                                       2395.000
* COMMAND SYNTAX:                                                       2396.000
*                                                                       2397.000
* RESTORE [DIRECTORY]  [GOPT]  [FROM=]  PATHNAME  [ [TO=] PATHNAME ]    2398.000
*        [LOPT]  [ , . . . ]                                            2399.000
*                                                                       2400.000
* OPTIONS:                                                              2401.000
*                                                                       2402.000
*        ***  ALL OPTIONS CAN BE SPECIFIED GLOBALLY OR LOCALLY ***      2403.000
*                                                                       2404.000
*        CREATED=TIME                                                   2405.000
*        CHANGED=TIME                                                   2406.000
*        SAVED=TIME                                                     2407.000
*        RESTORED=TIME                                                  2408.000
*        CONFIRM=BOOL                                                   2409.000
*        NEWEST=BOOL                                                    2410.000
*        BRIEF=BOOL                                                     2411.000
*                                                                       2412.000
*                                                                       2413.000
*  NOTE:                                                                2414.000
*        LOGICAL FILE CODE "TAP" IS ASSUMED TO BE EXTERNALLY            2415.000
*        ASSIGNED BEFORE ACTIVATION OF VOLMGR !!!                       2416.000
*                                                                       2417.000
*--                                                                     2418.000
         SPACE                                                          2419.000
S.RESDIR    STATE                     STATE TABLE FOR RESTORE COMMAND   2420.000
           TRAN    NOBLNK,A.GLOBAL      POSITION OPTION BLOCK FOR       2421.000
*                                       GLOBAL OPTIONS                  2422.000
S.10     STATE                                                          2423.000
           TRAN    TSTEXP,,S.20,SS.KWSYN    IS IT A KEYWORD ???         2424.000
           TRAN    NOBLNK,,S.30              NOT A KEYWORD -- MUST BE AN2425.000
*                                            ACTUAL PATHNAME            2426.000
S.10.1   STATE                                                          2427.000
           TRAN    TSTEXP,,S.20.1,SS.KWSYN   IS IT A KEYWORD?  3114.V42 2428.000
           TRAN    NOBLNK,,S.30              NOPE, ITS A PATH. 3114.V42 2429.000
*                                                                       2430.000
S.20     STATE                                                          2431.000
           TRAN    SUBEXP,,S.10.1,SS.VOL,NOB.M    VOLU=?       3114.V42 2432.000
           TRAN    NOBLNK                                      3114.V42 2433.000
*                                                              3114.V42 2434.000
S.20.1   STATE                                                          2435.000
           TRAN    SUBEXP,,S.30,SS.FROM,NOB.M     IS IT "PATH=" KEYWORD 2436.000
           TRAN    SUBEXP,,S.10.1,SS.OPT,NOB.M      CHECK FOR L3114.V42 2437.000
*                                                 OPTION; IE., 'BOOT='  2438.000
*                                                 KEYWORDS              2439.000
           ERRVAL  INVKEY                         INVALID KEYWORD       2440.000
S.30     STATE                                                          2441.000
         SPACE                                                          2442.000
*  THIS HANDLES CASE OF JUST VERB, [ADVERB] & [GLOBAL OPTIONS]          2443.000
         SPACE                                                          2444.000
           TRAN    EOS,A.MAKEP,S.40          RESTORE EVERYTHING ON TAPE 2445.000
*                                                                       2446.000
*          TRAN    NOBLNK,A.LOCAL         POSITION TO 1ST LOCAL S851291A2447.000
           TRAN    NOBLNK,A.LOCAL1        POSITION TO 1ST LOCAL S851291A2448.000
*                                            OPTION BLOCK               2449.000
         STATE                                                          2450.000
           TRAN    SUBEXP,,S.40,SS.SL00   GET PATHNAME & LOCAL OP       2451.000
S.40       TRAN    EOS,A.CMDDIR,EXIT         EXIT PARSE -- SUCCESSFUL   2452.000
*                                            ALSO PLUG ENTRY ADDRESS    2453.000
*                                            SYNTAX VIOLATION           2454.000
         STATE                                                          2455.000
         SPACE     5                                                    2456.000
SS.SL00  STATE                               INPUT FILE LIST            2457.000
         SPACE                                                          2458.000
*  GET THE "FROM" PATHNAME (THIS IS REQUIRED SINCE END-OF-STRING        2459.000
*  WAS NOT PREVIOUSLY ENCOUNTERED)                                      2460.000
         SPACE                                                          2461.000
           TRAN    SUBEXP,,,SS.PATNM,NOB.M                              2462.000
         SPACE                                                          2463.000
*  ERROR IF DIDN'T FIND THE "FROM" PATHNAME                             2464.000
         SPACE                                                          2465.000
           ERRVAL  FROMPATH        TERMINATE PARSE W/ERROR MESSAGE      2466.000
         STATE                                                          2467.000
         SPACE                                                          2468.000
*  IS NEXT ITEM A KEYWORD                                               2469.000
         SPACE                                                          2470.000
           TRAN    TSTEXP,,SS.50,SS.KWSYN                               2471.000
         SPACE                                                          2472.000
*  NOT A KEYWORD, MUST BE ONE OF EOS, COMMA, OR THE "TO" PATHNAME       2473.000
         SPACE                                                          2474.000
*  CHECK END-OF-STRING (EOS)                                            2475.000
         SPACE                                                          2476.000
           TRAN    EOS,,EXIT                                            2477.000
         SPACE                                                          2478.000
*  CHECK FOR A COMMA                                                    2479.000
         SPACE                                                          2480.000
           TRAN    COMMA,A.LOCAL,SS.SL30,,NOB.M                         2481.000
         SPACE                                                          2482.000
*  MUST BE THE "TO" PATHNAME                                            2483.000
         SPACE                                                          2484.000
           TRAN    SUBEXP,,SS.70,SS.PATN2,NOB.M                         2485.000
SS.50    STATE                                                          2486.000
         SPACE                                                          2487.000
*  CHECK FOR THE "TO=" KEYWORD                                          2488.000
         SPACE                                                          2489.000
           TRAN    SUBEXP,,,SS.TO,NOB.M                                 2490.000
         SPACE                                                          2491.000
*  DIDN'T FIND IT                                                       2492.000
         SPACE                                                          2493.000
           TRAN    LAMBDA,,SS.60                                        2494.000
         STATE                                                          2495.000
         SPACE                                                          2496.000
*  GET THE "TO" PATHNAME                                                2497.000
         SPACE                                                          2498.000
           TRAN    SUBEXP,,SS.70,SS.PATN2,NOB.M                         2499.000
         SPACE                                                          2500.000
*  ERROR -- HAVE "TO=" KEYWORD BUT DIDN'T FIND "TO" PATHNAME            2501.000
         SPACE                                                          2502.000
           ERRVAL  TOPATH                                               2503.000
SS.60    STATE                                                          2504.000
         SPACE                                                          2505.000
*  MUST BE AN OPTION KEYWORD                                            2506.000
         SPACE                                                          2507.000
           TRAN    SUBEXP,,,SS.OPT,NOB.M                                2508.000
SS.70    STATE                                                          2509.000
         SPACE                                                          2510.000
*  CHECK FOR AN OPTION KEYWORD                                          2511.000
         SPACE                                                          2512.000
           TRAN    TSTEXP,,SS.60,SS.KWSYN                               2513.000
         SPACE                                                          2514.000
*  NOT (OPTION) KEYWORD, MUST BE EOS OR COMMA                           2515.000
         SPACE                                                          2516.000
         SPACE                                                          2517.000
*  CHECK FOR END-OF-STRING (EOS)                                        2518.000
         SPACE                                                          2519.000
           TRAN    EOS,,EXIT                                            2520.000
         SPACE                                                          2521.000
*  CHECK FOR COMMA                                                      2522.000
         SPACE                                                          2523.000
           TRAN    COMMA,A.LOCAL,,NOB.M                                 2524.000
SS.SL30  STATE                                                          2525.000
         SPACE                                                          2526.000
*  CHECK FOR THE OPTIONAL "FROM=" KEYWORD                               2527.000
         SPACE                                                          2528.000
           TRAN    SUBEXP,,SS.SL00,SS.FROM,NOB.M+LMB.M                  2529.000
         SPACE                                                          2530.000
*  GO TO THE SPECIFIED STATE EVEN IF TRANSITION FAILS                   2531.000
         SPACE                                                          2532.000
         STATE                                                          2533.000
         SPACE     5                                                    2534.000
SS.OPT   STATE                     OPTIONS APPLICABLE FOR THIS COMMAND  2535.000
           TRAN    KEYWD,,,K.OPTS,NOB.M                                 2536.000
           TRAN    NOBLNK,,SS.TIMOP     COVERS THE 4 TIME OPTIONS       2537.000
         STATE                                                          2538.000
         SPACE     5                                                    2539.000
SS.VOL   STATE                                                          2540.000
           TRAN    KEYWD,,,K.VOLU,NOB.M                                 2541.000
         STATE                                                          2542.000
         SPACE     5                                                    2543.000
K.OPTS   EQU       $                         SAVE OPTIONS               2544.000
         KEYWRD    CONFIRM,,SS.CONF,3   CONFIRM-BOOL OPT !32B01 ECKW-34 2545.000
         KEYWRD    BRIEF,,SS.BRIE,3     BRIEF - BOOL OPT !32B01 ECKW-34 2546.000
         KEYWRD    NEWEST,,SS.NEWE,3    KEEP FILE CREATE !32B01 ECKW-34 2547.000
         KEYWRD    SEGNUM,,SS.SEGN,3    NONCONTIG. OPTI S851291A ECKW-342548.000
         KEYWRD    TRUNC_AU,,SS.TRUN,3  ENHANCED TRUNCATE       ETRN361 2549.000
*                                       MOST RECENTLY                   2550.000
         DATAW     0                                                    2551.000
*                                                                       2552.000
K.VOLU   KEYWRD    VOLUME,,SS.VOLU,3    VOLUME NAME    !32B01   ECKW-34 2553.000
         DATAW     0                         END OF LIST                2554.000
         SPACE     5                                                    2555.000
SS.VOLU  STATE                                                          2556.000
           TRAN    G'=',A.INIT,,,NOB.M                                  2557.000
         STATE                                                          2558.000
           TRAN    SUBEXP,AS.VOLU,EXIT,SS.STRNG,NOB.M                   2559.000
         STATE                                                          2560.000
         SPACE     5                                                    2561.000
AS.VOLU  EQU       $                                                    2562.000
*                                                                       2563.000
*        DONE PARSING VOLUME NAME ON COMMAND LINE.  THIS USED           2564.000
*        THE PROTOTYPE TABLE AND IT'S ASSOCIATED VARIABLES -- THESE     2565.000
*        WILL BE ZEROED.                                                2566.000
*                                                                       2567.000
         PUSH                      SAVE REGS                            2568.000
         SBM       B.VOLU,RESFLAGS INDICATE 'VOLU=' SPECIFIED  3114.V42 2569.000
         LA        R2,PROTOTYP     ADDRESS OF PROTOTYPE ENTRY           2570.000
         ADMW      R2,PROFIELD     OFFSET INTO TABLE           3114.V42 2571.000
*        HAVE SOURCE ADDRESS FOR COPYING VOLUME NAME TO LOCAL           2572.000
*        STORAGE AREA WITHIN THIS MODULE.                               2573.000
         LD        R4,0D,X2        1ST HALF VOLUME NAME                 2574.000
         LA        R3,VOLNAME      SAVE VOL. NAME IN MAIN MODULE        2575.000
         STD       R4,0D,X3        PLACE IN LOCAL STORAGE               2576.000
         LD        R4,1D,X2        2ND HALF VOLUME NAME                 2577.000
         STD       R4,1D,X3        PLANT 2ND HALF                       2578.000
*                                                                       2579.000
*        GO ZERO THE PROTOTYPE TABLE  --  RETURN WILL BE FROM           2580.000
*        THAT ROUTINE                                                   2581.000
*                                                                       2582.000
         TRR       R2,R3           ADDRESS OF VOLUME NAME      3114.V42 2583.000
         LW        R4,PROFIELD     OFFSET INTO TABLE           3114.V42 2584.000
         SRL       R4,2            ADJUST TO WORDS             3114.V42 2585.000
         ADI       R4,-NUMBZER2    NUMBER OF WORDS TO ZERO     3114.V42 2586.000
         BU        AS.LIST2                                    3114.V42 2587.000
         BOUND     1W                                                   2588.000
         TITLE     STATE TABLES & ACTION ROUTINES FOR RESTORE POSITION  2589.000
*++                                                                     2590.000
* S.RESPOS - STATE TABLES FOR THE RESTORE POSITION COMMAND              2591.000
*                                                                       2592.000
* COMMAND SYNTAX:                                                       2593.000
*                                                                       2594.000
* RESTORE POSITION  [ [TO=] PATHNAME ]                                  2595.000
*                                                                       2596.000
* OPTIONS:                                                              2597.000
*                                                                       2598.000
*        NONE                                                           2599.000
*                                                                       2600.000
*--                                                                     2601.000
         SPACE     2                                                    2602.000
S.RESPOS STATE                                                          2603.000
           TRAN    NOBLNK,A.MAKEP,S.RP2                                 2604.000
S.RP2      TRAN    LAMBDA,A.GLOBAL,S.RP3    PROPAGATE DEFAULT OPTIONS   2605.000
*!RP3      TRAN    LAMBDA,A.LOCAL           PROPAGATE DEFAULT   S851291A2606.000
S.RP3      TRAN    LAMBDA,A.LOCAL1          DEFAULT SEGNUM=0    S851291A2607.000
         STATE                                                          2608.000
           TRAN    EOS,,S.RP10                                          2609.000
           TRAN    LAMBDA                                               2610.000
         STATE                                                          2611.000
           TRAN    SUBEXP,,,SS.TO,NOB.M+LMB.M                           2612.000
         STATE                                                          2613.000
           TRAN    SUBEXP,,,SS.PATN2,NOB.M                              2614.000
S.RP10   STATE                                                          2615.000
           TRAN    LAMBDA,A.CMDPOS,EXIT                                 2616.000
         STATE                                                          2617.000
         SPACE     2                                                    2618.000
END      END                                                            2619.000
