*DECK DB$SRPF                                                            SRPF 
USETEXT MDBCMTX 
USETEXT MD10CTX 
USETEXT SCANTXT 
      PROC DB$SRPF;                                                      SRPF 
 #                                                                       SRPF 
  *   DB$SRPF - PROCS TO STORE PF INFORMATION    PAGE  1
  *   J. JAN JANIK                               DATE  11/19/75          SRPF 
  *   R. M. PAPPE (MDU 2.3 ENHANCEMENTS)
  DC  PURPOSE                                                            SRPF 
                                                                         SRPF 
      VALIDATE PERMANENT FILE INFORMATION AND STORE IT IN THE 
      APPROPRIATE CELLS IN COMMON.
                                                                         SRPF 
  DC  ENTRY CONDITIONS                                                   SRPF 
                                                                         SRPF 
      SEE DESCRIPTION FOR EACH ROUTINE. 
                                                                         SRPF 
  DC  EXIT CONDITIONS                                                    SRPF 
                                                                         SRPF 
      SEE INDIVIDUAL ROUTINES FOR EXIT CONDITIONS.
                                                                         SRPF 
  DC  CALLING ROUTINES                                                   SRPF 
                                                                         SRPF 
      DB$STD - SYNTAX TABLE DRIVER                                       SRPF 
                                                                         SRPF 
  DC  CALLED ROUTINES                                                    SRPF 
                                                                         SRPF 
      DB$CBIN - CONVERT DISPLAY CODE TO BINARY
      DB$CKLT - VALIDATE LITERAL (LENGTH LQ 7 AND NO SPECIALS)
      DB$CKVS - VALIDATE VOLUME SERIAL NUMBER 
      DB$CPFN - VALIDATE PFN
      DB$MABT - ABORT THE MASTER DIRECTORY RUN
      DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
      DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
                                                                         SRPF 
  DC  NON-LOCAL VARIABLES MODIFIED
  
      CURFILTYP - CELL IN (1,0) COMMON TO HOLD CURRENT FILE TYPE
      MDPFINFO  - ARRAY TO HOLD THE PERMANENT FILE INFORMATION FOR THE
                  CURRENT FILE TYPE 
 #                                                                       SRPF 
      BEGIN                                                              SRPF 
      XDEF                                                               SRPF 
        BEGIN                                                            SRPF 
      PROC DB$SR28;          # VERIFY NUMBER OF PASSWORDS              #
      PROC DB$SR31;          # STORE CURRENT FILE TYPE (FROM DB$CP2)   #
      PROC DB$SR32;          # STORE PERMANENT FILE NAME               #
      PROC DB$SR33;          # STORE USER NUMBER/ID                    #
      PROC DB$SR34;          # STORE PASSWORD                          #
      PROC DB$SR35;          # STORE PACK/SET/FAMILY NAME              #
      PROC DB$SR36;          # STORE VOLUME SERIAL NUMBER              #
      PROC DB$SR40;          # STORE DEVICE TYPE                       #
        END                                                              SRPF 
                                                                         SRPF 
                                                                         SRPF 
      XREF                                                               SRPF 
        BEGIN                                                            SRPF 
                                                                         SRPF 
        PROC DB$DIAG;              # ISSUE DIAGNOSTIC MESSAGES         #
        PROC DB$MABT; 
        PROC DB$NO;                                                      SRPF 
        PROC DB$YES;                                                     SRPF 
                                                                         SRPF 
        FUNC DB$CBIN U; 
        FUNC DB$CKLT B;                                                  SRPF 
        FUNC DB$CKVS B; 
        FUNC DB$CPFN B; 
        END                                                              SRPF 
  
#     G L O B A L    A R R A Y   F O R    D B $ S R P F                #
  
      BASED ARRAY PWORD [0:4] S(1);  # USED FOR PASSWORDS              #
        BEGIN 
        ITEM PASSWORD;
        END 
  
      CONTROL NOLIST;        # SUPPRESS LISTING OF MDABTDCLS           #
*CALL MDABTDCLS 
      CONTROL LIST; 
      CONTROL EJECT;                                                     SRPF 
  
      PROC DB$SR28; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR28 - VERIFY NUMBER OF PASSWORDS
* *   J. G. SERPA                                DATE  07/26/80 
* *   R. M. PAPPE                                DATE  09/08/80 
* 
* DC  PURPOSE 
* 
*     VERIFY THAT THE NUMBER OF PASSWORDS SPECIFIED IS NOT GREATER
*     THAN 5. 
* 
* DC  ENTRY CONDITIONS
* 
*     PWCOUNT - CONTAINS THE NUMBER OF PASSWORDS
* 
* DC  EXIT CONDITIONS 
* 
*     RETURN IS TO DB$NO IF THE NUMBER OF PASSWORDS SPECIFIED 
*     IS GREATER THAN FIVE, OTHERWISE, RETURN IS TO DB$YES. 
* 
* DC  CALLING ROUTINES
* 
*     PW - ANALYZE PW SUBENTRY (WITHIN DB$SNTX -SYNGEN-)
* 
* DC  CALLED ROUTINES 
* 
*     DB$NO  - SYNTAX TABLE DRIVER -NO- RETURN
*     DB$YES - SYNTAX TABLE DRIVER -YES- RETURN 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     IF THE NUMBER OF PASSWORDS SPECIFIED EXCEEDS 5, RETURN TO DB$NO.
*     OTHERWISE, RETURN TO DB$YES.
* 
 #
  
      IF PWCOUNT GQ 5              # IF NUMBER OF PASSWORDS EXCEEDS 5  #
      THEN
        BEGIN 
        DB$NO;                     # EXIT                              #
  
        END 
      DB$YES; 
  
      END 
      CONTROL EJECT;
      PROC DB$SR31; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR31 - STORE CURRENT FILE TYPE 
* *   J. G. SERPA                                DATE  07/25/80 
* *   R. M. PAPPE                                DATE  09/08/80 
* 
* DC  PURPOSE 
* 
*     STORE THE CURRENT FILE TYPE.
* 
* DC  ENTRY CONDITIONS
* 
*     DB$CP2 CONTAINS THE CURRENT FILE TYPE.
* 
* DC  EXIT CONDITIONS 
* 
*     DB$CP2 HAS BEEN STORED. IF ITS VALUE IS ILLEGAL, DB$MABT IS CALLED
*     TO ABORT DBMSTRD. IF THE FILE TYPE WAS ALREADY ENCOUNTERED IN 
*     THE INPUT STREAM, RETURN IS TO DB$NO. OTHERWISE, THE PASSWORD 
*     COUNTER (PWCOUNT) IN (1,0) COMMON IS INITIALIZED AND THE
*     PASSWORD ARRAY (PWORD) IS SET TO THE LOCATION OF THE FIRST
*     PASSWORD FOR ROUTINE DB$SR34. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$DIAG - ISSUE DIAGNOSTIC MESSAGES 
*     DB$MABT - ABORT DBMSTRD 
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     CURFILTYP - CELL IN (1,0) COMMON TO HOLD CURRENT FILE TYPE
*     PWCOUNT - PASSWORD COUNT IN (0,0) COMMON IS SET TO ZERO 
* 
* DC  DESCRIPTION 
* 
*     STORE DB$CP2 INTO CURFILTYP. CHECK IF CURFILTYP CONTAINS A LEGAL
*     VALUE. IF ITS VALUE IS NOT BETWEEN S"AREA" AND S"TRF", INCLUSIVE, 
*     DB$MABT IS CALLED TO ABORT THE MDU. OTHERWISE, CHECK IF THIS FILE 
*     TYPE HAS ALREADY BEEN SPECIFIED. IF IT HAS, EXIT TO DB$NO, OTHER- 
*     WISE SET THE PASSWORD ARRAY TO POINT TO THE PASSWORDS OF THE
*     CURRENT FILE TYPE, SET PWCOUNT TO ZERO, AND EXIT TO DB$YES. 
* 
 #
  
      CURFILTYP = DB$CP2; 
      IF CURFILTYP LS S"AREA" 
        OR CURFILTYP GR S"TRF"
      THEN
        BEGIN 
        DB$MABT(DFBADFILTYP); 
  
        END 
  
# 
*     CHECK IF THIS FILE TYPE WAS ALREADY SPECIFIED 
# 
      IF MDPFINAME[CURFILTYP] NQ 0
      THEN
        BEGIN 
        IF CURFILTYP EQ S"INDEX"
        THEN
          BEGIN 
          DB$DIAG(144,AREANAM);    # INDEX FILE ALREADY SPECIFIED      #
          END                      # FOR AREA                          #
        ELSE
          BEGIN 
          DB$DIAG(108,CURWORDC[0]);  # CURRENT FILE ALREADY SPECIFIED  #
          END                        # FOR SCHEMA                      #
      END 
  
  
#     SET PASSWORD ARRAY TO LOCATION OF FIRST PASSWORD FOR DB$SR34     #
  
      PWCOUNT = 0;
      P<PWORD> = LOC(MDPFPW1[CURFILTYP]); 
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$SR32; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR32 - VALIDATE AND STORE PERMANENT
* *             FILE NAME 
* *   J. G. SERPA                                DATE  07/25/80 
* *   R. M. PAPPE                                DATE  08/08/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE AND STORE THE PERMANENT FILE NAME OF THE CURRENT FILE
*     TYPE. 
* 
* DC  ENTRY CONDITIONS
* 
*     DB$CLNG CONTAINS THE LENGTH OF THE NAME IN CHARACTERS 
*     CURWORD CONTAINS THE PERMANENT FILE NAME. 
* 
* DC  EXIT CONDITIONS 
* 
*     THE PERMANENT FILE NAME IS VALIDATED BY DB$CPFN.
*     IF THE PERMANENT FILE NAME IS INVALID (DB$CPF=FALSE), RETURN
*     IS TO DB$NO. IF THE FILETYPE IS EITHER JOURNAL LOG OR 
*     TRANSACTION AND IS GREATER THAN 6 CHARACTERS LONG,
*     DIAGNOSTIC 162 IS ISSUED AND RETURN IS TO DB$YES. 
*     OTHERWISE, THE PERMANENT FILE NAME IS STORED IN 
*     MDPFINAME (WITHIN MDPFINFO) AND RETURN IS TO DB$YES.
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$CPFN - VALIDATE PERMANENT FILE NAME
*     DB$DIAG - ISSUE DIAGNOSTIC MESSAGES 
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
*     DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDPFINAME - WITHIN MDPFINFO IN (1,0) COMMON 
* 
* DC  DESCRIPTION 
* 
*     CALL DB$CPFN TO VERIFY THAT THE NAME IS LEGAL. IF IT IS NOT LEGAL 
*     RETURN TO DB$NO.
*     IF THE FILE TYPE IS JOURNAL OR TRANSACTION, ENSURE THAT IT IS 
*     EXACTLY 6 CHARACTERS LONG. IF IT IS NOT, ISSUE DIAGNOSTIC 
*     162 AND RETURN TO DB$YES. 
*     STORE THE PERMANENT FILE NAME  IN THE APPROPRIATE ENTRY WITHIN
*     MDPFINFO, AND RETURN TO DB$YES. 
* 
 #
  
      IF NOT DB$CPFN
      THEN
        BEGIN 
        DB$NO;               # NAME IS ILLEGAL                         #
  
        END 
      IF (CURFILTYP EQ S"JLF" 
        OR CURFILTYP EQ S"TRF") 
        AND DB$CLNG NQ 6
      THEN
        BEGIN 
        DB$DIAG(162,CURWORD[0]);
        DB$YES; 
  
        END 
  
      C<0,DB$CLNG>MDPFINAME[CURFILTYP] = C<0,DB$CLNG>CURWORD[0];
      DB$YES; 
  
      END 
      CONTROL EJECT;
      PROC DB$SR33; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR33 - VALIDATE AND STORE UN/ID
* *   J. G. SERPA                                DATE  07/25/80 
* *   R. M. PAPPE                                DATE  09/10/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE AND STORE UN/ID OF THE CURRENT FILE TYPE.
* 
* DC  ENTRY CONDITIONS
* 
*     CURWORD CONTAINS THE UN/ID. 
*     DB$CLNG CONTAINS THE LENGTH IN CHARACTERS OF UN/ID. 
* 
* DC  EXIT CONDITIONS 
* 
*     DB$CKLT IS CALLED TO VALIDATE THE UN/ID. IF THE LITERAL IS
*     VALID (DB$CKLT=TRUE), IT IS STORED IN MDPFUNID AND RETURN 
*     IS TO DB$YES. IF THE LITERAL IS INVALID RETURN IS TO DB$NO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$CKLT - VALIDATE LITERAL
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
*     DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDPFUNID - WITHIN MDPFINFO IN (1,0) COMMON
* 
* DC  DESCRIPTION 
* 
*     CALL DB$CKLT TO VALIDATE THE USER NUMBER OR ID. 
*     IF IT IS VALID, STORE THE UN/ID IN THE APPROPRIATE ENTRY
*     WITHIN MDPFINFO AND RETURN TO DB$YES. OTHERWISE, RETURN 
*     TO DB$NO. 
* 
 #
  
      IF DB$CKLT                   # VALIDATE LENGTH AND CHARACTERS    #
      THEN
        BEGIN 
        C<0,DB$CLNG>MDPFUNID[CURFILTYP] = C<0,DB$CLNG>CURWORD[0]; 
        DB$YES; 
  
        END 
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$SR34; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR34 - VALIDATE AND STORE A PASSWORD 
* *   J. G. SERPA                                DATE  07/25/80 
* *   R. M. PAPPE                                DATE  9/10/80
* 
* DC  PURPOSE 
* 
*     VALIDATE AND STORE A PASSWORD FOR CURRENT FILE TYPE.
* 
* DC  ENTRY CONDITIONS
* 
*     CURWORD CONTAINS THE CURRENT PASSWORD.
*     PWCOUNT CONTAINS THE NUMBER OF PASSWORDS. 
* 
* DC  EXIT CONDITIONS 
* 
*     THE PASSWORD HAS BEEN VALIDATED AND STORED IN THE APPROPRIATE 
*     ENTRY WITHIN MDPFINFO, AND THE PASSWORD COUNTER (PWCOUNT) IS
*     INCREMENTED BY 1. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$CKLT - VALIDATE LITERAL
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
*     DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDPFPW1, MDPFPW2, MDPFPW3, MDPFPW4, AND MDPFPW5 - WITHIN MDPFINFO 
*     AND PWCOUNT IN (1,0) COMMON.
* 
* DC  DESCRIPTION 
* 
*     DB$CKLT IS CALLED TO VALIDATE THE PASSWORD. 
*     IF IT IS VALID, STORE THE PASSWORD IN THE APPROPRIATE ENTRY 
*     WITHIN MDPFINFO, INCREMENT PWCOUNT AND EXIT TO DB$YES, OTHERWISE
*     EXIT TO DB$NO.
* 
 #
  
      IF DB$CKLT                   # VALIDATE LENGTH AND CHARACTERS    #
      THEN
        BEGIN 
        C<0,DB$CLNG>PASSWORD[PWCOUNT] = C<0,DB$CLNG>CURWORD[0]; 
        PWCOUNT = PWCOUNT + 1;
        DB$YES; 
  
        END 
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$SR35; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR35 - VALIDATE AND STORE
* *             FAMILY/SET/PACK NAME
* *   J. G. SERPA                                DATE  07/25/80 
* *   R. M. PAPPE                                DATE  09/10/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE AND STORE THE FAMILY/SET/PACK NAME.
* 
* DC  ENTRY CONDITIONS
* 
*     CURWORD CONTAINS THE FAMILY/SET/PACK NAME.
* 
* DC  EXIT CONDITIONS 
* 
* 
*     DB$CKLT IS CALLED TO VALIDATE THE FAMILY/SET/PACK NAME. IF
*     THE NAME IS VALID (DB$CKLT=TRUE), IT IS STORED IN MDPFSN
*     AND RETURN IS TO DB$YES. IF DB$CKLT IS FALSE, RETURN IS TO DB$NO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$CKLT - VALIDATE LITERAL
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
*     DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDPFSN - WITHIN MDPFINFO IN (1,0) COMMON
* 
* DC  DESCRIPTION 
* 
*     DB$CKLT IS CALLED TO VALIDATE THE FAMILY/SET/PACK NAME. 
*     IF IT IS VALID, STORE THE NAME IN THE APPROPRIATE ENTRY 
*     WITHIN MDPFINFO AND RETURN TO DB$YES. OTHERWISE, RETURN 
*     TO DB$NO. 
 #
  
      IF DB$CKLT                   # VALIDATE LENGTH AND CHARACTERS    #
      THEN
        BEGIN 
        C<0,DB$CLNG>MDPFSN[CURFILTYP] = C<0,DB$CLNG>CURWORD[0]; 
        DB$YES; 
  
        END 
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$SR36; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR36 - VALIDATE AND STORE VOLUME 
* *             SERIAL NUMBER 
* *   J. G. SERPA                                DATE  07/25/80 
* *   R. M. PAPPE                                DATE  09/10/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE AND STORE THE VOLUME SERIAL NUMBER.
* 
* DC  ENTRY CONDITIONS
* 
*     CURWORD CONTAINS THE VOLUME SERIAL NUMBER.
* 
* DC  EXIT CONDITIONS 
* 
*     THE VOLUME SERIAL NUMBER HAS BEEN VALIDATED AND STORED
*     IN THE APPROPRIATE ENTRY WITHIN MDPFINFO. 
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$CKVS - VALIDATE VOLUME SERIAL NUMBER 
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
*     DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDPFVSN - WITHIN MDPFINFO IN (1,0) COMMON 
* 
* DC  DESCRIPTION 
* 
*     DB$CKVS IS CALLED TO VALIDATE THE VOLUME SERIAL NUMBER. 
*     IF IT IS VALID, STORE THE VSN IN THE APPROPRIATE ENTRY
*     WITHIN MDPFINFO AND RETURN TO DB$YES. OTHERWISE, RETURN 
*     TO DB$NO. 
* 
 #
  
      IF DB$CKVS                   # VALIDATE LENGTH AND CHARACTERS    #
      THEN
        BEGIN 
        C<0,DB$CLNG>MDPFVSN[CURFILTYP] = C<0,DB$CLNG>CURWORD[0];
        DB$YES; 
  
        END 
      DB$NO;
  
      END 
      CONTROL EJECT;
      PROC DB$SR40; 
      BEGIN 
 #
* *   DB$SRPF                                    PAGE  1
* *   DB$SR40 - VALIDATE AND STORE DEVICE TYPE
* *   J. G. SERPA                                DATE  07/26/80 
* *   R. M. PAPPE                                DATE  09/11/80 
* 
* DC  PURPOSE 
* 
*     VALIDATE AND STORE THE DEVICE TYPE OF THE CURRENT FILE. 
* 
* DC  ENTRY CONDITIONS
* 
*     DB$CLNG CONTAINS THE LENGTH OF THE DEVICE TYPE VALUE. 
*     CURWORD CONTAINS THE DEVICE TYPE. 
* 
* DC  EXIT CONDITIONS 
* 
*     DEVICE TYPE HAS BEEN VALIDATED AND STORED IN THE APPROPRIATE
*     ENTRY WITHIN MDPFINFO.
* 
* DC  CALLING ROUTINES
* 
*     DB$SNTX - SYNTAX CRACKER (SYNGEN) 
* 
* DC  CALLED ROUTINES 
* 
*     DB$CBIN - CONVERT DISPLAY CODE TO BINARY FORMAT 
*     DB$NO   - SYNTAX TABLE DRIVER -NO- RETURN 
*     DB$YES  - SYNTAX TABLE DRIVER -YES- RETURN
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     MDPFDT AND MDPFUNIT - WITHIN MDPFINFO IN (1,0) COMMON 
* 
* DC  DESCRIPTION 
* 
*     CHECK THAT THE LENGTH OF THE DEVICE TYPE LITERAL IS 2 OR 3
*     CHARACTERS. THE FIRST TWO MUST BE ALPHABETIC, AND THE THIRD ONE,
*     IF SPECIFIED, AN INTEGER IN THE RANGE 1 TO 8. 
*     IF THE LITERAL IS  LT 2 OR GT 3 CHARACTERS, OR THE FIRST TWO ARE
*     NOT ALPHABETIC, OR THE LAST ONE, IF SPECIFIED, IS NOT AN INTEGER
*     BETWEEN 1 AND 8, RETURN TO DB$NO. 
*     OTHERWISE, STORE THE FIRST TWO CHARACTERS IN MDPFDT AND,
*     IF THE LAST CHARACTER WAS SPECIFIED, CALL DB$CBIN TO CONVERT
*     IT TO BINARY, STORE IT IN MDPFUNIT, AND RETURN TO DB$YES. 
* 
*     ***  C A U T I O N  *** 
* 
*     BECAUSE DEVICE TYPES ARE DEFINED BY THE INSTALLATION, WE CANNOT 
*     VERIFY WHETHER THE 2 ALPHABETIC CHARACTERS DEFINE A LEGAL DEVICE
*     TYPE. THEREFORE WE ASSUME THAT THE TWO CHARACTERS ARE LEGAL, AS 
*     LONG AS THEY ARE ALPHABETIC.
* 
 #
  
      IF DB$CLNG EQ 2 
        OR DB$CLNG EQ 3 
      THEN
        BEGIN 
        IF ((C<0,1>CURWORD[0] GQ "A" AND C<0,1>CURWORD[0] LQ "Z") 
          AND (C<1,1>CURWORD[0] GQ "A" AND C<1,1>CURWORD[0] LQ "Z"))
          AND ((C<2,1>CURWORD[0] GQ "1" AND C<2,1>CURWORD[0] LQ "8")
          OR (C<2,1>CURWORD[0] EQ " ")) 
        THEN
          BEGIN 
          MDPFDT[CURFILTYP] = C<0,2>CURWORD[0]; 
          IF C<2,1>CURWORD[0] NQ " "
          THEN
            BEGIN 
            MDPFUNIT[CURFILTYP] = DB$CBIN(C<2,1>CURWORD[0],1,10); 
            END 
          DB$YES; 
  
          END 
        END 
      DB$NO;
  
      END 
      END                                                                SRPF 
      TERM                                                               SRPF 
