*DECK VALFN 
          IDENT  VALFN
          ENTRY  VALFN
*CALL,COMCMAC 
**        VALFN - VALIDATE FILE NAME. 
* 
*         VALFN CHECKS THE FILE NAME AND RETURNS A VALID NAME WITH
*         INVALID CHARACTERS CHANGED TO *0*.
* 
*         C = VALFN(FNAME)           (SYMPL CALL) 
* 
*         ENTRY  X1 = ADDR OF FILE NAME TO BE VALIDATED.
* 
*         EXIT   X6 = VALID FILE NAME.
*                INVALID CHARACTERS CHANGED TO *0*, 
*                1ST CHARACTER = *A-9* (NOS), 
*                                *A-Z* (NOS/BE).
* 
*         USES   A1, B1/2, X0/1/3/4/5/6/7.
  
  
 VALFN    SUBR                     ENTRY/EXIT 
          SB1    1
          SA1    X1                GET FILE NAME
          MX0    54 
          SX4    1R                BLANK CHARACTER VALUE
          SX5    B0                REPLACEMENT CHARACTER (INITIAL)
          SB2    6                 CHARACTER COUNT
          LX1    -12               POSITION NAME
          MX6    0
  
 VALFN1   LX1    -6                POSITION NEXT CHARACTER
          SB2    B2-B1             DECR CHAR COUNT
          BX3    -X0*X1            GET CHAR 
          IX7    X3-X4             TEST FOR BLANK 
          ZR     X3,VALFN2         IF BINARY-ZERO CHARACTER 
          ZR     X7,VALFN2         IF BLANK 
          SX7    X3-1R9-1          TEST FOR SPECIAL CHARACTER 
          SX5    1R0               REPLACEMENT CHARACTER
          NG     X7,VALFN3         IF VALID CHARACTER 
 VALFN2   BX3    X5                USE REPLACEMENT CHARACTER
 VALFN3   BX6    X6+X3             SAVE CHAR
          LX6    -6                SAVE CHARACTER 
          PL     B2,VALFN1         IF NOT DONE
  
 NOS      IFEQ   OS$NOS 
          NZ     X6,VALFNX         IF VALID NAME
          SX5    1R0               USE *0* FOR 1ST CHARACTER
 NOS      ELSE
          IX3    X3-X5             CHECK 1ST CHARACTER
          NG     X3,VALFNX         IF 1ST CHARACTER VALID 
          MX0    6
          SX5    1RI               USE *I* FOR 1ST CHARACTER
          BX6    -X0*X6            CLEAR 1ST CHARACTER
 NOS      ENDIF 
  
          LX5    -6                POSITION CHARACTER 
          IX6    X6+X5             REPLACE 1ST CHARACTER
          EQ     VALFNX            RETURN 
          END 
