*NAME MATCHING ROUTINE                                  HEADER  FUPMAT  0001.000
         M.PGM     FUP.MATCH,MPX-32,3.6.1,00                            0002.000
         SPACE                                                          0003.000
*                                                                       0004.000
*    RESTRICTED RIGHTS LEGEND:                                          0005.000
*                                                                       0006.000
*        USE, DUPLICATION, OR DISCLOSURE IS SUBJECT TO THE RESTRICTIONS 0007.000
*        STATED IN GOULD INC., COMPUTER SYSTEMS DIVISION(FORM NO. 1218) 0008.000
*        FOR GOVERNMENT CUSTOMERS, DAR 7-104. 9A.                       0009.000
*                                                                       0010.000
*                                                                       0011.000
*   EXTERNAL REFERENCES:                                                0012.000
*                                                                       0013.000
         EXT       STACKPTR                                             0014.000
         EXT       ADR.MASK                                             0015.000
         EXT       BLANKS                                               0016.000
         EXT       FLAGBITS                                    82-1402  0017.000
         SPACE     2                                                    0018.000
*                                                                       0019.000
*   EXTERNAL DEFINITIONS:                                               0020.000
*                                                                       0021.000
         DEF       REN.BUF         RENAME NAME BUFFER                   0022.000
         DEF       REN.NAME        RENAME NAME SUBROUTINE               0023.000
         DEF       MATCHNAM        ROUTINE ENTRY POINT                  0024.000
         SPACE                                                          0025.000
*                                                                       0026.000
*    SYSTEM MACRO CALLS FOR DEFINITIONS AND EQUATES                     0027.000
*                                                                       0028.000
         M.REQS                                                         0029.000
         SPACE     2                                                    0030.000
*                                                                       0031.000
* LOCAL DEFINITIONS                                                     0032.000
*                                                                       0033.000
         SPACE                                                          0034.000
         BOUND     1D                                                   0035.000
REN.BUF  REZ       2D              RENAME NAME BUFFER                   0036.000
CCFLAG   DATAW     1W              CONDITION CODE FLAGS                 0037.000
WLDSTR.C EQU       G'*'            CHARACTER INDICATING WILD STRING     0038.000
WLDCHR.C EQU       G'?'            CHARACTER INDICATING WILD CHAR       0039.000
         TITLE     MATCHNAM - MATCH  NAME AGAINST PROTOTYPE             0040.000
         SPACE                                                          0041.000
         CSECT                                                          0042.000
         SPACE                                                          0043.000
*++                                                                     0044.000
*     FUP.MATCH - MATCH INPUT NAME AGAINST PROTOTYPE                    0045.000
*                                                                       0046.000
*     THIS ROUTINE IS CALLED TO CHECK IF THE INPUT FILENAME             0047.000
*     MATCHES THE PROTOTYPE NAME. THE PROTOTYPE MAY CONTAIN             0048.000
*     WILD CHARACTER OR WILD STRING INDICATORS. WILD CHARACTER          0049.000
*     WILL MATCH ANY SPECIFIC CHARACTER WHILE THE WILD STRING           0050.000
*     WILL MATCH ANY STRING INCLUDING THE NULL STRING. WHEN             0051.000
*     A WILD STRING IS ENCOUNTERED, SUCCESSIVE ATTEMPTS ARE             0052.000
*     MADE TO MATCH THE INPUT, SKIPPING ONE CHARACTER AT TIME           0053.000
*     UNTIL THE INPUT IS EXHAUSTED OR A MATCH IS FOUND                  0054.000
*                                                                       0055.000
* INPUTS:                                                               0056.000
*     R1 = STACK POINTER                                                0057.000
*     R2 = FILENAME ADDRESS TO CHECK FOR MATCH                          0058.000
*     R3 = PROTOTYPE NAME ADDRESS FOR MATCH                             0059.000
*     R4 = LENGTH OF FILENAME STRING                                    0060.000
*     R5 = LENGTH OF PROTOTYPE NAME                                     0061.000
*     R6 = NON-ZERO IF WILDCARDING IS DISABLED                          0062.000
*                                                                       0063.000
* OUTPUTS:                                                              0064.000
*                                                                       0065.000
*     ALL REGISTERS PRESERVED                                           0066.000
*     CC1 = 0 IF NAME MATCH FOUND, 1 IF NO MATCH                        0067.000
*     CC2 = 0 IF EXACT MATCH, 1 IF MATCH ON WILD CARD BASES             0068.000
*     CC3 = CC4 = 0                                                     0069.000
*--                                                                     0070.000
         SPACE                                                          0071.000
MATCHNAM EQU       $               MATCH NAME AGAINST PROTOTYPE         0072.000
         ANMW      R0,ADR.MASK     ISOLATE PURE RETURN ADDRESS          0073.000
         PUSH                      SAVE REGS                            0074.000
MN.010   LB        R7,0B,X3        GET NEXT CHARACTER FROM PROTOTYPE    0075.000
         TRR       R6,R6           WILDCARDING DISABLED ?               0076.000
         BNZ       MN.060          BRANCH IF SO                         0077.000
MN.020   CI        R7,WLDSTR.C     IS THIS WILD STRING INDICATION       0078.000
         BNE       MN.040          BR IF NOT WILD STRING                0079.000
         SBM       CC2,0W,X1       SET RETURN FLAG FOR WILD CHARS USED  0080.000
         ADI       R3,1            ADJUST POINTER OVER CHARACTER        0081.000
         SUI       R5,1            AND ADJUST COUNT FOR THE CHAR        0082.000
         BLE       FOUND           BR IF NO MORE IN PROTOTYPE-MATCHED   0083.000
MN.030   BL        MATCHNAM        RESURSE FOR MATCH OF REMAINDER       0084.000
         BNS       FOUND           IF IT MATCH - GREAT - RETURN NEWS    0085.000
         ADI       R2,1            ADVANCE FILENAME STRING TO NEXT CHAR 0086.000
         SUI       R4,1            ADJUST LENGTH OF STRING              0087.000
         BGT       MN.030          BR IF MORE TO CHECK FOR MATCH        0088.000
         BU        NOTFOUND        RETURN SAD NEWS-THIS NAME NO GOOD    0089.000
MN.040   CI        R7,WLDCHR.C     IS THIS WILD SINGLE CHARACTER        0090.000
         BNE       MN.060          BR IF NO - CHECK FOR REAL MATCH      0091.000
         SBM       CC2,0W,X1       SET FLAG FOR WILD CHARS USED         0092.000
         BU        MN.070          BR AROUND CK - THIS ALWAYS MATCHES   0093.000
MN.060   CAMB      R7,0B,X2        PROTOTYPE MATCH INPUT CHAR           0094.000
         BNE       NOTFOUND        BR IF NO MATCH ON THIS NAME          0095.000
MN.070   ABR       R2,31           INCREMENT INPUT FILE NAME            0096.000
         ABR       R3,31           ADVANCE PROTOTYPE POINTER            0097.000
         SUI       R4,1            ADJUST LENGTH OF INPUT NAME          0098.000
         BLE       MN.080          BR IF THIS NAME EXHAUSTED            0099.000
         SUI       R5,1            NOW ADJUST PROTOTYPE LENGTH          0100.000
         BNE       MN.010          BR IF BOTH NAMES HAVE CHARACTERS     0101.000
         BU        NOTFOUND        INPUT HAS CHARS BUT NONE IN PROTOTYPE0102.000
         SPACE                                                          0103.000
*                                                                       0104.000
*  INPUT NAME IS EXHAUSTED - IF PROTOTYPE IS ALSO WE HAVE A MATCH       0105.000
*                                                                       0106.000
         SPACE                                                          0107.000
MN.080   SUI       R5,1            ADJUST LENGTH OF PROTOTYPE           0108.000
         BLE       FOUND           BR IF FILENAME MATCHES PROTOTYPE     0109.000
         SPACE                                                          0110.000
*                                                                       0111.000
*  CHECK FOR CASE OF TRAILING WILD STRING ON THE PROTOTYPE NAME         0112.000
*  AND IN THIS CASE THE WILD STRING REPRESENTS A NULL STRING            0113.000
*                                                                       0114.000
         SPACE                                                          0115.000
         CI        R5,1            A TRAILING WILD STRING WOULD MEAN    0116.000
*  ONE CHARACTER REMAINING IN THE PROTOTYPE NAME                        0117.000
         BNE       NOTFOUND        GO FOR TRAILING WILD STRING NOT      0118.000
*                                  POSSIBLE                             0119.000
         LB        R7,0B,X3        GET LAST SIGNIFICANT CHARACTER IN    0120.000
*                                  THE PROTOTYPE NAME                   0121.000
         CI        R7,WLDSTR.C     IS THE CHARACTER THE WILD STRING ??? 0122.000
         BNE       NOTFOUND        GO FOR NOT THE WILD STRING           0123.000
         SBM       CC2,0W,X1       SET FLAG FOR WILD CHARACTERS USED    0124.000
         BU        FOUND                                                0125.000
         SPACE                                                          0126.000
NOTFOUND SBM       CC1,0W,X1       SET RETURN CONDITION FOR NO MATCH    0127.000
         POP                       RESTORE REGS                82-1402  0128.000
         TRSW      R0              RETURN TO CALLER            82-1402  0129.000
*                                                                       0130.000
FOUND    POP                       RESTORE REGS                         0131.000
         SBM       B.NOMAT,FLAGBITS INDICATE MATCH FOUND       82-1402  0132.000
         TRSW      R0              GO BACK TO CALLER                    0133.000
         TITLE     REN.NAME - RENAME NAME SUBROUTINE                    0134.000
*                                                                       0135.000
*        REN.NAME - RENAME NAME SUBROUTINE                              0136.000
*                                                                       0137.000
*        THIS SUBROUTINE RENAMES A NAME THAT WAS PAST TO IT BASED       0138.000
*        ON THE PROTOTYPE NAME PAST TO IT. THE NEW NAME IS PLACED       0139.000
*        INTO THE BUFFER "REN.BUF".                                     0140.000
*                                                                       0141.000
* INPUTS:                                                               0142.000
*        R1        STACK POINTER                                        0143.000
*        R2        ADDRESS OF NAME                                      0144.000
*        R3        ADDRESS OF PROTOTYPE NAME                            0145.000
*        R4        LENGTH OF NAME                                       0146.000
*        R5        LENGTH OF PROTOTYPE NAME                             0147.000
*        R6        NON-ZERO IF WILDCARDING IS DISABLED                  0148.000
*                                                                       0149.000
* OUTPUTS:                                                              0150.000
*        REN.BUF   CONTAINS THE RENAME NAME                             0151.000
*        CC1       SET IF RENAME NAME > 16 CHARACTERS                   0152.000
*        CC2       SET IF WILDCARDS USED IN RENAMEING                   0153.000
*        CC3       SET IF INVALID WILDCARD USED (IE. **)                0154.000
*                                                                       0155.000
         SPACE     2                                                    0156.000
REN.NAME EQU       $                                                    0157.000
         ANMW      R0,ADR.MASK     CLEAR CONDITION CODES                0158.000
         PUSH                      SAVE REGISTERS                       0159.000
         PUSHSTP                   SAVE STACK POINTER                   0160.000
         LD        R0,BLANKS       DOUBLE WORD OF BLANKS                0161.000
         STD       R0,REN.BUF      INITIALIZE THE DERIVED NAME BUFFER   0162.000
         STD       R0,REN.BUF+1D   INITIALIZE THE DERIVED NAME BUFFER   0163.000
         ZR        R1              INIT. REN.BUF INDEX                  0164.000
         STW       R1,CCFLAG       INIT. CCFLAG                         0165.000
         TRN       R4,R4           NEGATE NAME LENGTH                   0166.000
         TRN       R5,R5           NEGATE PROTOTYPE NAME LENGTH         0167.000
*                                                                       0168.000
REN.N1   CI        R1,17B          IS RENAME NAME > 16 CHARACTERS ?     0169.000
         BGE       REN.N50         YES, BRANCH (RENAME NAME TO BIG)     0170.000
         LB        R7,0B,R3        GET PROTO CHAR                       0171.000
         TRR       R6,R6           IS WILDCARDS DISABLED?               0172.000
         BNZ       REN.N20         YES, BRANCH (STRAIGHT CHAR REPLACE)  0173.000
         CI        R7,WLDCHR.C     IS PROTO CHAR = "?" ?                0174.000
         BEQ       REN.N10         YES, BRANCH (PROCESS "?")            0175.000
         CI        R7,WLDSTR.C     IS PROTO CHAR = "*" ?                0176.000
         BEQ       REN.N30         YES, BRANCH (PROCESS "*")            0177.000
         BU        REN.N20         PROCESS "STANDARD" CHARACTER         0178.000
         SPACE     2                                                    0179.000
*                                                                       0180.000
* "?" CHARACTER PROCESSING                                              0181.000
*                                                                       0182.000
REN.N10  TRR       R4,R4           ANY CHARS LEFT IN NAME ??            0183.000
         BNN       REN.N60         NO, BRANCH (INVALID WILDCARD)        0184.000
         SBM       2,CCFLAG        SET WILDCARD USED FLAG               0185.000
         LB        R7,0B,R2        GET NAME CHARACTER                   0186.000
*                                                                       0187.000
* STRAIGHT CHARACTER REPLACEMENT PROCESSING                             0188.000
*                                                                       0189.000
REN.N20  STB       R7,REN.BUF,R1   PUT CHAR INTO RENAME BUFFER          0190.000
         ABR       R1,31           INCREMENT REN.BUF INDEX              0191.000
         ABR       R2,31           UPDATE ADDR. OF CHAR IN NAME         0192.000
         ABR       R4,31           UPDATE CHARS LEFT IN NAME            0193.000
         BU        REN.N40         GOTO UPDATE FOR NEXT PROTO CHAR.     0194.000
*                                                                       0195.000
* "*" CHARACTER PROCESSING                                              0196.000
*                                                                       0197.000
REN.N30  TRR       R4,R4           ANY CHARS LEFT IN NAME ?             0198.000
         BEQ       REN.N52         EXACTLY NONE LEFT??         V.6      0199.000
         BNN       REN.N60         NO, BRANCH (INVALID WILDCARD)        0200.000
         SBM       2,CCFLAG        SET WILDCARD USED FLAG               0201.000
REN.N31  LB        R7,0B,R2        GET CHAR FROM NAME                   0202.000
         STB       R7,REN.BUF,R1   PUT CHAR INTO RENAME BUFFER          0203.000
         ABR       R1,31           INCREMENT REN.BUF INDEX              0204.000
         ABR       R2,31           UPDATE ADDR. OF CHAR IN NAME         0205.000
         BIB       R4,REN.N31      IF MORE CHARS IN NAME THEN LOOP      0206.000
*                                                                       0207.000
* UPDATE STUFF FOR NEXT PROTOTYPE CHARACTER                             0208.000
*                                                                       0209.000
REN.N40  ABR       R3,31           UPDATE ADDR. OF CHAR IN PROTO NAME   0210.000
         BIB       R5,REN.N1       IF MORE CHARS IN PROTO THEN LOOP     0211.000
*                                                                       0212.000
REN.N51  POPSTP                    RESTORE STACK POINTER                0213.000
         POP                       RESTORE REGISTERS                    0214.000
         ORMW      R0,CCFLAG       SET CONDITION CODES                  0215.000
         TRSW      R0              RETURN                               0216.000
         SPACE     2                                                    0217.000
*                                                                       0218.000
* RENAME NAME > 16 CHARACTERS PROCESSING                                0219.000
*                                                                       0220.000
REN.N50  SBM       1,CCFLAG        SET CONDITION CODE 1                 0221.000
         BU        REN.N51         PREPARE FOR RETURN                   0222.000
         SPACE     2                                                    0223.000
*                                                                       0224.000
*                                                                       0225.000
REN.N52  EQU       $                                           V.6      0226.000
         CI        R5,-1           HAS PROTO GOT 1 CHAR LEFT   V.6      0227.000
         BEQ       REN.N40         YES,SUBSTITUTE NULL STRING  V.6      0228.000
*                                                                       0229.000
* INVALID WILDCARD                                                      0230.000
*                                                                       0231.000
REN.N60  SBM       3,CCFLAG        SET CONDITION CODE 3                 0232.000
         BU        REN.N51         PREPARE FOR RETURN                   0233.000
         SPACE     2                                                    0234.000
END      END                                                            0235.000
