*COMDECK ALRDACARD
      SUBROUTINE RDACARD(UNIT,EOFFLAG)
C 
C 
C 
C        THIS ROUTINE READS A DIRECTIVE FROM THE INPUT DIRECTIVE
C        FILE (LOGICAL UNIT 'UNIT') AND SETS DIRTYPE TO THE 
C        DIRECTIVE TYPE, AS FOLLOWS 
C 
C              1 - PASSIVE DIRECTIVE
C              2 - APPL=
C              3 - BUFSPSIZE= 
C              4 - CCP= 
C              5 - CORESIZE=
C              6 - DEF= 
C              7 - DEFBASE= 
C              8 - MOD= 
C              9 - PAGEREG= 
C             10 - PAGESIZES= 
C             11 - RESERVE= 
C             12 - RPT= 
C             13 - OVLYADDR=
C             14 - DEFRPT=
C             15 - SAMAREA= 
C             99 - INVALID DIRECTIVE
C 
C 
C 
*CALL ALCOMMON
      DIMENSION VALIDIR(2,14),MPDIR(9)
      LOGICAL EOFFLAG,COMMENT 
C 
C 
      DATA ADIRCNT/14/,MDIRCNT/9/ 
      DATA VALIDIR / 5RAPPL=,6 , 10RBUFSPSIZE=,11 , 4RCCP ,4 ,
     1               9RCORESIZE=,10 , 4RDEF=,5 , 8RDEFBASE=,9 , 
     2               4RMOD=,5 , 8RPAGEREG=,9 , 10RPAGESIZES=,11 , 
     3               8RRESERVE=,9,4RRPT=,5,9ROVLYADDR=,10,
     4               7RDEFRPT=,8,8RSAMAREA=,9/
C 
      DATA MPDIR / 3RCOM , 3RCOR , 3RDAT , 4RDSTK , 4RDVAR ,
     1             3RENT , 5RSYSID , 3RDMP , 3RSYN /
      DATA COMMENT,CMNTST,CMNTEND / .FALSE. , 1R_ , 1R? / 
      DATA MODULE /8/ 
C 
C 
C 
C        READ THE NEXT CARD.
C 
 1001 READ (UNIT,1000) CARD 
 1000 FORMAT (90R1) 
C 
C        RETURN IF AN EOF OCCURS. 
C 
      EOFFLAG = EOF(UNIT) .NE. 0
      IF (EOFFLAG) RETURN 
C 
C        COPY IT TO THE INPUT LIST FILE IF REQUESTED. 
C 
      CALL OUTIDIR
C 
C        LEFT JUSTIFY AND BLANK FILL THE DIRECTIVE. 
C 
      PTR = 1 
      DO 1 I=1,72 
      IF (CARD(I).EQ.BLANK) GO TO 1 
C 
C        DELETE COMMENTS, AND MAKE SURE AN END WASN'T LEFT OUT. 
C 
      IF (COMMENT) GO TO 7
      IF (CARD(I).NE.CMNTST) GO TO 8
      COMMENT = .TRUE.
      GO TO 1 
    7 IF (CARD(I).EQ.CMNTST) GO TO 920
      IF (CARD(I).EQ.CMNTEND) COMMENT = .FALSE. 
      GO TO 1 
    8 CARD(PTR) = CARD(I) 
      PTR = PTR + 1 
    1 CONTINUE
C 
C 
C        IGNORE THE CARD IF IT IS BLANK.
C 
      IF (PTR.EQ.1) GO TO 1001
      DO 2 I=PTR,90 
    2 CARD(I) = BLANK 
C 
C        INITIALIZE THE DIRECTIVE AND BRANCH IF THIS MAY BE A 
C        PASSIVE DIRECTIVE. 
C 
    3 DIR = 0 
      IF (CARD(1).EQ.ASTER) GO TO 100 
      IF (CARD(1).EQ.Z .AND. CARD(2).EQ.EQUALS) GO TO 910 
C 
C        INITIALIZE THE CHARACTER POINTER 
C 
      PTR = 0 
C 
C        NOW GET THE NEXT CHARATER, AND REPORT AN ERROR IF WE 
C        HAVE MORE THAN 10.  IF NOT, SHIFT IN THE NEW CHARACTER.
C 
    4 PTR = PTR +1
      IF (PTR.GT.10) GO TO 900
      CHAR = CARD(PTR)
      DIR = SHIFT(DIR,6) +CHAR
C 
C        IF THIS IS NOT A TERMINATING CHARCTER, GO GET ANOTHER. 
C 
      IF (CHAR.NE.BLANK .AND. CHAR.NE.EQUALS) GO TO 4 
C 
C        WHEN TERMINATED, TRY TO FIND THE DIRECTIVE IN THE VALID LIST.
C 
      DO 5 I=1,ADIRCNT
      IF (DIR.EQ.VALIDIR(1,I)) GO TO 6
    5 CONTINUE
C 
C        GO REPORT AN ERROR IF IT IS ILLEGAL. 
C 
      GO TO 900 
C 
C        OTHERWISE, SET THE DIRECTIVE TYPE. 
C 
    6 DIRTYPE = I + 1 
C 
C        INCREMENT THE POINTER TO POINT PAST THE TERMINATOR, AND RETURN.
C 
      CARDPTR = VALIDIR(2,I)
      RETURN
C 
C 
C        TO CHECK THE PASSIVE DIRECTIVES, ACCEPT UP TO 7 CHARACTERS.
C        POINT TO THE NEXT ONE, AND IF THE LIMIT IS NOT EXCEEDED, 
C        LOAD IT INTO THE DIRECTIVES WORD.
C 
  100 PTR = 1 
  101 PTR = PTR + 1 
      IF (PTR.GT.7) GO TO 900 
      CHAR = CARD(PTR)
C 
C        KEEP LOOPING IF THERE IS NO TERMINATOR YET.
C 
      IF(CHAR.EQ.BLANK .OR. CHAR.EQ.COMMA) GO TO 104
      DIR = SHIFT(DIR,6) + CHAR 
      GO TO 101 
C 
C        WHEN TERMINATED, SEE IF IT IS A VALID PASSIVE DIRECTIVE. 
C 
  104 DO 102 I=1,MDIRCNT
      IF (DIR.EQ.MPDIR(I)) GO TO 103
  102 CONTINUE
C 
C        GO REPORT AN ERROR IF NOT LEGAL. 
C 
      GO TO 900 
C 
C        FOR A VALID PASSIVE DIRECTIVE, SET THE TYPE TO 1.
C 
  103 DIRTYPE = 1 
      RETURN
C 
C 
C 
C        ERROR BRANCHES 
C 
C 
C        INVALID DIRECTIVE TYPE.
C 
  900 DIRTYPE = 99
      CARDPTR = PTR 
      RETURN
C 
C        DEBUG DIRECTIVE
C 
  910 DIRTYPE = 98
      RETURN
C 
C 
C        NO END FOR PREVIOUS COMMENT. 
C 
  920 CALL ERRMSG(MODULE,12)
      GO TO 1 
      END 
C 
C 
