*DECK BUG020S 
          PROC  BUG020SET;
  
#**       BUG020SET -  SET DEBUG INFORMATION FROM PARAMETER CARD       #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         BUG020SET:                                                   #
#                                                                      #
#     GIVEN-                                                           #
#         -PARAM- CARD IMAGE IN COMMON BLOCK /PARAMS/.                 #
#             PARAM,<PHRASE-1>,...,<PHRASE-N>                          #
#               WHERE <PHRASE-I> MAY BE-                               #
#                 INDEBUG                                              #
#                 DDLDEBUG                                             #
#                 TOKENS                                               #
#                 LINES                                                #
#                 COPY                                                 #
#                 <LINE NUMBER>                                        #
#                 (<LINE NUMBER>,<LINE NUMBER>)                        #
#                                                                      #
#     DOES-                                                            #
#         SETS DEBUG VARIABLES ACCORDING TO PARAMETERS.                #
#         NOTE: COPY ALSO TURNS ON REPLACE STATEMENT DEBUGING          #
  
  
          BEGIN 
          $BEGIN
  
  
*CALL BUG020C$
  
*CALL CHAR$ 
  
*CALL LISTCTL 
  
*CALL PARAMS
  
          XREF               # EXTERNAL PROCEDURES                     #
              BEGIN 
              PROC  CBLIST;            # COBOL LISTING ROUTINE         #
              PROC  ABORT;             # COMPILER/CHK ERROR            #
              END 
  
          XREF
              BEGIN 
              ITEM  INDEBUG      B;    # IFF NOW DEBUGGING INTERPRETTER#
              ITEM  DDLDEBUG     B;    # IFF NOW DEBUGGING DDL         #
              END 
  
          ITEM  CHAR         I;        # RESULT FROM -GETCHAR-         #
          ITEM  GC$POS       I;        # GETCHAR- BIT POS. OF NEXT CHAR#
          ITEM  GC$I         I;        # GETCHAR- WORD INDEX TO CARD   #
          ITEM  GC$WORD      I;        # CURRENT WORD FROM CARD        #
          ITEM  I            I;        # SCRATCH                       #
          ITEM  NUM          I;        # RESULT FROM -GETNUM-          #
          ITEM  WORD         C(10);    # RESULT FROM -GETWORD-         #
  
  
  
  
          PROC  GETCHAR;
          BEGIN 
          IF GC$POS EQ 60  THEN 
              BEGIN 
              GC$I = GC$I + 1;
              GC$WORD = PARAMSWORD[GC$I]; 
              GC$POS = 0; 
              END 
          CHAR = B<GC$POS,6>GC$WORD;
          GC$POS = GC$POS + 6;
          END 
  
  
  
  
          PROC  GETNUM; 
          BEGIN 
          NUM = CHAR - CHAR$ZERO; 
          GETCHAR;
          FOR I=I WHILE CHAR GQ CHAR$ZERO 
           AND CHAR LQ CHAR$NINE  DO
              BEGIN 
              NUM = 10*NUM + CHAR-CHAR$ZERO;
              GETCHAR;
              END 
          END 
  
  
  
  
          PROC  GETWORD;
          BEGIN 
          WORD = "          ";
          I = 0;
          FOR I=I WHILE CHAR GQ CHAR$A
                    AND CHAR LQ CHAR$Z  DO
              BEGIN 
              C<I,1>WORD = C<9,1>CHAR;
              I = I + 1;
              GETCHAR;
              END 
          END # OF GETWORD #
CONTROL EJECT;
  
#     INITIALIZE -GETCHAR-                                             #
  
          GC$I = 0;                              # INDEX TO CARD       #
          GC$WORD = PARAMSWORD[GC$I];            # CURRENT WORD        #
          GC$POS = 36;                           # (SKIP "PARAM,")     #
  
#     INITIALIZE DEBUG FLAGS                                           #
  
          INDEBUG = FALSE;
          INDEBUG$ = FALSE; 
          DDLDEBUG = FALSE; 
          DDLDEBUG$ = FALSE;
          BUG020C$TKN = FALSE;
          BUG020C$TKN$ = FALSE; 
          BUG020C$CPY = FALSE;
          BUG020C$CPY$ = FALSE; 
          BUG020C$LIN = FALSE;
          BUG020C$LIN$ = FALSE; 
          BUG020C$BEGL = 65536;        # BEGINNING LINE NO. = INFINITY #
          BUG020C$ENDL = 65536;        # ENDING LINE NO. = INFINITY    #
  
#     PROCESS THE CONTROL CARD                                         #
  
          GETCHAR;
NEXTPARAM:  
          IF CHAR GQ CHAR$A 
           AND CHAR LQ CHAR$Z  THEN 
              BEGIN                    # KEYWORD                       #
              GETWORD;
              IF WORD EQ "INDEBUG"  THEN
                  INDEBUG$ = TRUE;
              ELSE
              IF WORD EQ "DDLDEBUG"  THEN 
                  DDLDEBUG$ = TRUE; 
              ELSE
              IF WORD EQ "TOKENS"  THEN 
                  BUG020C$TKN$ = TRUE;
              ELSE
              IF WORD EQ "COPY"  THEN 
                  BUG020C$CPY$ = TRUE;
              ELSE
              IF WORD EQ "LINES"  THEN
                  BUG020C$LIN$ = TRUE;
              ELSE
#***#             GOTO ERROR; 
              END 
          ELSE
          IF CHAR GQ CHAR$ZERO
           AND CHAR LQ CHAR$NINE  THEN
              BEGIN                    # <LINE-NUMBER>                 #
              GETNUM; 
              BUG020C$BEGL = NUM; 
              BUG020C$ENDL = NUM; 
              END 
          ELSE
          IF CHAR EQ CHAR$LPAREN  THEN
              BEGIN                    # <LINE-NUMBER>,<LINE-NUMBER>)  #
              GETCHAR;
              GETNUM; 
              BUG020C$BEGL = NUM; 
              IF CHAR NQ CHAR$COMMA  THEN 
#***#             GOTO ERROR; 
              GETCHAR;
              IF CHAR LS CHAR$ZERO
               OR CHAR GR CHAR$NINE  THEN 
#***#             GOTO ERROR; 
              GETNUM; 
              BUG020C$ENDL = NUM; 
              IF CHAR NQ CHAR$RPAREN  THEN
#***#             GOTO ERROR; 
              GETCHAR;
              END 
          ELSE
          IF CHAR EQ CHAR$COMMA  THEN 
              BEGIN                    # ,                             #
              GETCHAR;
              END 
          ELSE
          IF CHAR EQ CHAR$BLANK  THEN 
              BEGIN                    # END-OF-CARD                   #
#***#             GOTO DONECARD;
              END 
          ELSE
              BEGIN                    # ERROR                         #
ERROR:  
              CBLIST(LISTCTL"LINE", "PARAM CARD ERROR", 15);
#***#         ABORT;
              END 
          GOTO NEXTPARAM; 
  
  
#     DONE EXAMINING CARD                                              #
  
DONECARD: 
          IF BUG020C$BEGL EQ 0  THEN   # IF DEBUG STARTS NOW           #
              BEGIN 
              INDEBUG = INDEBUG$; 
              DDLDEBUG = DDLDEBUG$; 
              BUG020C$TKN = BUG020C$TKN$; 
              BUG020C$CPY = BUG020C$CPY$; 
              BUG020C$LIN = BUG020C$LIN$; 
              END 
          $END
          END 
          TERM
