*BUILD PATHNAME BLOCK ROUTINE                           HEADER  FUPPNB  0001.000
         M.PGM     FUP.PNB,MPX-32,3.6.1,00                              0002.000
         SPACE                                                          0003.000
         DSECT                                                          0004.000
         SPACE                                                          0005.000
*                                                                       0006.000
************************************************************************0007.000
*                                                                      *0008.000
*                    PROPRIETARY INFORMATION                           *0009.000
*                    -----------------------                           *0010.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0011.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0012.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0013.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0014.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0015.000
*                                                                      *0016.000
*                       RESTRICTED RIGHTS                              *0017.000
*                       -----------------                              *0018.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0019.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0020.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0021.000
*   252.227.7013                                                       *0022.000
************************************************************************0023.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0024.000
*     ALL RIGHTS RESERVED                                              *0025.000
************************************************************************0026.000
*                                                                       0027.000
*                                                                       0028.000
*    FUNCTIONAL DESCRIPTION:                                            0029.000
*                                                                       0030.000
*        THIS ROUTINE TAKES A FILE MANAGER PROTOTYPE TABLE ENTRY        0031.000
*        AND PRODUCES A PATHNAME BLOCK IN A GLOBAL BUFFER PNB.BUF       0032.000
*        THE MAXIMUM LENGTH OF A PATHNAME BLOCK IS 18W FOR SINGLE       0033.000
*        LEVEL DIRECTORIES AND THE BUFFER IS ASSUMED TO BE DOUBLE WORD  0034.000
*        ALIGNED, AS IS THE PROTOTYPE TABLE ENTRY.                      0035.000
*                                                                       0036.000
*                                                                       0037.000
*    EXTERNAL REFERENCES:                                               0038.000
*                                                                       0039.000
         EXT       PNB.BUF         TO BUILD PNB IN                      0040.000
*                                                                       0041.000
*    EXTERNAL DEFINITIONS                                               0042.000
*                                                                       0043.000
         DEF       BUILDPNB        ENTRY POINT                          0044.000
*                                                                       0045.000
* SYSTEM MACROS FOR REGISTER EQUATES                                    0046.000
*                                                                       0047.000
         M.REQS                                                         0048.000
*                                                                       0049.000
* LOCAL DATA DECLARATIONS                                               0050.000
*                                                                       0051.000
         BOUND     1D                                                   0052.000
VSYS     DATAD     C'SYSTEM  '     RESERVED FOR SYSTEM VOLUME           0053.000
SPACES   DATAD     C'        '     FOR !VOL/!FIL                        0054.000
SYST     DATAW     C'SYST'         FOR !VOL/!DIR ENTRIES                0055.000
WORK     DATAW     C'WORK'         FOR !VOL/!DIR ENTRIES                0056.000
ROOT     DATAW     C'ROOT'         FOR !DIR                             0057.000
DEST     RES       1W              HOLDS ADDRESS OF DESTINATION         0058.000
VHDR     DATAW     C'!VOL'         VOLUME FIELD HEADER                  0059.000
DHDR     DATAW     C'!DIR'         DIRECTORY FIELD HEADER               0060.000
FHDR     DATAW     C'!FIL'         FILE FIELD HEADER                    0061.000
         TITLE  BUILD PATHNAME BLOCK MODULE                             0062.000
         SPACE                                                          0063.000
         CSECT                                                          0064.000
         SPACE                                                          0065.000
*                                                                       0066.000
* INPUTS:                                                               0067.000
*        R2 = ADDRESS OF PROTOTYPE TABLE ENTRY                          0068.000
*                                                                       0069.000
* OUTPUTS:                                                              0070.000
*        PNB.BUF IS FILLED IN                                           0071.000
*        R7 = LENGTH IN BYTES OF THE PATHNAME BLOCK                     0072.000
*                                                                       0073.000
*                                                                       0074.000
* THE CODE STARTS HERE                                                  0075.000
*                                                                       0076.000
BUILDPNB EQU       $                                                    0077.000
         PUSH                      SAVE REGISTERS                       0078.000
         LA        R3,PNB.BUF      ADDRESS OF DESTINATION               0079.000
         SBR       R3,9            SET R3 AS .....                      0080.000
         SBR       R3,10           ..... INDEX REGISTER                 0081.000
         STW       R3,DEST         AND SAVE DESTINATION ADDRESS         0082.000
         ZR        R3              TO STEP THROUGH DESTINATION          0083.000
*                                                                       0084.000
* SET UP !VOL MANDATORY                                                 0085.000
*                                                                       0086.000
         LW        R6,VHDR                                              0087.000
         STW       R6,*DEST                                             0088.000
         ABR       R3,29           NEXT ENTRY                           0089.000
*                                                                       0090.000
* CHECK FOR VOLUME BEING 'SYSTEM          '                             0091.000
*                                                                       0092.000
         LD        R6,PROFVN.O,R2  FIRST 8 CHARS OF VOLUME              0093.000
         CAMD      R6,VSYS                                              0094.000
         BNE       PNB1            BR IF NOT SYSTEM VOLUME              0095.000
         LD        R6,PROFVN.O+1D,R2  SECOND 8 CHARS OF VOLUME          0096.000
         CAMD      R6,SPACES                                            0097.000
         BNE       PNB1            BR IF NOT SYSTEM VOLUME              0098.000
*                                                                       0099.000
         LW        R6,SYST         PUT 'SYST' ...                       0100.000
         STW       R6,*DEST        ... INTO DESTINATION BLOCK           0101.000
         ABR       R3,29           NEXT SLOT                            0102.000
         BU        PNB3            GO HANDLE !DIR                       0103.000
*                                                                       0104.000
* VOLUME IS NOT SYSTEM SO GO CHECK TO SEE IF IT WAS SPECIFIED           0105.000
* AT ALL.                                                               0106.000
* ALL 16 CHARS BEING SPACES INDICATES NOT SPECIFIED.                    0107.000
*                                                                       0108.000
PNB1     LD        R6,PROFVN.O,R2  FIRST 8 CHARS                        0109.000
         CAMD      R6,SPACES       ALL SPACES?                          0110.000
         BNE       PNB2            BR IF NOT ALL SPACES                 0111.000
*                                                                       0112.000
         LD        R4,PROFVN.O+1D,R2  SECOND 8 CHARS                    0113.000
         CAMD      R4,SPACES       ALL SPACES?                          0114.000
         BNE       PNB4            BR IF NOT ALL SPACES                 0115.000
*                                                                       0116.000
* VOLUME NAME WAS ALL SPACES (I.E. NOT SPECIFIED) SO PUT                0117.000
* 'WORK' INTO THE DESTINATION BLOCK FOR !VOL                            0118.000
*                                                                       0119.000
         LW        R6,WORK                                              0120.000
         STW       R6,*DEST                                             0121.000
         ABR       R3,29           NEXT SLOT                            0122.000
         BU        PNB3            GO HANDLE !DIR                       0123.000
*                                                                       0124.000
* VOLUME NAME WAS EXPLICIT SO PUT SPACES FOLLOWED BY THE                0125.000
* 16 CAHR VOLUME NAME INTO THE DESTINATION BLOCK.                       0126.000
*                                                                       0127.000
PNB2     LD        R4,PROFVN.O+1D,R2  GET SECOND 8 CHARS                0128.000
PNB4     LW        R0,SPACES                                            0129.000
         STW       R0,*DEST                                             0130.000
         ABR       R3,29           NEXT SLOT                            0131.000
         STD       R6,*DEST        FIRST 8 CHARS OF VOLUME NAME         0132.000
         ABR       R3,28           NEXT SLOT                            0133.000
         STD       R4,*DEST        SECOND 8 CHARS OF VOLUME NAME        0134.000
         ABR       R3,28           NEXT SLOT                            0135.000
*                                                                       0136.000
* HANDLE !DIR FIELD                                                     0137.000
*                                                                       0138.000
* THE CODE IS IDENTICAL TO THE !VOL CODE EXCEPT IN TWO                  0139.000
* RESPECTS:                                                             0140.000
*        (1) AN EXPLICIT DIRECTORY NAME OTHER THAN 'SYSTEM'             0141.000
*            CAUSES 'ROOT' TO BE ENTERED UNDER THE !DIR ENTRY.          0142.000
*        (2) MULTIPLE DIRECTORIES WILL HAVE TO BE HANDLED.              0143.000
*            WHEN THIS HAPPENS THE PROTOTYPE TABLE ENTRY MUST           0144.000
*            BE ALTERED TO COPE WITH THE STRUCTURE.                     0145.000
*                                                                       0146.000
PNB3     EQU       $                                                    0147.000
*                                                                       0148.000
* SET UP !DIR MANDATORY                                                 0149.000
*                                                                       0150.000
         LW        R6,DHDR                                              0151.000
         STW       R6,*DEST                                             0152.000
         ABR       R3,29           NEXT SLOT                            0153.000
*                                                                       0154.000
* CHECK FOR DIRECTORY BEING 'SYSTEM          '                          0155.000
*                                                                       0156.000
         LD        R6,PROFDN.O,R2  FIRST 8 CHARS OF DIRECTORY           0157.000
         CAMD      R6,VSYS                                              0158.000
         BNE       PNB5            BR IF NOT SYSTEM DIRECTORY           0159.000
         LD        R6,PROFDN.O+1D,R2  SECOND 8 CHARS OF DIRECTORY       0160.000
         CAMD      R6,SPACES                                            0161.000
         BNE       PNB5            BR IF NOT SYSTEM DIRECTORY           0162.000
*                                                                       0163.000
         LW        R6,SYST         PUT 'SYST' ...                       0164.000
         STW       R6,*DEST        ... INTO DESTINATION BLOCK           0165.000
         ABR       R3,29           NEXT SLOT                            0166.000
         BU        PNB7            GO HANDLE !FIL                       0167.000
*                                                                       0168.000
* DIRECTORY IS NOT SYSTEM SO GO CHECK TO SEE IF IT WAS SPECIFIED        0169.000
* AT ALL.                                                               0170.000
* ALL 16 CHARS BEING SPACES INDICATES NOT SPECIFIED.                    0171.000
*                                                                       0172.000
PNB5     LD        R6,PROFDN.O,R2  FIRST 8 CHARS                        0173.000
         CAMD      R6,SPACES       ALL SPACES?                          0174.000
         BNE       PNB6            BR IF NOT ALL SPACES                 0175.000
*                                                                       0176.000
         LD        R4,PROFDN.O+1D,R2  SECOND 8 CHARS                    0177.000
         CAMD      R4,SPACES       ALL SPACES?                          0178.000
         BNE       PNB8            BR IF NOT ALL SPACES                 0179.000
*                                                                       0180.000
* DIRECTORY NAME WAS ALL SPACES (I.E. NOT SPECIFIED) SO PUT             0181.000
* 'WORK' INTO THE DESTINATION BLOCK FOR !DIR                            0182.000
*                                                                       0183.000
         LW        R6,WORK                                              0184.000
         STW       R6,*DEST                                             0185.000
         ABR       R3,29           NEXT SLOT                            0186.000
         BU        PNB7            GO HANDLE !FIL                       0187.000
*                                                                       0188.000
* DIRECTORY NAME WAS EXPLICIT SO PUT 'ROOOT' FOLLOWED BY THE            0189.000
* 16 CHAR DIRECTORY NAME INTO THE DESTINATION BLOCK.                    0190.000
*                                                                       0191.000
PNB6     LD        R4,PROFDN.O+1D,R2  GET SECOND 8 CHARS                0192.000
PNB8     LW        R0,ROOT                                              0193.000
         STW       R0,*DEST                                             0194.000
         ABR       R3,29           NEXT SLOT                            0195.000
         STD       R6,*DEST        FIRST 8 CHARS OF DIRECTORY NAME      0196.000
         ABR       R3,28           NEXT SLOT                            0197.000
         STD       R4,*DEST        SECOND 8 CHARS OF DIRECTORY NAME     0198.000
         ABR       R3,28           NEXT SLOT                            0199.000
*                                                                       0200.000
* HANDLE !FIL                                                           0201.000
*                                                                       0202.000
* IF THE FIRST DOUBLE WORD OF THE FILE ENTRY IN THE PROTOTYPE           0203.000
* TABLE IS ZERO THEN THE FILENAME FIELD IS MISSING, AND NO              0204.000
* ENTRY AT ALL IS MADE.                                                 0205.000
* OTHERWISE '!FIL    FILENAMEXXXXXXXX' IS CREATED.                      0206.000
*                                                                       0207.000
PNB7     EQU       $                                                    0208.000
         LD        R6,PROFFN.O,R2  FIRST 8 CHARS                        0209.000
         BEQ       PNB9            EXIT IF NO FILENAME                  0210.000
*                                                                       0211.000
         LW        R5,FHDR         !FIL                                 0212.000
         STW       R5,*DEST        INTO DESTINATION BLOCK               0213.000
         ABR       R3,29           NEXT SLOT                            0214.000
*                                                                       0215.000
         LW        R5,SPACES       '    '                               0216.000
         STW       R5,*DEST        INTO DESTINATION SLOT                0217.000
         ABR       R3,29           NEXT SLOT                            0218.000
*                                                                       0219.000
         STD       R6,*DEST        FIRST 8 CHARS OF FILENAME            0220.000
         ABR       R3,28           NEXT SLOT                            0221.000
*                                                                       0222.000
         LD        R6,PROFFN.O+1D,R2  SECOND 8 CHARS OF FILENAME        0223.000
         STD       R6,*DEST        INTO DESTINATION BLOCK               0224.000
         ABR       R3,28           TOTAL LENGTH IN BYTES                0225.000
*                                                                       0226.000
* END OF PATHNAME FIELD, SET R7 TO CONTAIN THE LENGTH AND               0227.000
* ADDRESS OF THE PATHNAME, AND EXIT TO THE CALLER.                      0228.000
*                                                                       0229.000
PNB9     EQU       $                                                    0230.000
         TRR       R3,R6           LENGTH IN BYTES                      0231.000
         LA        R7,PNB.BUF      BUFFER ADDRESS                       0232.000
         SLL       R7,8                                                 0233.000
         SRLD      R6,8                                                 0234.000
         STW       R7,7W,R1        STORE IN SAVED R7                    0235.000
         POP                       RESTORE REGISTERS                    0236.000
         TRSW      R0                                                   0237.000
         END                                                            0238.000
