*DECK             CLSS
USETEXT   TSOURCE 
USETEXT   TCEXECQ 
USETEXT   TCOM37Q 
USETEXT   TCOM39Q 
USETEXT   TCOM78Q 
USETEXT   TC7DECS 
PROC CLSS((I));    # CLASSIFY LEFT SIDE STRUCTURE  I=TRIAD PTER        #
                   #          A-TRIAD   STRUC OBJX WINX FBDX NBDX MDTP # JANDRE 
                   #      X OR X[CONS]    A    X                       # JANDRE 
                   #           A[K]       B    A    K                  # JANDRE 
                   #         B/C<I,J>X    C    X         I    J    B/C # JANDRE 
                   #       B/C<I,J>A[K]   D    A    K    I    J    B/C # JANDRE 
                   #           P<A>       F    A                   P   # JANDRE 
                   #          OTHER       I                            # JANDRE 
BEGIN 
*CALL COMEX 
    XREF PROC DMPTRD; 
    XDEF PROC CLSSAV; 
    XDEF PROC CLSSRE; 
    ITEM I,J; 
PROC CLSSAV(A); #CLSS SAVE# 
    BEGIN 
    ARRAY A [0:0] S(1); ITEM AA I (0,0,60); 
    AA[0] = STRUC;
    AA[1] = OBJX; 
    AA[2] = LSTR; 
    AA[3] = WINX; 
    AA[4] = FBDX; 
    AA[5] = NBDX; 
    AA[6] = FBDY; 
    AA[7] = NBDY; 
    AA[8] = MDTP; 
    END 
PROC CLSSRE (A); #CLSS RESTORE# 
    BEGIN 
    ARRAY A [0:0] S(1); ITEM AA I (0,0,60); 
    STRUC = AA[0];
    OBJX = AA[1]; 
    LSTR = AA[2]; 
    WINX = AA[3]; 
    FBDX = AA[4]; 
    NBDX = AA[5]; 
    FBDY = AA[6]; 
    NBDY = AA[7]; 
    MDTP = AA[8]; 
    END 
CONTROL EJECT;                                                           JANDRE 
  
    LSTR=I; 
         IF OPTR[I] EQ QILOP"PRIM"
         OR OPTR[I] EQ QILOP"VALU"   THEN 
         BEGIN #UNSUBSCRIPTED ITEM# 
         STRUC=S"A";
CL00:    OBJX=I;
         $BEGIN                                                          JANDRE 
         DMPTRD(OBJX);
         $END                                                            JANDRE 
         RETURN;
         END
    IF OPTR[I] EQ QILOP"SUBS" THEN
         BEGIN #SUBSCRIPTED ITEM# 
         STRUC=S"B";
CL10:    WINX=ROPD[I];
         OBJX=LOPD[I];
         $BEGIN                                                          JANDRE 
         DMPTRD(WINX);
         DMPTRD(OBJX);
         $END                                                            JANDRE 
         RETURN;
         END
    IF OPTR[I]EQ QILOP"FUNI"                                             JANDRE 
    AND(FNUM[I] EQ S"BIT" OR FNUM[I] EQ S"BYTE"                          JANDRE 
                              OR FNUM[I] EQ S"PFUN")THEN                 JANDRE 
         BEGIN #FUNCTIONAL MODIFIER LEFT SIDE#
         MDTP=ROPD[I]; #BEAD TYPE#
         I=LOPD[I]; 
         IF OPTR[I] EQ QILOP"PRIM" THEN 
              BEGIN #CHAR,MANT,NENT,POS,ODD,ENTRY,PFUN# 
              STRUC=S"F"; 
              GOTO CL00;
              END 
         IF OPTR[I] EQ QILOP"FLST" THEN 
              BEGIN #BIT,BITY,BYTE-FIRST FLST#
              J=LOPD[I]; #SECOND FLST#
              I=ROPD[I]; #PRIM,SUBS,FUNI-BITY#
              FBDX=LOPD[J]; 
              NBDX=ROPD[J]; 
         $BEGIN                                                          JANDRE 
              DMPTRD(FBDX); 
              DMPTRD(NBDX); 
         $END                                                            JANDRE 
              IF OPTR[I] EQ QILOP"PRIM" THEN
                   BEGIN #UNSUBSCRIPTED ITEM# 
                   STRUC=S"C";
                   GOTO CL00; 
                   END
              IF OPTR[I] EQ QILOP"SUBS" THEN
                   BEGIN #SUBSCRIPTED ITEM# 
                   STRUC=S"D";
                   GOTO CL10; 
                   END
              END #FIRST FLST#
         END #FIRST FUNI# 
    STRUC=S"I"; #NOT A LEFT SIDE# 
END 
TERM
