*DECK BUG202S 
          PROC  BUG202SET;
  
#**       BUG202SET -  SET DEBUG INFORMATION FROM CGEN PARAMETER CARD 
* 
*         CARD IMAGE SHOULD BE IN COMMON BLOCK /PARAMS/.
* 
*         BUG202SET 
* 
* 
*         SETS DEBUG CONTROL INFORMATION IN /BUG202C/.
# 
  
          BEGIN 
          $BEGIN
  
          XREF
              BEGIN 
              PROC  CBLIST;            # PROCESS COBOL LIST FILE       #
              PROC  CGABORT;           # INTERNAL COMPILER ERROR       #
              FUNC  OCT        C(20);  # OCTAL DISPLAY VALUE           #
              END 
          ITEM  LINE         C(140);
  
  
*CALL BUG202C 
  
*CALL CHAR$ 
  
*CALL LISTCTL 
  
*CALL PARAMS
  
*CALL RAPLUSC 
  
          ITEM  CHAR         I;        # CURRENT CHARACTER FROM CARD   #
          ITEM  I            I;        # SCRATCH                       #
          ITEM  GC$POS       I;        # BIT POSITION OF NEXT CHAR     #
          ITEM  GC$I         I;        # WORD INDEX TO CARD            #
          ITEM  GC$WORD      I;        # CURRENT WORD FROM CARD        #
          ITEM  BEGLIMIT     I;        # RESULT FROM *GETLIMITS*       #
          ITEM  ENDLIMIT     I;        # RESULT FROM *GETLIMITS*       #
          ITEM  NUM          I;        # RESULT FROM *GETNUM*          #
  
  
          DEF  LOOP          #I=I#; 
  
  
  
  
          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 LOOP WHILE CHAR GQ CHAR$ZERO  AND 
                         CHAR LQ CHAR$NINE  DO
              BEGIN 
              NUM = 10*NUM + CHAR-CHAR$ZERO;
              GETCHAR;
              END 
          END 
  
  
  
  
          PROC  GETLIMITS;
          BEGIN 
          IF CHAR NQ CHAR$EQUALS  THEN
#****GOTO#    GOTO ERROR; 
          GETCHAR;
          IF CHAR NQ CHAR$LPAREN  THEN
#****GOTO#    GOTO ERROR; 
          GETCHAR;
          GETNUM; 
          BEGLIMIT = NUM; 
          IF CHAR NQ CHAR$COMMA  THEN 
#****GOTO#    GOTO ERROR; 
          GETCHAR;
          GETNUM; 
          ENDLIMIT = NUM; 
          IF CHAR NQ CHAR$RPAREN  THEN
#****GOTO#    GOTO ERROR; 
          GETCHAR;
          END 
CONTROL EJECT;
  
#      PRIME *GETCHAR*                                                 #
  
          GC$I = 0;                              # INDEX TO CARD       #
          GC$WORD = PARAMSWORD[GC$I];            # CURRENT WORD        #
          GC$POS = 36;                           # (SKIP *PARAM,*)     #
  
#      PROCESS POSSIBLE L=(N1,N2)                                      #
  
          GETCHAR;
          IF CHAR EQ CHAR$L  THEN 
              BEGIN 
              GETCHAR;
              GETLIMITS;               # SET *BEGLIMIT* AND *ENDLIMIT* #
              END 
          ELSE
              BEGIN 
              BEGLIMIT = 0; 
              ENDLIMIT = 1000000; 
              END 
  
#      INITIALIZE DEBUG COMMON BLOCK                                   #
  
          BUG202C$WORD[0] = 0;         # CLEAR LOCAL DEBUG FLAGS       #
          BUG202C$WORD[1] = 0;         # CLEAR GLOBAL DEBUG FLAGS      #
          BUG202C$EGON = 0;            # EGO LEVEL NUMBER              #
  
          FOR I = 1 STEP 1 UNTIL BUG202C$NFLG  DO 
              BEGIN 
              BUG202C$BEGL[I] = BEGLIMIT; 
              BUG202C$ENDL[I] = ENDLIMIT; 
              END 
  
          FOR I = 1 STEP 1 UNTIL BUG202C$NFUN  DO 
              BEGIN 
              BUG202C$ARG[I] = O"77777777777777777777"; 
              BUG202C$FUN[I] = O"77777777777777777777"; 
              BUG202C$TABL[I] = O"77777777777777777777";
              BUG202C$VARG[I] = O"77777777777777777777";
              BUG202C$VFIX[I] = O"77777777777777777777";
              BUG202C$VFUN[I] = O"77777777777777777777";
              END 
  
          BUG202C$PTR = 0;
  
#      NOW PROCESS THE CONTROL CARD                                    #
  
          FOR LOOP WHILE CHAR NQ CHAR$BLANK  DO 
              BEGIN 
  
              IF CHAR GQ CHAR$ZERO  AND 
                 CHAR LQ CHAR$NINE  THEN
                  BEGIN 
                  GETNUM; 
                  IF NUM LS 1  THEN 
#****GOTO#            GOTO ERROR; 
                  B<NUM,1>BUG202C$WORD[1] = 1;   # SET FLAG TRUE       #
                  IF CHAR EQ CHAR$EQUALS  THEN
                      BEGIN 
                      I = NUM;         # SAVE FLAG NUMBER              #
                      GETLIMITS;       # SET *BEGLIMIT* AND *ENDLIMIT* #
                      BUG202C$BEGL[I] = BEGLIMIT; 
                      BUG202C$ENDL[I] = ENDLIMIT; 
                      END 
                  TEST; 
                  END 
  
              IF CHAR EQ CHAR$COMMA  THEN 
                  BEGIN 
                  GETCHAR;
                  TEST; 
                  END 
  
              IF CHAR EQ CHAR$E  THEN 
                  BEGIN 
                  GETCHAR;
                  BUG202C$EGO[1] = TRUE;         # PRINT *EGO* COMMANDS#
                  IF CHAR NQ CHAR$EQUALS  THEN
#****GOTO#            GOTO ERROR; 
                  GETCHAR;
                  GETNUM; 
                  BUG202C$EGON = NUM; 
                  TEST; 
                  END 
  
              IF CHAR EQ CHAR$A  THEN 
                  BEGIN 
                  GETCHAR;
                  IF CHAR NQ CHAR$L  THEN 
#***GOTO#             GOTO ERROR; 
                  GETCHAR;
                  IF CHAR NQ CHAR$L  THEN 
#***GOTO#             GOTO ERROR; 
                  GETCHAR;
                  IF CHAR EQ CHAR$EQUALS  THEN
                      BEGIN 
                      GETLIMITS;
                      FOR I = 1 STEP 1 UNTIL BUG202C$NFLG  DO 
                          BEGIN 
                          BUG202C$BEGL[I] = BEGLIMIT; 
                          BUG202C$ENDL[I] = ENDLIMIT; 
                          END 
                      END 
                  B<1,BUG202C$NFLG>BUG202C$WORD[1] =
                    O"77777777777777777777";
              B<0,BUG202C$NFLG>BUG202C$WORD[0] =
                O"77777777777777777777";
                  BUG202C$EGON = 15;             # EGO LEVEL = 15      #
                  TEST; 
                  END 
  
              IF CHAR EQ CHAR$D  THEN 
                  BEGIN 
                  GETCHAR;
                  IF CHAR NQ CHAR$EQUALS  THEN
#***GOTO#             GOTO ERROR; 
                  GETCHAR;
                  IF CHAR NQ CHAR$LPAREN  THEN
#***GOTO#             GOTO ERROR; 
                  GETCHAR;
                  BEGLIMIT = 0; 
  
                  FOR I=I 
                   WHILE CHAR GQ CHAR$ZERO
                   AND CHAR LQ CHAR$SEVEN  DO 
                      BEGIN 
                      BEGLIMIT = BEGLIMIT*8 + CHAR-CHAR$ZERO; 
                      GETCHAR;
                      END 
  
                  IF CHAR NQ CHAR$COMMA  THEN 
#***GOTO#             GOTO ERROR; 
                  GETCHAR;
                  ENDLIMIT = 0; 
                  FOR I=I 
                   WHILE CHAR GQ CHAR$ZERO
                   AND CHAR LQ CHAR$SEVEN  DO 
                      BEGIN 
                      ENDLIMIT = ENDLIMIT*8 + CHAR-CHAR$ZERO; 
                      GETCHAR;
                      END 
  
                  IF CHAR NQ CHAR$RPAREN  THEN
#***GOTO#             GOTO ERROR; 
                  GETCHAR;
                  BEGLIMIT = (BEGLIMIT/4)*4;
                  ENDLIMIT = (ENDLIMIT/4)*4 + 4;
                  LINE = " "; 
                  FOR NUM = BEGLIMIT STEP 4 UNTIL ENDLIMIT  DO
                      BEGIN 
                      C<0,6>LINE = OCT(NUM, 14, 6); 
                      C<7,20>LINE = OCT(RAPLUS[NUM], 0, 20);
                      C<28,20>LINE = OCT(RAPLUS[NUM+1], 0, 20); 
                      C<49,20>LINE = OCT(RAPLUS[NUM+2], 0, 20); 
                      C<70,20>LINE = OCT(RAPLUS[NUM+3], 0, 20); 
                      C<91,10>LINE = C<0,10>RAPLUS[NUM];
                      C<101,10>LINE = C<0,10>RAPLUS[NUM+1]; 
                      C<111,10>LINE = C<0,10>RAPLUS[NUM+2]; 
                      C<121,10>LINE = C<0,10>RAPLUS[NUM+3]; 
                      FOR I = 91 STEP 1 UNTIL 130  DO 
                          BEGIN 
                          IF C<I,1>LINE EQ ":"  THEN
                              C<I,1>LINE = " "; 
                          END 
                      CBLIST(LISTCTL"LINE", LINE, 132); 
                      END 
                  TEST; 
                  END 
  
              GOTO ERROR; 
              END 
  
          RETURN; 
  
  
  
  
 ERROR: 
          CGABORT("BUG202C-1"); 
          RETURN; 
  
          $END
          END 
          TERM
