*DECK             ILDMP 
USETEXT   TSOURCE 
USETEXT   TSYMCNS 
USETEXT   TCEXECQ 
USETEXT   TCOM37Q 
USETEXT   TCEXEC
PROC DUMPIL;
BEGIN 
  
#     DUMPIL - A COLLECTION OF ROUTINES FOR PRODUCING FORMATTED DUMPS  #
#              OF IL BUFFERS FOR THE DEBUG COMPILER                    #
  
#     CONTAINS-                                                        #
#         ILDMP -                                                      #
#         ILDUMP -                                                     #
  
  
$BEGIN
ENTRY PROC ILDMP(IL,B); 
  
#     COMDECKS                                                         #
  
*CALL COMEX 
  
*CALL     DMPCM6
  
  
*CALL COM19B
  
  
  
  
#     XREFS                                                            #
  
         XREF PROC PTLSTV;
         XREF PROC CHRCHR;
         XREF PROC BINOCT;
         XREF PROC FRMNME;
  
  
  
  
#     DEFS                                                             #
  
         DEF ILTAB1 #12# ;
         DEF ILTAB2 #20# ;
         DEF ILTAB3 #38# ;
         DEF ILTAB4 #51# ;
         DEF ILTAB5 #64# ;
         DEF ILTAB6 #77# ;
         DEF ILTAB7 #90# ;
         DEF ILTAB8 #103#;
         DEF ILCLMS #5# ; 
  
  
  
  
#     LOCAL DATA                                                       #
  
         ARRAY IL [0] ; 
BEGIN 
*CALL     COM37I
END 
  
         ITEM B I;                      #LENGTH OF AREA#
         ITEM CLS S:QCLAS;
         ITEM TABX,I,J,K,M,N,X,Y,Z;     #TEMPS# 
         ITEM ILHDR C(7)="IL DUMP";     #HEADER MESSAGES# 
         ITEM ILHD1 C(4)="LOCN";
         ITEM ILHD2 C(16)="OPERATOR/OPERAND"; 
         ITEM ILHD3 C(6)="FIELDS";
         ITEM ILER1 C(22)="****ILLEGAL SYMTAB PTR"; 
         ITEM ILER2 C(20)="****ILLEGAL OPERATOR"; 
      CONTROL EJECT;
#     CODE FOR ILDMP BEGINS HERE                                       #
         ARRAY [0:ILCLMS] S(1); 
           ITEM ILTABS I(0,0,BITNWD)=[
              ILTAB3, ILTAB4, ILTAB5, 
              ILTAB6, ILTAB7, ILTAB8 ]; 
         TABX=0; GOTO ILDMPA; 
      CONTROL EJECT;
ENTRY PROC ILDUMP (IL,B); 
         TABX=2;
ILDMPA:  FOR I=0 STEP 1 UNTIL WRDNLN DO 
              PRTARY[I]=" ";
         J=(ILTABS[0]+6+BYTNWD-1)/BYTNWD; 
         PTLSTV(PL,J);
         FOR I=1 STEP 1 UNTIL J DO
              PRTARY[I]=" ";
         N=B-1; M=0;
         FOR I=0 STEP 1 UNTIL N DO                               BEGIN
              BINOCT(PL,TAB1,I,5);      #LOCN FIELD#
              IF M NQ 0 THEN GOTO ILDMP1 ;
              IF ILWRD[I] EQ 0 THEN                              BEGIN
ILDMP1:            BINOCT(PL,ILTABS[0],ILWRD[I],BITNWD/3);
                   GOTO ILPRNT;                                  END
              IF NOT ILOPT[I] THEN                               BEGIN
                   IF ILOPN[I] LS SYMSTART OR ILOPN[I] GR NXTAV THEN
                                                                 BEGIN
                        CHRCHR(PL,TAB2,ILER1,22);  GOTO ILDMP1;  END
                   FRMNME(ILOPN[I],TAB2); 
                   CLS=CLAS[ILOPN[I]];
      GOTO ILDMP3;                                                 END
              J=ILOP[I];                #OPERATOR#
              IF J GR QILOP"QILOP$" THEN                         BEGIN
                   CHRCHR(PL,TAB2,ILER2,20);  GOTO ILDMP1;       END
              CHRCHR(PL,TAB2+5,LSTOP[J],5); 
ILDMP3:       IF TABX EQ 0 THEN GOTO ILPRNT;
              BINOCT(PL,ILTABS[0],ILWRD[I],BITNWD/3); 
ILPRNT:       PTLSTV(PL,WRDNLN);
              FOR J=1 STEP 1 UNTIL WRDNLN DO
                   PRTARY[J]=" "; 
              IF M NQ 0 THEN                                     BEGIN
                   M=M-1; TEST I;                                END
         IF NOT ILOPT[I] THEN TEST I; 
              IF ILOP[I] EQ S"PTRM" THEN RETURN;
              IF ILOP[I] EQ S"INFO" OR ILOP[I] EQ S"SJOV" THEN
                   M=ILNBR[I];                                   END
         RETURN;
$END
  END 
TERM
