*DECK S$GNSMA 
          IDENT  S$GNSMA
          COMMENT GENERATE SUM CODE INITIALIZATION
  
*CALL LBLPTR
  
**        S$GNSMA- GENERATE SUM CODE INTIALIZATION
* 
*     CALLING SEQUENCE- 
*         S$GNSMA(BUFREC);
* 
*     GIVEN-
*         BUFREC = TRUE ("0) IF RECORD IN CIO BUFFER
*                = FALSE (0) IF RECORD IN RSA 
* 
* 
*     DOES- 
*         GENERATE CODE TO- 
*                SET UP SUM TEMPORARY STORAGE 
*                STORE GENERATED CODE REGISTER VALUES 
*                SET OVERFLOW FLAG OFF
* 
*     GENERATED CODE EXPECTS REGISTERS- 
*         X1 = SACRED 
*         X2 = INDEX TO TOURNEMENT
*         X4 = LL DESCRIPTOR
*         X6 = CR DESCRIPTOR
*         A4 = ADDRESS OF LL DESCRIPTOR 
*         B1 = 1
*         B2 = TOURNEMENT/WSA ADDRESS 
* 
  
          ENTRY  S$GNSMA
 S$GNSMA  SUBR
          SB1    1           CONSTANT 1 
          SA2    X1          VALUE OF BUFREC
          SB3    X2          B3 = BUFREC
  
          NEWLBL SUMNOEQ
          GEN    (NZ X7,"SUMNOEQ")     *BYPASS SUM CODE IF UNEQUAL KEY
  
  
* CHECK IF BIT 58 OF X6 (OR X4) IS SET, THEN X6 (OR X4) IS A SUMMED ONE 
* SKIP SUMMING THESE RECORDS BY JUMPING TO "SUMNOEQ"
* ALSO SET X7 SO THE SUMMED RECORD BECOMES THE WINNER 
  
          GEN    (MX7 0)               *ASSUME X6 WINNER
          GEN    (BX5 X6) 
          GEN    (LX5 1)               *SHIFT BIT 58 TO LEFT-MOST 
          GEN    (MI X5,"SUMNOEQ")     *IF BIT 58 OF X6 SET 
  
          GEN    (MX7 1)               *ASSUME X4 WINNER
          GEN    (BX5 X4) 
          GEN    (LX5 1)               *SHIFT BIT 58 TO LEFT-MOST 
          GEN    (MI X5,"SUMNOEQ")     *IF BIT 58 OF X4 SET 
  
*         SET BIT 58 OF X4 SINCE ITS SUM FIELDS WILL HAVE ZEROS 
  
          GEN    (BX4 X5+X7)           *SET LEFT-MOST BIT 
          GEN    (LX4 59)              *SHIFT BACK TO 58TH
  
*         SET UP TEMPORARY STORAGE
  
          NEWLBL NEXT 
          GEN    (EQ "NEXT") JUMP AROUND STORAGE
  
          GENLBL SUMSVX2     X2 STORAGE 
          GENMAC (DATA 0) 
          GENLBL SUMSVX3
          GENMAC (DATA 0) 
          GENLBL SUMSVX5
          GENMAC (DATA 0) 
  
          IFTHEN B3"0        IF RECORD IN BUFFER
  
            NEWLBL CHKLIMIT 
            GENLBL CHKLIMIT 
            GENMAC (DATA -1)
  
* THIS GENERATED CODE EXPECTS A CIO PTR IN A2 AND ADDRESS OF FET IN X1
* IF A2 > LIMIT PTR, IT WILL WRAP A2 AROUND IN FRONT OF FIRST PTR.
  
            GEN    (SA0 X1)              *SAVE FET ADDR 
            GEN    (SA1 A0+4)            *LIMIT PTR 
            GEN    (SB3 X1)              *B3 = 18 BITS LIMIT PTR
            GEN    (SB5 A2)              *B5 = CIO PTR
            GEN    (SB5 B5-B3)           *COMPARE W/ LIMIT
            GEN    (LT B5,B0,"CHKLIMIT") *IF PTR IN BOUND 
  
            GEN    (SA1 A0+B1)           *FIRST PTR 
          GEN    (SX1 X1)         *KEEP LOW 18 BITS 
            GEN    (SB3 X1)              *B3 = FIRST
            GEN    (SA2 B3+B5)           *BRING A2 AROUND IN FRONT OF FIRST 
            GEN    (EQ "CHKLIMIT")       *RETURN
  
            NEWLBL FETOFLL
            GENLBL FETOFLL
            GENMAC (DATA 0) 
  
            NEWLBL FETOFCR
            GENLBL FETOFCR
            GENMAC (DATA 0) 
            ENDIF.
  
  
          GENLBL NEXT 
  
*         STORE REGISTER VALUES 
  
          GEN    (BX7 X2) 
          GEN    (SA7 "SUMSVX2")
  
*          COUNT THE NUMBER OF RECORDS SUMMED BY
*          INCREMENTING A GLOBAL VARIABLE 'S$ARRY'
  
            GEN   (SA2 S$ARRY+10)      * 11TH ELEMENT OF STAT ARRAY 
            GEN   (SX7 X2+B1)          * INCREMENT NO OF REC.S SUMMED 
            GEN   (SA7 A2)             * PUT NEW VALUE INTO STAT.ARRAY
  
  
 S$ARRY   EXTERNAL
          EXIT
          END 
