SUBROUTINE RDTDLMC(KFILDO,KFILX,CFILX,ID,RECORD,NSIZE,NVALUE,
     1                   L3264B,IER) 
C 
C        SEPTEMBER 2012  ENGLE   MDL MOS-2000, ADAPTED FROM RDTDLM
C 
C        PURPOSE 
C            TO READ A STATION CALL LETTER RECORD TO FROM MOS-2000
C            EXTERNAL DIRECT ACCESS SYSTEM.  THIS INCLUDES OPENING
C            THE FILE, READING THE MASTER KEY RECORD WHEN NECESSARY,
C            AND MAKING A KEY RECORD AVAILABLE IN MASTER( , ).
C
C            TO ACCOMMODATE VERY LARGE NUMBER OF POINTS (E.G. NDFD
C            WRITTEN AS A VECTOR WITH A "STATION" DIRECTORY), THE
C            STATION DIRECTORY IS SPLIT INTO TWO RECORDS.  WHEN
C            MASTER(1,NT) = 0, READ AS USUAL;
C                         = 1 AND ID(1) =  400001000,
C            THE DIRECTORY IS SPLIT AND TWO RECORDS OF EQUAL SIZE
C            ARE READ.
C
C            VERSION 5 EXISTS FOR MINUTES ARCHIVE WHICH CAN HAVE
C            DUPLICATE STATIONS.  THE DIRECTORY NEED NOT BE SPLIT.
C 
C        DATA SET USE. 
C            KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE.  (OUTPUT) 
C            KFILX  - UNIT NUMBER FOR TDL FILE.  (INPUT) 
C 
C        VARIABLES 
C              KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE.  (INPUT) 
C               KFILX = UNIT NUMBER FOR TDL FILE.  (INPUT) 
C               CFILE = THE NAME OF THE FILE TO OPEN.  (CHARACTER*60)
C                       (INPUT)
C               ID(J) = THE 4 MOS IDS OF THE RECORD TO READ (J=1,4).
C                       (INPUT)
C           RECORD(J) = THE CHARACTER(LEN=L3264B/8) ARRAY TO STATION
C                       CALL LETTERS DATA INTO (J=1,NSIZE).  (OUTPUT)
C               NSIZE = THE SIZE OF RECORD( ).  (OUTPUT)
C              NVALUE = THE NUMBER OF DATA VALUES READ INTO RECORD( ).
C                       (OUTPUT)
C              L3264B = 32 FOR A 32-BIT WORKSTATION;
C                       64 FOR THE 64-BIT CRAY.  (INPUT)
C                 IER = STATUS CODE.
C                       0 = GOOD RETURN.
C                       OTHER VALUES FROM CALLED ROUTINES.
C                       (OUTPUT)
C
C         COMMON BLOCK       
C            NOPEN(N) = THE FORTRAN UNIT NUMBER CURRENTLY ASSOCIATED
C                       WITH AN OPEN FILE FOR EACH OF MAXOPN FILES
C                       (N=1,MAXOPN).  IF A FILE IS NOT OPEN FOR N,
C                       NOPEN(N) = 9999.
C          LSTRD(J,N) = THE RECORD NUMBER OF THE KEY RECORD LAST USED 
C                       (J=1) AND THE NUMBER OF THE ENTRY IN THE KEY
C                       RECORD LAST USED (J=2) FOR EACH OF THE MAXOPN
C                       FILES (N=1,MAXOPN).
C            CFILE(N) = THE FILE NAME ASSOCIATED WITH THE UNIT NUMBER
C                       IN NOPEN(N) FOR EACH OF MAXOPN FILES
C                       (N=1,MAXOPN).  (CHARACTER*60)
C             KUSE(N) = RECORDS THE LAST USE OF EACH OF THE OPEN FILES
C                       BY STORING KOUNT WHENEVER FLOPNM IS ENTERED.
C                       (N=1,MAXOPN).
C             NIRW(N) = SET TO 1 WHEN FILE IS OPEN FOR READING ONLY AND
C                       SET TO 2 WHEN FILE IS OPEN FOR READING AND
C                       WRITING, FOR EACH OF OPEN FILES (N=1,MAXOPN).
C         MASTER(J,N) = 6 WORDS (J=1,6) OF THE MASTER KEY RECORD PLUS
C                       AN EXTRA WORD (J=7) INDICATING WHETHER (1) OR
C                       NOT (0) THIS MASTER KEY RECORD NEED BE WRITTEN
C                       WHEN CLOSING THE FILE FOR EACH OF THE MAXOPN 
C                       FILES (N=1,MAXOPN).  THE WORDS ARE: 
C                       1 = 0 FOR VERSION 0; 1 FOR VERSION 1.
C                           WHEN VERSION 1, THE DIRECTORY RECORD IS 
C                           SPLIT INTO TWO RECORDS.
C                       2 = NUMBER OF INTEGER WORDS IN ID FOR EACH
C                           RECORD.  THIS IS 4 UNLESS CHANGES ARE
C                           MADE TO THE SOFTWARE.
C                       3 = THE NUMBER OF WORDS IN A PHYSICAL RECORD.
C                           THIS APPLIES TO A 32-BIT OR A 64-BIN 
C                           MACHINE.
C                       4 = NUMBER OF KEY RECORDS STORED IN THE FILE
C                           TO WHICH THIS MASTER KEY REFERS.
C                           INITIALLY = 1.
C                       5 = MAXIMUM NUMBER OF KEYS IN A KEY RECORD 
C                           FOR THIS FILE.
C                       6 = LOCATION OF WHERE THE FIRST PHYSICAL RECORD
C                           OF THE LAST LOGICAL KEY RECORD OF THE FILE
C                           IS LOCATED.
C                       7 = THIS MASTER KEY RECORD HAS (1) HAS NOT (0)
C                           BEEN MODIFIED.
C                       (INPUT-OUTPUT)
C         NOPREC(J,N) = 6 WORDS (J=1,6) USED BY THE FILE SYSTEM FOR EACH
C                       OF THE OPEN FILES (N=1,MAXOPN).  WORDS 3, 5,
C                       AND 6 ARE WRITTEN AS PART OF THE KEY RECORD.
C                       THE WORDS ARE:
C                       1 = IS THE KEY RECORD IN KEYREC( , , )?  IF NOT,
C                           THIS VALUE IS ZERO.  OTHERWISE, LOCATION 
C                           IN KEYREC( , ,N) OF THE KEY RECORD, RANGE OF
C                           1 TO MAXOPN.
C                       2 = LOCATION OF THIS KEY RECORD IN THE FILE.
C                       3 = NUMBER OF SLOTS FILLED IN THIS KEY.
C                       4 = INDICATES WHETHER (1) OR NOT (0) THE KEY
C                           RECORD HAS BEEN MODIFIED AND NEEDS TO BE
C                           WRITTEN.  ZERO INITIALLY.
C                       5 = NUMBER OF PHYSICAL RECORDS IT TAKES TO HOLD
C                           THIS LOGICAL KEY RECORD.  THIS IS FILLED BY
C                           WRKEYM.
C                       6 = THE RECORD NUMBER OF THE NEXT KEY RECORD
C                           IN THE FILE.  EQUALS 9999 WHEN THIS IS THE
C                           LAST KEY RECORD IN THE FILE.
C       KEYREC(J,L,N) = HOLDS THE KEY RECORDS FOR UP TO MAXOPEN OPEN
C                       FILES (N=1,MAXOPN), EACH KEY HAVING UP TO 
C                       NW ENTRIES (L=1,NW).  THE WORDS ARE:
C                       1-4 = THE 4 MOS-2000 IDS.
C                         5 = THE NUMBER OF DATA WORDS IN THE RECORD.
C                         6 =  THE BEGINNING RECORD NUMBER OF THE DATA 
C                              RECORD IN THE FILE * 1000 +
C                              THE NUMBER OF PHYSICAL RECORDS IN THE LOGICAL
C                              RECORD.
C            CLIST(J) = THE LIST OF FILE NAMES THAT HAVE BEEN OPENED 
C                       (J=1,MAXFIL).
C           CFILSZ(J) = THE PHYSICAL RECORD SIZE IN BYTES OF THE FILES
C                       APPEARING IN CLIST(J) (J=1,MAXFIL).  INITIALLY,
C                       ALL VALUES ARE ZERO.  WHEN A FILE IS OPENED, IT
C                       IS ENTERED IN CLIST( ) AND CFILSZ( ) FROM THE TOP.
C               KOUNT = THE TOTAL NUMBER OF TIMES FLOPNM HAS BEEN ENTERED.
C              MAXOPN = THE MAXIMUM NUMBER OF DIRECT ACCESS FILES THAT
C                       CAN BE OPEN IN THIS MOS-2000 EXTERNAL DIRECT
C                       ACCESS FILE SYSTEM.  (SET BY PARAMETER)
C              MAXFIL = THE MAXIMUM NUMBER OF ENTRIES IN CLIST( ) AND
C                       CFILSZ( ).  (SET BY PARAMETER)
C                  NW = THE MAXIMUM NUMBER OF ENTRIES IN ANY KEY RECORD
C                       BEING USED IN THIS RUN. 840 WILL ACCOMMODATE A
C                       20,000 BYTE RECORD.  (SET BY PARAMETER)
C              IRAEND = INTEGER VALUE THAT REPRESENTS THE ENDIAN OF
C                       A RANDOM ACCESS FILE.
C                        -1 = LITTLE-ENDIAN
C                         1 = BIG-ENDIAN
C             ISYSEND = HOLD THE VALUE THAT REPRESENTS THE SYSTEM
C                       ENDIAN. (INPUT/OUTPUT)
C                       THIS IS SET BY CALLING CKSYSEND
C                        -1 = SYSTEM IS LITLE-ENDIAN.
C                         1 = SYSTEM IS BIG-ENDIAN.
C
C        NON SYSTEM SUBROUTINES USED 
C            FLOPNM, RDTM, CKSYSEND 
C 
      PARAMETER (MAXOPN=2,
     1           MAXFIL=20, 
     2           NW=840) 
C
      CHARACTER(LEN=L3264B/8), DIMENSION(NSIZE) :: RECORD
      CHARACTER*60 CFILX,CFILE,CLIST
C
      COMMON/ARGC/NOPEN(MAXOPN),LSTRD(2,MAXOPN),CFILE(MAXOPN),
     1            KUSE(MAXOPN),NIRW(MAXOPN),MASTER(7,MAXOPN),
     2            NOPREC(6,MAXOPN),KEYREC(6,NW,MAXOPN),
     3            CLIST(MAXFIL),NFILSZ(MAXFIL),KOUNT,
     4            NRAEND(MAXOPN)
C
      DIMENSION ID(4),MD(4)
C     DIMENSION RECORD(NSIZE)
C
      IER=0
      IRW=1
C        READING IS TO BE DONE.
C
      CALL FLOPNM(KFILDO,KFILX,CFILX,IRW,NT,L3264B,IRAEND,IER)
      IF(IER.NE.0)GO TO 200
C
      IF(MASTER(1,NT).NE.1.OR.ID(1).NE.400001000)THEN
         CALL RDTMC(KFILDO,KFILX,ID,RECORD,NSIZE,NVALUE,
     1             KEYREC(1,1,NT),LSTRD(1,NT),
     2             NOPREC(1,NT),MASTER(1,NT),NW,L3264B,IER) 
      ELSE
         CALL RDTMC(KFILDO,KFILX,ID,RECORD,NSIZE,NVALUE1,
     1             KEYREC(1,1,NT),LSTRD(1,NT),
     2             NOPREC(1,NT),MASTER(1,NT),NW,L3264B,IER) 
         MD(1)=ID(1) 
         MD(2)=ID(2) 
         MD(3)=ID(3) 
         MD(4)=ID(4)+1
C           THE FOURTH ID WORD OF THE SECOND RECORD IS 000000001. THIS SHOULD 
C           NOT AFFECT ID( ).  THE REMAINING WORDS IN RECORD( ) THAT
C           CAN BE FILLED IS NOW NSIZE/2 + MOD(NSIZE,2).  IF THE 
C           DIRECTORY SIZE IS ODD, THE 2ND RECORD WILL BE ONE LONGER
C           THAN THE FIRST.
         CALL RDTMC(KFILDO,KFILX,MD,RECORD(NVALUE1+1),
     1                                    NSIZE/2+MOD(NSIZE,2),NVALUE2,
     2             KEYREC(1,1,NT),LSTRD(1,NT),
     3             NOPREC(1,NT),MASTER(1,NT),NW,L3264B,IER) 
         NVALUE=NVALUE1+NVALUE2
      ENDIF
C
 200  RETURN
      END