*DECK SETPOS
USETEXT TOPTION 
USETEXT TREPORT 
USETEXT TRPTLST 
USETEXT TXSTD 
      PROC SETPOS;
  
#----------------------------------------------------------------------#
#                                                                      #
#  THE FOLLOWING PROCS ARE XDEF"D WITHIN THIS DECK:                    #
#                                                                      #
#     SETPOS                                                           #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
  
           DEF COLUMN #XCOLUMN#;
          DEF CURTAB #XTAB#;
  
          BASED ARRAY A;
            ITEM AMRPT I(0,42,18),
                 ACLASS I(0,12,6),
              ADISPSIZ U(0,4,11), 
          ALLFG B(0,4,1), 
          UPBND I(0,30,12), 
          ADECPT  I(0,21,6),
                 AWPOS I(0,18,18),
         ABPOS  U(0,36,6),
                 ALG I(0,42,18),
                 AMURAL U(0,0,60),
         APICSZ I(0,27,15), 
                 AMLG I(0,0,3); 
      XDEF ITEM CALLTYP      I;    # CALLTYPE OF THIS REPORT ENTRY     #
      XDEF ITEM CTR          I = 0; 
      ITEM ENDCOL       I;         # ENDING COLUMN POSITION            #
      XDEF ITEM HEADADDR     I = 0; 
      ITEM I            I;         # SCRATCH TEMPORARY                 #
      ITEM J            I;         # SCRATCH TEMPORARY                 #
      XDEF ITEM JUSTCENT     B = FALSE; 
      XDEF ITEM LEVELNB      I = 0; 
      XDEF ITEM MAX          I; 
       DEF DFTRPWD #O"40000000000001000000"#;  #DEFAULT VALUE FOR 
                                                REPORTLIST WORD 1,
                                                BEYOND IS ON, 
                                                LINE NB IS 1# 
         DEF DFTRPWD2 #O"04010000000000000000"#;
  
      XDEF ITEM SAMELINE     B = FALSE; 
      XDEF ITEM TLG          I = 0; 
  
      XREF PROC DIAG;              # ISSUE DIAGNOSTIC MESSAGE TO USER  #
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
          PROC RPTED; 
          BEGIN 
          ITEM I; 
          IF XCENTER
          THEN
          BEGIN 
          XCENTER = FALSE;
          ENDCOL = NTABCOL(COLUMN) - 1; 
          IF ENDCOL LQ 0
            OR JUSTCENT            # CENTER IN ENTIRE WIDTH OF PAGE    #
                                   # OR SECTION                        #
          THEN
            BEGIN 
            IF CALLTYP EQ 1        # IF DETAIL                         #
            THEN
              BEGIN 
              ENDCOL = SECTWID;    # RIGHT COLUMN IS SECTION WIDTH     #
              END 
            ELSE
              BEGIN 
              ENDCOL = PSCOLUMN;   # RIGHT COLUMN IS PAGE WIDTH        #
              END 
            END 
          JUSTCENT = FALSE;        # RESET TO INITIAL ASSUMPTION       #
          TLG = TLG + CHARLENGTH[REPORTINDEX];
                  J = ENDCOL - COLUMN + 1;  # LENGTH OF *TO* FIELD     #
                  I = J - TLG;
                  IF I GQ 0 THEN COLUMN = COLUMN + (I+1) / 2; 
                  ELSE
                  BEGIN 
              DIAG(180);
                  END 
              END 
              REPORTINDEX = REPORTINDEX - CTR;
              FOR I = 0 STEP 1 UNTIL CTR DO SETTOPOS; 
              CTR = 0;
              TLG = 0;
          REPORTWORD1[REPORTINDEX] = DFTRPWD; 
          REPORTWORD2[REPORTINDEX] = DFTRPWD2;
          RETURN; 
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
       PROC SETTOPOS;                  #PROC TO SET WORD AND CHAR POS#
       BEGIN                           #OF TO FLD#
           MAX = 1;                # ASSUME ONE OCCURENCE OF THIS ITEM #
           LEVEL[REPORTINDEX] = LEVELNB;   #SET LEVEL NB# 
           HEADPOINTER[REPORTINDEX] = HEADADDR; #SET HEAD POINTER#
           IF SAMELINE THEN                #SET NECESSARY FLAGS TO# 
           BEGIN                           #REFLECT SAME LINE#
               CONTINUATN[REPORTINDEX] = TRUE;
               LINENUMBER[REPORTINDEX] = LINENUMBER[REPORTINDEX-1]; 
               BEYOND[REPORTINDEX] = FALSE; 
           END ELSE 
           SAMELINE = TRUE;                #RESET SAME LINE#
           CALLTYPE[REPORTINDEX] = CALLTYP;  #SET CALL TYPE#
          IF TYPENTRY[REPORTINDEX] EQ 4 
          THEN
          BEGIN P<A> = STACKADD[REPORTINDEX]; 
          IF ALLFG[0] THEN MAX = UPBND[0];
          END 
          ELSE MAX = 1; 
           IF XCENTER THEN        #IF CENTERED IS ON, CALCULAT# 
           BEGIN                           #THE NEW BEG COL OF TO FLD#
          ENDCOL = NTABCOL(COLUMN) - 1; 
          IF ENDCOL LQ 0
            OR JUSTCENT            # CENTER IN ENTIRE WIDTH OF PAGE    #
                                   # OR SECTION                        #
          THEN
            BEGIN 
            IF CALLTYP EQ 1        # IF DETAIL                         #
            THEN
              BEGIN 
              ENDCOL = SECTWID;    # RIGHT COLUMN IS SECTION WIDTH     #
              END 
            ELSE
              BEGIN 
              ENDCOL = PSCOLUMN;   # RIGHT COLUMN IS PAGE WIDTH        #
              END 
            END 
          JUSTCENT = FALSE; 
          J = ENDCOL - COLUMN + 1;  # LENGTH OF *TO* FIELD             #
          I = J - CHARLENGTH[REPORTINDEX] * MAX;
          IF I LS 0 THEN
          BEGIN DIAG(180);  #FIELD TOO LONG#
          END 
               ELSE COLUMN = COLUMN + (I+1)/2;  #CALCULATE NEW COLUMN#
           END
           J = COLUMN / 10;                #WORD POS OF TO FLD# 
          I = COLUMN - J *10; 
          TOCHAR[REPORTINDEX] = I;
                                 #SET CHAR POSITION#
          ADDRTO[REPORTINDEX] = LOC(FORMDLADDR);
           TOADDRESS[REPORTINDEX] = J;     #SET WORD ADDRESS# 
          COLUMN = COLUMN + 
               MAX *
                              CHARLENGTH[REPORTINDEX];
          IF CALLTYP EQ 1          # IF DETAIL                         # QU3A339
          THEN                                                           QU3A339
            BEGIN                                                        QU3A339
            ENDCOL = SECTWID;      # REPORT WIDTH IS SECTION WIDTH     # QU3A339
            END                                                          QU3A339
          ELSE                                                           QU3A339
            BEGIN                                                        QU3A339
            ENDCOL = PSCOLUMN;     # REPORT WIDTH IS PAGE WIDTH        # QU3A339
            END                                                          QU3A339
          IF COLUMN - 1 GR ENDCOL  # LONGER THAN REPORT WIDTH          # QU3A339
          THEN                                                           QU3A339
            BEGIN 
            DIAG(298);
            STDNO;
            END 
          ENDCOL = NTABCOL(COLUMN-1) -1;
          IF REPORTINDEX GQ MAXREPORT  # IF REPORT BUFFER FULL         #
          THEN
            BEGIN 
            DIAG (122); 
            STDNO;
            END 
          REPORTINDEX = REPORTINDEX + 1;
           XCENTER = FALSE; 
           RETURN;
       END
  
  
  
  
#----------------------------------------------------------------------#
  
  
  
  
# BEGINNING OF EXECUTABLE CODE FOR  S E T P O S                        #
  
  
          BEGIN 
          IF CTR EQ 0 THEN
              BEGIN 
                  SETTOPOS; 
                  REPORTWORD1[REPORTINDEX] = DFTRPWD; 
          REPORTWORD2[REPORTINDEX] = DFTRPWD2;
                  CTR = 0;
                  TLG = 0;
              END 
              ELSE RPTED; 
              RETURN; 
          END 
  
  
  
  
#----------------------------------------------------------------------#
  
  
      END 
      TERM
