*DECK S$GNSMO 
          IDENT  S$GNSMO
          TITLE   GENERATE CODE FOR SUM RESULT (UPPER)
          COMMENT GENERATE CODE TO SAVE SUM RESULTS (RSA/BUFFER)
  
*CALL LBLPTR
  
**        S$GNSMO- GENERATE CODE TO SAVE SUM RESULTS (RSA/BUFFER) 
* 
*     CALLING SEQUENCE- 
*         S$GNSMO(BITOFFSET, NBITS, WORDOFFSET, REMAIN, BUFREC);
* 
*     GIVEN-
*         BITOFFSET = OFFSET OF (SUB)FIELD WITHIN RSA/BUFFER WORD 
*         NBITS = LENGTH OF (SUB)FIELD WITHIN WORD
*         WORDOFFSET = OFFSET OF WORD WITHIN RSA/BUFFER 
*         REMAIN = NO OF REMAINING BITS OF SUM FIELD IN NEXT WORD.
*         BUFREC = TRUE ("0) IF RECORD IN BUFFER
*                = FALSE (0) IF RECORD IN RSA 
* 
*     DOES- 
*         GENERATE CODE TO- 
*                SAVE THE (SUB)FIELD FROM X3 TO THE LL RSA/BUFFER WORD
*                SAVE THE (SUB)FIELD FROM X5 TO THE CR RSA/BUFFER WORD
* 
*     GENERATED CODE EXPECTS REGISTERS- 
*         SAVE AS S$GNSMM, WITH 
*                B4 = LL RSA/BUFFER ADDRESS 
*                B6 = CR RSA/BUFFER ADDRESS 
* 
  
          ENTRY  S$GNSMO
 S$GNSMO  SUBR
          SB1    1           CONSTANT 1 
  
*         OBTAIN PARAMETERS 
  
          SA4    A1+4        ADDR OF BUFREC 
          SA4    X4          VALUE OF BUFREC
          SB4    X4          B4 = BUFREC
          SA4    A1+2 
          SA4    X4 
          SB5    X4          B5 = WORDOFFSET
  
          SA4    X1          X4 = BITOFFSET 
  
          SA5    A1+1 
          SA5    X5          X5 = NBITS 
          IX4    X4+X5       X4 = BITOFFSET+NBITS 
          SX7    X4-60
          BX7    -X7         X7 = 60-(BITOFFSET+NBITS)
          SA3    A1+3        ADDR OF REMAIN 
          SA3    X3          X3 = REMAINING BITS IN NEXT WORD 
          SB3    X3               OF SUM FIELD
  
* SHIFT TO RE-ALIGN FOR UPPER PART OF SUM FIELD IN THIS WORD
  
          GEN    (BX7 X3) 
          GEN    (AX3 0),B3 
          SB7    B0-B3
          GEN    (MX0 60),B7
          GEN    (BX7 -X0*X7) 
          GEN    (SA7 "SUMSVX3")
  
          GEN    (BX7 X5) 
          GEN    (AX5 0),B3 
          SB7    B0-B3
          GEN    (MX0 60),B7
          GEN    (BX7 -X0*X7) 
          GEN    (SA7 "SUMSVX5")
  
  
*         SET UP MASK 
  
          GEN    (MX0 0),X5 
          GEN    (LX0 0),X5            (X5 = NBITS MASK, LOW) 
  
  
*         CR
  
          GEN    (SA2 B6+0),B5         *X2 = CR WORD
  
          IFTHEN B4"0        IF RECORD IN BUFFER
            GEN    (SA1 "FETOFCR")     *CALL CHKLIMIT TO ADJUST FOR CIO 
            GEN    (RJ "CHKLIMIT")     *  BUFFER WRAP-AROUND, IF ANY
   GEN (SB0 0)
            ENDIF.
  
          GEN    (LX2 0),X4 
          GEN    (BX2 -X0*X2) 
          GEN    (BX7 X0*X5)
          GEN    (BX7 X2+X7)
  
          IFTHEN X7\0        IF POSITIVE OR ZERO MODIFIER 
            GEN    (LX7 0),X7 
          ELSE- 
            GEN    (LX7 60),X7
            ENDIF.
  
          GEN    (SA7 A2) 
  
  
          EXIT
          END 
