*DECK MASSAGE 
USETEXT RPTEXT
PROC MASSAGE; 
          BEGIN 
  
          #MASSAGE  ROUTINE#
          #THIS ROUTINE#
          #- IS CALLED BY RANALCONTROL# 
          #- PERFORMS A SORT ON THE ISUBTLINK TO PRODUCE# 
          #THE FINAL FORM SUBTOTALING-TABLE  NOW THAT ALL#
          #REPORT GROUPS FOR THE CURRENT REPORT HAVE BEEN PROCESSED#
          #- CALLS ARGROUP  ROUTINE#
  
  
          #DECLARATIONS FOR MASSAGE#
  
          XREF   PROC         ARGROUP;
          ITEM
                 STARTINGPT   I,
                 LASTENTRY    I,
                 PTRCURR      I,
                 PTR2SMALLEST I,
                 TEMP1        I,
                 $DUMMY$      I,
                 TEMP2        I;
  
  
          XREF   PROC         INTERCEPT;
          XREF   PROC         RWSET    ;
          XREF   PROC         RWSET1   ;
          XREF   PROC         GETNEXT  ;
          XREF   FUNC         RP$AUXPTR;
          XREF   FUNC         RWGET    ;
          XREF   FUNC         RWGET1   ;
  
*CALL RPCOMM
*CALL GETSET
*CALL TABLNAMES 
          CONTROL EJECT;
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EPTRACE("MASSAGE")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
  
  
          #* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *# 
          #PROCESSING PROCEDURES FOR MASSAGE# 
  
  
          #FIRST, PERFORM A SORT (VIA "SIMPLE EXCHANGE" METHOD) ON# 
          #ISUBTLINK AND TRANSFORM IT (REARRANGE IT) INTO#
          #SUBTLINK  (ONE AND THE SAME PHYSICAL TABLE).X# 
          #SORT KEYS ARE DETAIL-GROUP-NAME  AND  SUM-COUNTER WHICH# 
          #HAVE BEEN COMBINED UNDER THE DECLARATION  SUBTSORTFELD  TO#
          #FACILITATE SORTING.X#
          #BUILDCFTABLS SETS UP FSUBT4CURRD#
          #WHEN IT BUILDS THE FIRST  INIT-SUBT-ENTRY FOR THE CURRENT# 
          #REPORT. THUS WILL SORT ENTRIES FROM FSUBT4CURRD# 
          #TO WHATEVER ENTRY IS INDICATED BY CURRSUBTOPTR.X#
  
          IF FSUBT4CURRD  EQ  0 
              #CURRENT REPORT CONTAINED SUBTOTALLING CANDIDATES#
          THEN
              RWSET1(BASE$SUBTOTL  #CURRIRTPTR#,0); 
          ELSE
              BEGIN 
              STARTINGPT = FSUBT4CURRD; 
              FSUBT4CURRD = 0;
              #RESET TO 0 FOR NEXT RD#
              LASTENTRY = CURRSUBTOPTR; 
              #POINTS TO LAST#
              #ENTRY BUILT WITHIN CURRENT REPORT.#
              FOR $DUMMY$ = 0 WHILE STARTINGPT  LS  LASTENTRY DO
                  BEGIN 
                  #THIS LOOP CONTROLS NUMBER OF PASSES MADE#
                  #STARTINGPT INDICATES THE FIRST ENTRY FOR THE#
                  #PASS ABOUT TO BE MADE.#
                  PTRCURR = STARTINGPT; 
                  PTR2SMALLEST = PTRCURR; 
                  FOR $DUMMY$ = 0 WHILE PTRCURR LS LASTENTRY DO 
                      BEGIN 
                      PTRCURR =  RWGET(ISUBTLINK  ,PTRCURR);
                      IF  RWGET(SUBTSORTFELD  ,PTRCURR)  LS 
                           RWGET(SUBTSORTFELD,PTR2SMALLEST) 
                      THEN
                          PTR2SMALLEST  = PTRCURR;
                      END 
  
                  # EXCHANGE STARTING ENTRY AND SMALLEST ENTRY #
  
                  TEMP1 = RWGET(SUBTXDETAIL,PTR2SMALLEST);
                  TEMP2 = RWGET(SUBTXDETAIL,STARTINGPT);
                  RWSET(SUBTXDETAIL,PTR2SMALLEST,TEMP2);
                  RWSET(SUBTXDETAIL,STARTINGPT,TEMP1);
  
                  TEMP1 = RWGET(SUBTXSUMCNTR,PTR2SMALLEST); 
                  TEMP2 = RWGET(SUBTXSUMCNTR,STARTINGPT); 
                  RWSET(SUBTXSUMCNTR,PTR2SMALLEST,TEMP2); 
                  RWSET(SUBTXSUMCNTR,STARTINGPT,TEMP1); 
  
                  TEMP1 = RWGET(SUBTXSCIDENT,PTR2SMALLEST); 
                  TEMP2 = RWGET(SUBTXSCIDENT,STARTINGPT); 
                  RWSET(SUBTXSCIDENT,PTR2SMALLEST,TEMP2); 
                  RWSET(SUBTXSCIDENT,STARTINGPT,TEMP1); 
  
                  TEMP1 = RWGET(SUBTXSITABLE,PTR2SMALLEST); 
                  TEMP2 = RWGET(SUBTXSITABLE,STARTINGPT); 
                  RWSET(SUBTXSITABLE,PTR2SMALLEST,TEMP2); 
                  RWSET(SUBTXSITABLE,STARTINGPT,TEMP1); 
  
                  STARTINGPT =   RWGET(ISUBTLINK,STARTINGPT); 
                  END 
              #BRAVO -- THEY ARE IN ORDER  AND THE TABLE# 
              #WILL HENCEFORTH BE REFERRED TO AS# 
              #*  SUBTLINK. * # 
  
              #ADD A DELIMITER ENTRY TO SUBTLINK# 
              GETNEXT(SUBTLINK);
              RWSET1(SUBT$DELIM  #CURRSUBTOPTR#,0); 
              END 
          #* * * * * * * * * * * * * * * * * * * * * * * * * * * *# 
          ARGROUP;
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EXTRACE("MASSAGE")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          END #MASSAGE# 
          TERM
