*DECK FIGSUB
USETEXT TDESATT 
USETEXT TINDTBL 
      PROC FIGSUB(PARAM,RC);
          BEGIN 
                                                                         FIGSUB 
          XREF PROC CONVERT;
          XREF PROC MOVEC;
          ARRAY PARAM S(2); 
          ITEM    ENTRYTYPE U(0,0,3), 
           PCONVTCD U(1,0,6), 
                    PEDIT B(0,3,1), 
                  FROMCHAR  U(0,4,4), 
                  FROMADDRESS I(0,24,18), 
                  FROMPTR I(1,24,18), 
                  STACKADD I(1,6,18); 
          ARRAY ZD[1];
                                   # BIT SET IF CONVERT REQUIRES FROM  #
                                   # ATTRIBUTE FOR CORRESPONDING       #
                                   # CONVERSION CODE                   #
          BEGIN 
          ITEM Z I(0,0,60) = [O"20177777704020140000",   # IF EDIT     #
                              O"00077777700000000000"];  # IF NO EDIT  #
          END 
          ITEM RC,SUB,UB,LG,WP,BP,CP,CP1,BP1,WP1; 
          BASED ARRAY II; ITEM INTE I(0,0,60);
          ARRAY P S(2); 
            ITEM PPEDIT B(0,3,1), 
                  PFROMCHAR U(0,4,4), 
                  PNBCHAR U(0,12,12), 
                  PFROMWORD U(0,24,18), 
                  PFROMPTR U(1,24,18),
                  PCONVERTCODE U(1,0,6),
                  PWORD1 U(0,0,60), 
                  PWORD2 U(1,0,60); 
          ITEM LENG;                                                    001180
          XREF PROC UPBUN;
          RC = 0; 
          P<INDTBL> = STACKADD[0];
          UB = UPBND[0];                                                001220
          LENG = 0;                                                     001230
          WP = 0;                                                       001240
          BP = TBLGS[0]-1;                                              001250
          CP = BP;                                                      001260
          IF BP NQ 0 THEN                                               001270
          BEGIN                                                         001280
            REP: IF NOT DEPNDFG[WP] THEN                                001290
              BEGIN                                                     001300
                  IF INTESUB[WP] THEN                                   001310
                    BEGIN 
                    P<II> = INDCE[WP];
                    SUB = INTE[0]; # INTEGER SUBSCRIPT                 #
                    END 
                  ELSE SUB = INDCE[WP];                                 001330
                  LENG = LENG + (SUB-1) * ENTYLG[WP];                   001340
              END                                                       001350
              ELSE CP = WP;                                             001360
              WP = WP + 1;                                              001370
              IF WP LS BP THEN GOTO REP;                                001380
          END                                                           001400
      LENG = LENG * 6;
          UPBUN(INDTBL,UB,FROMPTR[0],RC); 
          IF RC NQ 0 THEN RETURN; 
          P<INDTBL> = P<INDTBL> + CP;                                   000860
          IF LASTFG[0] THEN                                             000170
            BEGIN 
            IF UB LS 1 THEN        # IF SUBSCRIPT LESS THEN 1...       #
              BEGIN 
              RC = 330;            # DIAG: DEPEND ON ITEM LESS THAN 1  #
                                   # FOR ARRAY SUBSCRIPTED BY LAST     #
              RETURN; 
  
              END 
            ELSE
              BEGIN 
              SUB = UB;            # SAVE SUBSCRIPT VALUE              #
              GOTO CONT;           # GO FETCH SUBSCRIPTED ITEM         #
  
              END 
            END 
          SUB = 1;                                                      000210
          IF INTESUB[0] THEN
          BEGIN P<II> = INDCE[0]; 
                SUB = INTE[0];
          END 
          ELSE SUB = INDCE [0]; 
        CONT: # #                                                       000270
          LG = ENTYLG[0]; 
          P<DESATT1> = FROMADDRESS[0];
          WP = DEWPOS[0]; 
          BP = DBITPOS[0];
          SUB = SUB - 1;
          CP = WP * 60 + BP + LG * 6 * SUB; 
          CP = CP + LENG;                                               001420
          WP1 = CP / 60;
          BP1 = CP - WP1 * 60;
          CP1 = BP1 / 6;
          CP = FROMCHAR[0]; 
          FROMCHAR[0] = CP1;
          DEWPOS[0] = WP1;
          DBITPOS[0] = BP1; 
          LG = PCONVTCD[0]; 
          IF PEDIT[0] THEN UB = 0;
          ELSE UB = 1;
          IF PCONVTCD[0] EQ 0 THEN
          BEGIN FROMADDRESS[0] = WP1; 
                MOVEC(PARAM); 
                FROMADDRESS[0] = P<DESATT1>;
          END 
          ELSE
          BEGIN 
          IF B<LG,1>Z[UB] EQ 0 THEN FROMADDRESS[0] = WP1; 
          CONVERT(PARAM,RC);
          FROMADDRESS[0] = P<DESATT1>;
     END
          DEWPOS[0] = WP; 
          DBITPOS[0] = BP;
          FROMCHAR[0] = CP; 
          RETURN; 
          END 
          TERM; 
