*DECK DATECMP 
USETEXT CCTTEXT 
USETEXT SSTEXT
          PROC  DATECMP;
  
#**       DATECMP -  PROCESS *DATE-COMPILED*                           #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         DATECMP:                                                     #
#                                                                      #
#     GIVEN-                                                           #
#         PRINT LINES IN /COPYBLK/ PL$ ARRAY.                          #
#         LISTDAT IN FORMAT ( MM/DD/YY ), (E.G.)                       #
#         IN COMMON BLOCK /MDY/, M, D AND Y ARE CHARACTER INDEXES      #
#           TO LISTDAT  (E.G. M=1, D=4, Y=7).                          #
#                                                                      #
#     DOES-                                                            #
#         REPLACES THE COMMENT-ENTRY FOLLOWING "DATE-COMPILED"         #
#           WITH THE DATE TAKEN FROM THE COMPILER LISTING HEADER.      #
#           THE COMMENT-ENTRY IS TERMINATED JUST BEFORE THE NEXT       #
#           NON-BLANK AREA A.                                          #
  
  
          BEGIN 
  
  
*CALL CHAR$ 
  
  
          STATUS  TKNTYPE 
*CALL TKNTYPE 
  
          XREF
              BEGIN 
              PROC  ABORTSS;           # INTERNAL COMPILER ERROR       #
              PROC  DBDIAG;            # DEBUG DIAGNOSTIC              #
              PROC  INTERCEPTOR;       # ISSUE DIAGNOSTIC FOR USER     #
              PROC  SETLINE;           # CALL NEWLINE, SET ENDCHRS/ACHR#
              PROC  TKNCLAS;           # GET AND CLASSIFY NEXT TOKEN   #
              END 
  
          DEF  DIAGNOS(SEV,NUM,LIN,COL) 
#$BEGIN DBDIAG(SEV,NUM,LIN,COL);$END INTERCEPTOR(COL,LIN,NUM-1000,SEV)#;
  
              ITEM  M            I;    # CHAR. INDEX TO LISTDAT FOR MM #
              ITEM  D            I;    # CHAR. INDEX TO LISTDAT FOR DD #
              ITEM  Y            I;    # CHAR. INDEX TO LISTDAT FOR YY #
  
          BASED ARRAY AREA$A$ [1:9] S(1); 
              ITEM  AREA$A$WORD  C(0, 0,90);
          DEF  AREA$A  #C<7,4>AREA$A$WORD[1]#;
  
          ITEM  BLANK20      C(20) = " "; 
          ITEM  DATE         C(21);    # E.G. (.  SEPTEMBER 10, 1977)  #
          ITEM  I            I;        # SCRATCH                       #
          ITEM  J            I;        # SCRATCH                       #
          ITEM  MM           I;        # MONTH NUMBER (1 THRU 12)      #
          ITEM  NEXTLINENO   I;        # NEXT LN AFTER "DATE-COMPILED" #
  
          ARRAY [1:12]; 
              BEGIN 
              ITEM  MONTH        C(0, 0, 9) 
                                     =["JANUARY", 
                                       "FEBRUARY",
                                       "MARCH", 
                                       "APRIL", 
                                       "MAY", 
                                       "JUNE",
                                       "JULY",
                                       "AUGUST",
                                       "SEPTEMBER", 
                                       "OCTOBER", 
                                       "NOVEMBER",
                                       "DECEMBER"]; 
              ITEM  LMONTH       I(0,54, 6) 
                                  =[7, 8, 5, 5, 3, 4, 4, 6, 9, 7, 8, 8];
              END 
          XDEF ITEM HOLDDATECMP B = FALSE;
CONTROL EJECT;
          Y = B<0,18>CCTDATFORMAT;     # PICK-UP YEAR OFFSET           #
          M = B<18,18>CCTDATFORMAT;    # PICK-UP MONTH OFFSET          #
          D = B<36,18>CCTDATFORMAT;    # PICK-UP DAY OFFSET            #
  
          NEXTLINENO = CLALINE;        # LN AFTER "DATE-COMPILED"      #
  
#     CONVERT " MM/DD/YY " TO "<MONTH> DD, 19YY" OR "(MONTH) DD, 20YY" #
  
          $BEGIN
          IF C<0,1>CCTDATE NQ " " 
            OR C<3,1>CCTDATE NQ "/" 
            OR C<6,1>CCTDATE NQ "/" 
          THEN
              BEGIN 
              ABORTSS(CCTDATE); 
              END 
          $END
          IF CCTSOURCLIST 
          THEN
              BEGIN 
          DATE = "                     "; 
          MM = B<6*M,6>CCTDATE - CHAR$ZERO; 
          MM = 10*MM + B<6*M+6,6>CCTDATE - CHAR$ZERO; 
          C<2,9>DATE = MONTH[MM]; 
          I = LMONTH[MM] + 3; 
          IF C<D,1>CCTDATE NQ "0" 
          THEN
              BEGIN 
              C<I,1>DATE = C<D,1>CCTDATE; 
              I = I + 1;
              END 
          C<I,1>DATE = C<D+1,1>CCTDATE; 
          C<I+1,4>DATE = ", 19";
          IF B<6*Y,6>CCTDATE - CHAR$ZERO LS 7 
          THEN
              BEGIN 
              C<I+3,2>DATE = "20";
              END 
          C<I+5,2>DATE = C<Y,2>CCTDATE; 
          C<I+7,1>DATE = "."; 
  
#     INSERT THE DATE ON THE FIRST LINE OF THE COMMENT-ENTRY           #
  
          FOR I = PLI$FIRST WHILE PL$VLN[I] NQ CLAVLN  DO 
              I = PL$NEXT[I]; 
          C<CLACOLUMN+1,60-CLACOLUMN>PL$10CHARS[I] = DATE;
              END 
           HOLDDATECMP = FALSE; #ALLOW PRINTING OF DATE-COMPILED #
  
#     SKIP THE REST OF THE COMMENT-ENTRY WITHOUT PRINTING IT           #
  
          FOR J=J  WHILE PLI$NOTREADY NQ PLI$CURRENT  DO
              BEGIN 
              PL$READY[PLI$NOTREADY] = TRUE;
              PLI$NOTREADY = PL$NEXT[PLI$NOTREADY]; 
              END 
  
          P<AREA$A$> = LOC(BLANK20);
          FOR I=I WHILE AREA$A EQ "    "
           AND NOT ENDCHRS  DO
              BEGIN 
              SETLINE;                 # CALL NEWLINE, SET ENDCHRS/ACHR#
              FOR J=J  WHILE PLI$NOTREADY NQ PLI$CURRENT  DO
                  BEGIN 
                  PL$READY[PLI$NOTREADY] = TRUE;
                  IF PL$VLN[PLI$NOTREADY] NQ CLAVLN THEN
                      PL$NOLIST[PLI$NOTREADY] = TRUE; 
                  PLI$NOTREADY = PL$NEXT[PLI$NOTREADY]; 
                  END 
              IF PL$VLN[PLI$CURRENT] NQ CLAVLN THEN 
                  PL$NOLIST[PLI$CURRENT] = TRUE;
              P<AREA$A$> = ADDRLIN;    # POINT TO NEW LINE             #
              END 
          PL$NOLIST[PLI$CURRENT] = FALSE; 
          TKNCLAS;                     # LEAVE WITH NEXT TOKEN         #
  
          END # OF DATECMP #
          TERM
