*DECK TREPORT 
USETEXT TOPTION 
      PROC TREPORT; 
      BEGIN 
      CONTROL STEXT;
#       THIS IS  C R E P O R T                                         #
          XREF   BEGIN
            FUNC TABCOL I;
          FUNC   NTABCOL  I;  END 
          #THIS IS THE EVALUATE TABLE THAT HAD ALL THE STACK ADDRESS
           AND CONVERSION TABLE FOR THE ITEMS TAHT HAD TO BE EVALUATE 
           DURING REPORT GENERATION#
  
      COMMON CREPORT;        BEGIN
       ITEM CREPTLG;
          ITEM CURREPT C(10);  # LFN OF CURRENT REPORT #
          ARRAY TABS[0:2];  ITEM TAB;   #SET BY THE TAB DIRECTIVE#
  
                 #VALUES SET BY THE PAGE-SIZE DIRECTIVE                #
          ITEM   PSLINE,
                 PSCOLUMN,
                 PSSECTION, 
                  SECTWID,    #PSCOLUMN/PSSECTION - SECTION WIDTH # 
                 PSIMAGE, 
           PRINTSQ,       # 0 MEANS SERIAL, NOT 0 MEANS PARALLEL #
                 PSHORVER;         # 0=HORIZONTAL, 1=VERTICAL          #
  
          ITEM   ONCEFLG B;   #SET IF ONCE SPEC. FOR DETAIL#
          ITEM   XTAB, XLINE, XCOLUMN;  #TAB, LINE AND COLUMN MENTIONNED
                             IN THE MOST RECENT DIRECTIVE.  # 
          ITEM   XINT;       #TEMP STORAGE FOR INTEGER VALUE# 
          ITEM   XCENTER B;  #TRUE IF CENTERING SPECIFIED, ELSE FALSE#
          ITEM   ENDPGLINES;       # NUMBER OF LINES TAKEN BY # 
                             # RECAP AND FOOTING AT THE END OF A PAGE#
          ITEM NEXTTAB B;      #TRUE IF NEXT TAB CLAUSE GIVEN,
                              FALSE IF TAB INTEGER CLAUSE GIVEN.  # 
      ITEM LPLINE;    #LAST PRINTED LINE IN PAGE BUILD# 
      ITEM BLK,              #INITIALIZED TO DIS CODE BLANKS# 
           APERFORMLIST,     #POINTER TO BASED ARRAY# 
           ASAVESESS,        #POINTER TO BASED ARRAY# 
           SESEMPTY,         #POINTS TO FIRST EMPTY ENTRY IN SAVESESS#
          LASTPERF;          #PTR TO LAST USED ENTRY IN PERFORMLIST#
  
          ITEM EVAT B;
      ARRAY REPORT[9] S(2); 
      ITEM RPTEVBEF U(0,24,18), 
           RPTEVAFT U(0,42,18), 
           RPTWORD0 I(0,00,60), 
           RPTWORD1 I(1,00,60), 
           RPTMVBEF U(1,24,18), 
           RPTMVAFT U(1,42,18); 
      ARRAY FOOTEVAL[-1:MAXBREAK] S(2); 
      ITEM FEVBEF U(0,24,18), 
           FEVAFT U(0,42,18), 
           FMVBEF U(1,24,18), 
           FMVAFT U(1,42,18); 
      ARRAY HEADEVAL[-1:MAXBREAK] S(2); 
      ITEM HEVBEF U(0,24,18), 
           HEVAFT U(0,42,18), 
           HMVBEF U(1,24,18), 
           HMVAFT U(1,42,18); 
      ARRAY BRKEVAL[-1:MAXBREAK] S(2);
      ITEM BEVBEF U(0,24,18), 
           BEVAFT U(0,42,18), 
           BMVBEF U(1,24,18), 
           BMVAFT U(1,42,18); 
      ARRAY SELEVAL[-1:MAXSELECT] S(2); 
      ITEM SEVBEF U(0,24,18), 
           SEVAFT U(0,42,18), 
           SMVBEF U(1,24,18), 
           SMVAFT U(1,42,18); 
      ARRAY DTLEVAL[0:MAXSELECT] S(2);
      ITEM DEVBEF U(0,24,18), 
           DEVAFT U(0,42,18), 
           DMVBEF U(1,24,18), 
           DMVAFT U(1,42,18); 
      ARRAY TITEVMV[1:1] S(2);
      ITEM TITEVBEF U(0,24,18), 
           TITEVAFT U(0,42,18), 
           TITMVBEF U(1,24,18), 
           TITMVAFT U(1,42,18); 
      ARRAY RCPEVMV[1:1] S(2);
      ITEM RCPEVBEF U(0,24,18), 
           RCPEVAFT U(0,42,18), 
           RCPMVBEF U(1,24,18), 
           RCPMVAFT U(1,42,18); 
                 #IN THE FOLLOWING ARRAYS, THE ITEMS XXXFIRST, XXXLAST, 
                  XXXCURRENT ARE SUBSCRIPTS INTO THE ARRAY REPORTLIST.
                  THE XXXFIRST SUBSCRIPT POINTS TO WHERE THE ENCODED
                  DIRECTIVE BEGINS IN REPORTLIST, XXXLAST TO WHERE IT 
                  ENDS.  XXXCURRENT IS USUALLY UPDATED BY THE ROUTINE 
                  FORMATLINE AND CHECKED BY THE ROUTINES DETAIL,
                  HEADING, ETC...                                      #
          ARRAY SELDTLHEAD[1:MAXSELECT] P(2);    #ARRAY FOR SLECT AND 
                                                  AND DELTAIL DIRE# 
            ITEM SELTAG      I(0, 3, 9),         #TAG NUMBER# 
                 SELEXPR     I(0,42,18),         #ADDRESS OF EXPRESSION 
                                                  STACK FOR THIS SELECT#
                   SELRELT I(0,24,18),
                 SELWORD     I(0, 0,60),
                 DTLFIRST    I(1,24,12),
                 DTLLAST     I(1,36,12),
                 DTLCURRENT  I(1,48,12),
                 DTLSTATUS   I(1, 0, 3),
           DTLFTL U(1,3,7), 
           DTLEND U(1,10,7),
           DTLLB  U(1,17,7),
                 DTLWORD     I(1, 0,60);
          ARRAY BREAKHEAD[0:MAXBREAK] P(3); #ARRAY FOR BREAK AND
                                                  FOOTING AND HEADING 
                                                  DIRECTIVES# 
            ITEM BRKEJECT    B(0, 0, 1),         #1--EJECT ON, 0-- OFF# 
                 BRKOVERFLOW B(0, 1, 1),         # 1=BREAK ON OVERFLOW #
                                                 # 0=STANDARD BREAK    #
                 BRKLEVEL    I(0, 3, 9),         #BREAK LEVEL NUMBER# 
              BRKLOG B(0,12,1), 
                 BRKEXPR     U(0,42,18),  #ADDRESS OF EXPRESS STACK 
                                                  FOR THIS BREAK# 
          BRKRESULT U(0,24,18), 
                 BRKWORD     I(0, 0,60),
                 HDGFIRST    I(1,24,12),
                 HDGLAST     I(1,36,12),
                 HDGCURRENT  I(1,48,12),
                 HDGSTATUS   I(1, 0, 3),
           HDGFTL U(1,3,7), 
           HDGEND U(1,10,7),
           HDGLB  U(1,17,7),
                 HDGWORD     I(1, 0,60),
                 FTGFIRST    I(2,24,12),
                 FTGLAST     I(2,36,12),
                 FTGCURRENT  I(2,48,12),
                 FTGSTATUS   I(2, 0, 3),
           FTGFTL U(2,3,7), 
           FTGEND U(2,10,7),
           FTGLB  U(2,17,7),
                 FTGWORD     I(2, 0,60);
          ARRAY TITLEHEAD[1:1]; 
            ITEM TITFIRST    I(0,24,12),
                 TITLAST     I(0,36,12),
                 TITCURRENT  I(0,48,12),
                 TITSTATUS   I(0, 0, 3),
                 TITWORD     I(0, 0,60);
          ARRAY RECAPHEAD[1:1]; 
            ITEM RECFIRST    I(0,24,12),
                 RECLAST     I(0,36,12),
                 RECCURRENT  I(0,48,12),
                 RECSTATUS   I(0, 0, 3),
           RECFTL U(0,3,7), 
           RECEND U(0,10,7),
           RECLB  U(0,17,7),
                 RECWORD     I(0, 0,60);
          ARRAY  DATEHEAD[1:1];    #ARRAY FOR DATE DIRECTIVE# 
            ITEM DATFIRST    I(0,24,12),
                 DATLAST     I(0,36,12),
                 DATCURRENT  U(0,48,12),
                 DATWORD     I(0, 0,60);
          ARRAY  TIMEHEAD[1:1];  # ARRAY FOR TIME DIRECTIVE # 
            ITEM TIMFIRST    I(0,24,12),
                 TIMLAST     I(0,36,12),
                 TIMCURRENT  U(0,48,12),
                 TIMWORD     I(0, 0,60);
          ARRAY  PGNMHEAD[1:1];  #ARRAY FOR PAGE-NUMBER DIRECTIVE # 
            ITEM PGNFIRST    I(0,24,12),
                 PGNLAST     I(0,36,12),
                 PGNCURRENT  U(0,48,12),
                 PGNWORD     I(0, 0,60);
  
                 #REPORTLIST IS A GENERAL ARRAY TO RECEIVE ENCODED
                  DIRECTIVES SUCH AS DETAIL, HEADING, TITLE, ...
                  TO MINIMISE SPACE, THE VARIABLE LENGTH ENCODED
                  ROUTINES ARE STACKED INTO REPORTLIST, AND POINTERS TO 
                  WHERE THEY START AND END ARE SET IN THE ARRAYS
                  DETAILHEAD, HEADIHGHEAD, ETC...  #
          ITEM   REPORTINDEX;   # CURRENT INDEX ENTRY OF REPORTLIST 
                                  FOR THE SEMANTIC ROUTINES THAT SET
                                  THE ITEMS IN REPORTLIST.  # 
          ITEM AREPORTLIST; 
          ITEM RPTLISTASN B;
         ARRAY FORMATDLINE [0:MAXWPL];   # WORKING AREA WHERE FORMTLIN# 
          ITEM FMTDL  C(0,0,10);        #ASSEMBLES A LINE#
           ITEM PREVIOUSOURC; 
          ITEM FORMDLADDR;
          ITEM TOATTPTR;
          ARRAY TOATTRIBUTE[4]; 
            ITEM TOATTRIADD I(0,42,18), TOATTRLEFT I(0,24,18);
          ITEM RPTCTR,LVL,PSFLG;
          ITEM FLAGA B;            # SET TRUE BY SYNTAX WHEN ENTERING  #
                                   # SYNTAX CRACKING OF ANY BUT FIRST  #
                                   # REPORT OF MULTI-REPORT REPORT.    #
                                   # SET TRUE BY MOREHAF WHEN COMPILING#
                                   # REPORT WITH PREFACES/SUMMARIES.   #
                                   # SET FALSE BY SYNTAX WHEN NOT      #
                                   # PREPARING REPORT.                 #
          ITEM PAGENUM; 
          ARRAY RPTLFNS[0:RPTMAX]  S(3);
          ITEM   RPTNAME C(0,0,7),
                 RPTLEN I(0,42,6),
                 PRESUM U(1,0,3), 
                 ROOTPTR I(1,3,6),
                 LEVELPTR I(1,9,3), 
                 FLFNINFO U(1,12,18),  # ADDRESS OF LFNINFO ARRAY      #
                 PRIORITY U(1,30,30), 
          WORD1A I(0,0,60), 
          WORD3A I(2,0,60), 
                 WORD2 I(1,0,60), 
                 FROMLFN C(2,0,7),
                 FROMLEN I(2,42,6), 
                 SUMMARYED B(2,58,1), 
                 TEXTFG B(2,59,1);
         ITEM PRWFG;
         ARRAY CURPGATT[1];;                                            004720
         ARRAY XLINEATT[1];;                                            004730
         ARRAY CURRPTATT[1];;                                           004740
          ITEM NONEMPTYRPT B;                                           004060
         ITEM INCREMN I;           # INCREMENT FOR TOATTRIADD          #
                             END    #END OF COMMON CREPORT# 
        XREF ITEM DESLIST;
        XREF ITEM DEFLIST;
        XREF ITEM SPELIST;
      END 
      TERM
