*DECK S$GNSMI 
          IDENT  S$GNSMI
          COMMENT GENERATE SUM CODE TO OBTAIN (SUB)FIELD (RSA/BUFFER) 
  
*CALL LBLPTR
  
**        S$GNSMI- GENERATE SUM CODE TO OBTAIN (SUB)FIELD (RSA/BUFFER)
* 
*     CALLING SEQUENCE- 
*         S$GNSMI(BITOFFSET, NBITS, WORDOFFSET, BUFREC);
* 
*     GIVEN-
*         BITOFFSET = OFFSET WITHIN RSA/BUFFER WORD 
*         NBITS = LENGTH OF (SUB)FIELD IN WORD
*         WORDOFFSET = OFFSET OF WORD WITHIN RSA/BUFFER 
* 
*     DOES- 
*         GENERATE CODE TO- 
*                SET/ADD TO X3 THE (SUB)FIELD WITHIN LL RSA/BUFFER WORD 
*                SET/ADD TO X5 THE (SUB)FIELD WITHIN CR RSA/BUFFER WORD 
* 
*     GENERATE CODE EXPECTS REGISTERS-
*         SAME AS S$GNSMA, BUT- 
*                WITHOUT X2 
*                WITH B4 = LL RSA/BUFFER ADDRESS
*                WITH B6 = CR RSA/BUFFER ADDRESS
*                WITH X3 = PARTIALLY BUILT LL FIELD, OR 0 
*                WITH X5 = PARTIALLY BUILT CR FIELD, OR 0 
* 
  
          ENTRY  S$GNSMI
 S$GNSMI  SUBR
          SB1    1           CONSTANT 1 
          SA4    A1+3        ADDR OF BUFREC 
          SA4    X4          VALUE OF BUFREC
          SB3    X4          B3 = VALUE OF 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 
  
*         SET UP MASK 
  
          GEN    (MX0 0),X5 
          GEN    (LX0 0),X5            (X5 = NBITS MASK, LOW) 
  
*         LL
  
          GEN    (SA2 B4+0),B5         *X2 = LL 
  
          IFTHEN B3"0        IF RECORD IN BUFFER
            GEN    (SA1 "FETOFLL")     *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)           (X2 = (SUB)FIELD, LOW) 
          GEN    (SA3 "SUMSVX3")
          GEN    (LX3 0),X5            (X3 = PREVIOUS (SUB)FIELD, HIGH) 
          GEN    (BX3 X2+X3)           (X3 = FIRST (SUB)FIELD OR WHOLE FIELD) 
          GEN    (BX7 X3) 
          GEN    (SA7 A3) 
  
*         CR
  
          GEN    (SA2 B6+0),B5         *X2 = CR 
  
          IFTHEN B3"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    (SA5 "SUMSVX5")
          GEN    (LX5 0),X5 
          GEN    (BX5 X2+X5)
          GEN    (BX7 X5) 
          GEN    (SA7 A5) 
  
          EXIT
          END 
