*DECK             FPICFE
USETEXT   TSOURCE 
USETEXT   TCEXECQ 
USETEXT   TSYMCNS 
USETEXT   TCOM37Q 
USETEXT   TCOM39Q 
USETEXT   TCOM78Q 
USETEXT   TCEXEC
USETEXT   TC7DECS 
PROC FPICFE((P1),(P2),(P3)); # FORMAT AND PRINT ICF ENTRY # 
      ITEM P1,P2,P3;
$BEGIN
BEGIN 
  
  
  
  
*CALL COMEX 
  
  
  
  
    ITEM I1,I2,I3;
    ITEM ICOPSTR C(22); #CHARACTER STRING#
    ITEM ICOPSNB I; #NUMBER OF CHARACTERS#
    ITEM ZERO I=0;
  
ARRAY [QICFOP"NULL":QICFOP"QICFOP$"]S(1); 
ITEM
    ICOPNB I (0,0,3)=[#NUMBER OF OPERANDS#
                   0,2,2,2,2,2,        #NULL,LAND,LOR ,LXOR,LIMP,LNND#
                   2,1,2,2,2,2,        #LEQV,COMP,LSHC,RSHC,LSHV,RSHV#
                   1,1,1,1,2,2,        #NORM,NRMR,UNPK,PACK,FADD,FSUB#
                   2,2,2,2,2,2,        #DADD,DSUB,RADD,RSUB,FMUL,RMUL#
                   2,2,2,2,2,2,        #DMUL,FDIV,RDIV,IAOR,IADD,ISMP#
                   2,1,1,1,1,2,        #ISUB,SUMI,MASK,BXND,JP  ,IR  #
                   2,2,2,2,2,2,        #OR  ,DF  ,ID  ,ZR  ,NZ  ,PL  #
                   2,2,2,2,2,2,        #NG  ,IJP ,REPL,PCAL,SUBS,INVI#
                   2,2,2,2,1,1,        #INVS,INVT,INVB,OFFS,SELB,LABL#
                   1,1,0,1,0,1,        #RTRN,SPRC,EPRC,PRGM,PTRM,ENTR#
                   1,1,2,1,1,1,        #DIRC,LOAD,SAVE,LOC ,DEAD,LDSC#
                   2,2,1,2,1,1,        #ADSC,SRV ,DRV ,PAKB,UNPB,NRMB#
                   1,0,0,0,0,1,        #NRRB,RLAY,EOS ,BRAI,LUAU,CNTL#
                   0,0,0,0,0,0,        #LODP,PSCP,XTYP,TMWR,TMSR,TMBR#
                   0,0,0,1,0,0,        #MSKC,LISC,TSSV,LINE,MSKL,BSLD#
                   0,0,0,2,0],         #BSLC,BSRP,PISR,PFUN,QICF     #
    ICOPST1 B (0,3,1)=[#=TRUE IF OPN1 IS POINTER# 
                   F,T,T,T,T,T,        #NULL,LAND,LOR ,LXOR,LIMP,LNND#
                   6(T),               #LEQV,COMP,LSHC,RSHC,LSHV,RSHV#
                   6(T),               #NORM,NRMR,UNPK,PACK,FADD,FSUB#
                   6(T),               #DADD,DSUB,RADD,RSUB,FMUL,RMUL#
                   6(T),               #DMUL,FDIV,RDIV,IAOR,IADD,ISMP#
                   T,T,F,T,T,T,        #ISUB,SUMI,MASK,BXND,JP  ,IR  #
                   6(T),               #OR  ,DF  ,ID  ,ZR  ,NZ  ,PL  #
                   6(T),               #NG  ,IJP ,REPL,PCAL,SUBS,INVI#
                   6(T),               #INVS,INVT,INVB,OFFS,SELB,LABL#
                   T,T,F,T,F,T,        #RTRN,SPRC,EPRC,PRGM,PTRM,ENTR#
                   F,T,F,T,T,T,        #DIRC,LOAD,SAVE,LOC ,DEAD,LDSC#
                   T,T,F,T,T,T,        #ADSC,SRV ,DRV ,PAKB,UNPB,NRMB#
                   T,F,F,F,F,T,        #NRRB,RLAY,EOS ,BRAI,LUAU,CNTL#
                   6(F),               #LODP,PSCP,XTYP,TMWR,TMSR,TMBR#
                   6(F),               #MSKC,LISC,TSSV,LINE,MSKL,BSLD#
                   F,F,F,T,F],         #BSLC,BSRP,PISR,PFUN,QICF     #
    ICOPST2 B (0,4,1)=[#=TRUE IF OPN2 IS POINTER# 
                   F,T,T,T,T,T,        #NULL,LAND,LOR ,LXOR,LIMP,LNND#
                   T,F,F,F,T,T,        #LEQV,COMP,LSHC,RSHC,LSHV,RSHV#
                   F,F,F,F,T,T,        #NORM,NRMR,UNPK,PACK,FADD,FSUB#
                   6(T),               #DADD,DSUB,RADD,RSUB,FMUL,RMUL#
                   6(T),               #DMUL,FDIV,RDIV,IAOR,IADD,ISMP#
                   T,F,F,F,F,T,        #ISUB,SUMI,MASK,BXND,JP  ,IR  #
                   6(T),               #OR  ,DF  ,ID  ,ZR  ,NZ  ,PL  #
                   6(T),               #NG  ,IJP ,REPL,PCAL,SUBS,INVI#
                   T,T,T,F,F,F,        #INVS,INVT,INVB,OFFS,SELB,LABL#
                   6(F),               #RTRN,SPRC,EPRC,PRGM,PTRM,ENTR#
                   F,F,T,F,F,F,        #DIRC,LOAD,SAVE,LOC ,DEAD,LDSC#
                   T,F,F,T,F,F,        #ADSC,SRV ,DRV ,PAKB,UNPB,NRMB#
                   6(F),               #NRRB,RLAY,EOS ,BRAI,LUAU,CNTL#
                   6(F),               #LODP,PSCP,XTYP,TMWR,TMSR,TMBR#
                   6(F),               #MSKC,LISC,TSSV,LINE,MSKL,BSLD#
                   5(F) ],             #BSLC,BSRP,PISR,PFUN,QICF     #
    ICOPNM C (0,6,4)=[#OPERATOR NAME# 
                   "NULL","LAND","LOR ","LXOR","LIMP","LNND", 
                   "LEQV","COMP","LSHC","RSHC","LSHV","RSHV", 
                   "NORM","NRMR","UNPK","PACK","FADD","FSUB", 
                   "DADD","DSUB","RADD","RSUB","FMUL","RMUL", 
                   "DMUL","FDIV","RDIV","IAOR","IADD","ISMP", 
                   "ISUB","SUMI","MASK","BXND","JP  ","IR  ", 
                   "OR  ","DF  ","ID  ","ZR  ","NZ  ","PL  ", 
                   "NG  ","IJP ","REPL","PCAL","SUBS","INVI", 
                   "INVS","INVT","INVB","OFFS","SELB","LABL", 
                   "RTRN","SPRC","EPRC","PRGM","PTRM","ENTR", 
                   "DIRC","LOAD","SAVE","LOC ","DEAD","LDSC", 
                   "ADSC","SRV ","DRV ","PAKB","UNPB","NRMB", 
                   "NRRB","RLAY","EOS ","BRAI","LUAU","CNTL", 
                   "LODP","PSCP","XTYP","TMWR","TMSR","TMBR", 
                   "MSKC","LISC","TSSV","LINE","MSKL","BSLD", 
                   "BSLC","BSRP","PISR","PFUN","QICF"]; 
  
ARRAY ICLI[0:13]S(1); #LINE IMAGE#
ITEM ICLC C (0,0,10), 
     ICLO C (0,6,4),
     ICLC7 C (0,42,1);
    XREF PROC BINOCT; 
    XREF PROC BINDEC; 
    XREF PROC CHRCHR; 
    XREF PROC PTLSTV; 
    XREF PROC FIND; 
    IF B<59-".">INTOPS EQ 0 THEN RETURN;
    I3=OPCD[P2];
    FOR I1=0 STEP 1 UNTIL 13 DO 
    ICLC[I1]=" "; 
    #FORMAT ICF LOCN# 
    BINOCT(ICLI,0,ZERO-P1,7); 
    ICLC7[0]=":"; 
    ICLO[1]=ICOPNM[I3]; 
    I1=ICOPNB[I3]; #NUMBER OF OPERANDS# 
    #FORMAT FIRST OPERAND , IF ANY# 
    IF I1 GR 0 THEN 
        BEGIN 
        I2=OPN1[P2];
        IF ICOPST1[I3] THEN 
            BEGIN #MUST BE PTR# 
            IF I2 LS 0 THEN 
                BEGIN #ICF PTR# 
                BINOCT(ICLI,35,-I2,6);
                GOTO L1;
                END 
            #ST PTR#
            ICOPSF(I2); 
            CHRCHR(ICLI,41-ICOPSNB,ICOPSTR,ICOPSNB);
            GOTO L1;
            END 
        #MUST BE NON-PTR +/-CONSTANT# 
        BINDEC(ICLI,37,I2,4); 
L1:     #FORMAT SECOND OPERAND, IF ANY# 
        I1=I1-1;
        IF I1 GR 0 THEN 
            BEGIN 
            CHRCHR(ICLI,41,",",1);
            I2=OPN2[P2];
            IF ICOPST2[I3] THEN 
                BEGIN #MUST BE PTR# 
                IF I2 LS 0 THEN 
                    BEGIN #ICF PTR# 
                    BINOCT(ICLI,42,-I2,6);
                    GOTO L2;
                    END 
                #ST PTR#
                ICOPSF(I2); 
                CHRCHR(ICLI,42,ICOPSTR,ICOPSNB);
                GOTO L2;
                END 
            #MUST BE NON-PTR +/-CONSTANT# 
            BINDEC(ICLI,42,I2,4); 
            END 
        END 
L2: #FORMAT OCTAL WORD# 
    BINOCT(ICLI,70,I3,3); #OP CODE# 
    BINOCT(ICLI,74,OPN1[P2],6); #OPN1#
    BINOCT(ICLI,81,OPN2[P2],6); #OPN2#
    #EXTRA PARAMETER# 
    IF P3 NQ 0 THEN BINOCT(ICLI,90,P3,6); 
    PTLSTV(ICLI,10);
CONTROL EJECT;
PROC ICOPSF((I1)); # I1= SYMBOL TABLE POINTER USUALLY # 
                   # RETURNS WITH FORMATTED NAME OF SYMBOL TBL POINTER
                 OR REASONABLE FACSIMILE THEREOF IN ICOPSTR#
BEGIN 
    ITEM I1,I2,I3,I4,C1;
    IF I1 LS 128 THEN 
        BEGIN #NOT A REAL SYMBOL TABLE POINTER# 
        IF I1 LQ 0 THEN 
            BEGIN #NOT EVEN A REAL NUMBER#
            ICOPSTR=" ";
            ICOPSNB=1;
            RETURN; 
            END 
        BINDEC(ICOPSTR,0,I1,3); 
        ICOPSNB=3;
        RETURN; 
        END 
    IF NNAM[I1] THEN
        BEGIN #NO-NAME# 
        ICOPSTR="(NONE:"; 
        C<6,4>ICOPSTR=ICOPSN[CLAS[I1]]; 
        CHRCHR(ICOPSTR,10,")",1); 
        ICOPSNB=11; 
        RETURN; 
        END 
    FIND(I1,I2);
    IF CLAS[I1] NQ QCLAS"CONS" THEN 
        BEGIN #REAL NAME# 
        ICOPSTR=NAME[I2]; 
         ICOPSNB=NCHR[I2];
         IF ICOPSNB GR 10 THEN ICOPSNB=10;
        RETURN; 
        END 
    #LITERAL NAME HAS TO BE MANUFACTURED# 
    C1=CONS[I2];
      FOR I3=0 STEP 3 WHILE B<I3,3>C1 EQ 0 AND I3 LS 57 DO
         BEGIN
         END
    I4=(60-I3)/3; 
    I3=B<I3,60-I3>C1; 
    BINOCT(ICOPSTR,2,I3,I4);
    C<0,2>ICOPSTR="=O"; 
    ICOPSNB=I4+2; 
END #ICOPSF#
END #FPICFE#
$END
TERM
