*DECK FCSUVFN 
USETEXT TEXTFCS;
      FUNC FCSUVFN (PARBLK) B;
*CALL COPYRITE
# TITLE FCSUVFN - UTILITY TO VALIDATE NOS FILE NAME.                   #
  
      BEGIN                            # FCSUVFN                       #
  
# 
**    FCSUVFN - UTILITY TO VALIDATE NOS FILE NAME.
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE USING THE FILE NAME IN THE PARAMETER BLOCK 
*     VALIDATES THAT IT CONSTITUTES A VALID NOS FILE NAME.
* 
*     FUNC FCSUVFN (PARBLK) 
* 
*     ENTRY   PARBLK     = PARAMETER BLOCK. 
* 
*     EXIT    FCSUVFN    = TRUE IF VALID NOS FILE NAME. 
*             FCSUVFN    = FALSE IF NOT VALID FILE NAME.
*             PARAMNB    = DISPLAY CODE LOCAL FILE NAME BLANK FILLED. 
*             PARAMNZ    = DISPLAY CODE LOCAL FILE NAME ZERO FILLED.
*             PARAMLZ    = NUMBER OF CHARACTERS IN LOCAL FILE NAME. 
* 
*     METHOD  A VALID NOS FILE NAME CONSISTS OF 1-7 ALPHANUMERIC
*             CHARACTERS, OPTIONALLY FOLLOWED BY A COMMA OR SLASH AND 
*             DATA HANDLING PARAMETERS WHICH ARE VALIDATED BY *FTPI*. 
* 
# 
  
# 
****  FUNC FCSUVFN - XREF LIST
# 
      XREF
        BEGIN 
        FUNC CBTZ C(10);               # CONVERT BLANKS TO ZEROES      #
        PROC NETUCAC;                  # COPY AN ASCII CHARACTER       #
        PROC NETUCAD;                  # CONVERT ASCII TO DISPLAY CODE #
        END 
# 
****
# 
      ARRAY PARBLK [00:00] S(PARSIZ$);
        BEGIN 
        ITEM PAR$WORD    U(00,00,60);  # FULL WORD REFERENCE           #
        ITEM PAR$NB      C(B$,00,10);  # LOCAL FILE NAME BLANK FILLED  #
        ITEM PAR$NZ      C(Z$,00,10);  # LOCAL FILE NAME ZERO FILLED   #
        ITEM PAR$LZ      U(L$,00,60);  # LENGTH OF LOCAL FILE NAME     #
        ITEM PAR$SZ      U(S$,00,60);  # SIZE OF DATA IN PARAM BLOCK   #
        END 
  
      ITEM DIND          I;            # DESTINATION INDEX             #
      ITEM NUMC          I;            # NUMBER OF CHARACTERS IN LFN   #
      ITEM SIND          I;            # SOURCE INDEX                  #
      ITEM VALID         B;            # NOS FILE NAME VALID           #
  
      ARRAY THISCHAR [00:00] S(1);     # CURRENT CHARACTER             #
        BEGIN 
        ITEM THISCHR     U(00,00,08); 
        END 
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      VALID = TRUE;                    # RETURN TRUE BY DEFAULT        #
# 
*     VALIDATE EACH CHARACTER IS IN THE RANGE 0 THRU 9 OR A THRU Z. 
# 
      NUMC = 0;                        # INITIALIZE CHARACTERS IN LFN  #
      THISCHR = ASCISPACE;             # DEFAULT TO NOT , OR /         #
      FOR SIND = 0 STEP 1 
        WHILE (SIND LS PAR$SZ) AND
              (THISCHR NQ ASCICOMMA) AND
              (THISCHR NQ ASCISLASH) AND
              (VALID) DO
        BEGIN                          # UNTIL END OR , OR / OR INVALID#
        DIND = 0;                      # GET NEXT CHARACTER            #
        NETUCAC (PARBLK, SIND,
                 THISCHAR, DIND); 
        IF (THISCHR NQ ASCICOMMA) AND 
           (THISCHR NQ ASCISLASH) 
        THEN
          BEGIN                        # CURRENT CHARACTER NOT , OR /  #
          NUMC = NUMC + 1;             # INCREMENT NUMBER OF CHARACTERS#
          VALID = ((THISCHR GQ ASCIZERO AND THISCHR LQ ASCININE) OR 
                   (THISCHR GQ ASCIA AND THISCHR LQ ASCIZ) OR 
                   (THISCHR GQ ASCILA AND THISCHR LQ ASCILZ));
          END 
        END 
# 
*     VALIDATE NUMBER OF CHARACTERS IN LOCAL FILE NAME. 
# 
      IF (NUMC EQ 0) OR 
         (NUMC GR 7)
      THEN
        BEGIN                          # TOO MANY CHARACTERS           #
        VALID = FALSE;                 # RETURN FALSE TO CALLER        #
        END 
# 
*     CONVERT LOCAL FILE NAME TO DISPLAY CODE BLANK FILLED AND
*     ZERO FILLED.
# 
      IF VALID
      THEN
        BEGIN                          # VALID NOS FILE NAME           #
        PAR$NB = "          ";         # BLANK FILL NOS FILE NAME      #
        DIND   = 0;                    # INITIALIZE INDEX              #
        P<TBUF> = LOC(PAR$NB);
        NETUCAD (PARBLK, 0, NUMC, 
                 TBUF, DIND);          # CONVERT TO DISPLAY CODE       #
        PAR$NZ = CBTZ (PAR$NB);        # CONVERT BLANKS TO ZEROES      #
        PAR$LZ = NUMC;                 # NUMBER OF CHARACTERS IN LFN   #
        END 
  
      FCSUVFN = VALID;                 # RETURN RESULT TO CALLER       #
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSUVFN                       #
  
      TERM
