*DECK S$GNITO 
          IDENT  S$GNITO
          TITLE  S$GNITO - INVERT NUMERIC TRAILING OVERPUNCH
          COMMENT  GENERATE- INVERT NUMERIC TRAILING OVERPUNCH
**        S$GNITO - INVERT NUMERIC TRAILING OVERPUNCH 
* 
*   CALLING SEQUENCE -
*         S$GNITO(OFFSET,LENGTH,ASC,KEYORSUM);
* 
*   GIVEN - 
*         OFFSET = NUMBER OF BIT STARTING THE KEY OR SUM FIELD
*           IN THE EXTERNAL RECORD. THE FIRST BIT IS NUMBER 0 
*         LENGTH = NUMBER OF BITS IN THE KEY/SUM FIELD OF THE 
*           EXTERNAL RECORD 
*         ASC = NONZERO IF KEY IS ASCENDING 
*             = ZERO IF KEY IS DESCENDING 
*         KEYORSUM = 1 FOR SUM FIELD, 0 FOR KEY 
*         S$LK = NUMBER OF BITS OF INFORMATION THAT HAVE BEEN 
*          APPENDED.  (USED BY S$GNAPN) 
*         S$OREC = WORD OFFSET WITHIN WSA$ OF EXTERNAL RECORD.
*          (USED BY S$GNIWD)
*         S$ORSA = WORD OFFSET WITHIN WSA$ OF RECORD STORAGE AREA.
*          (USED BY S$GNAPN)
* 
*   DOES -
*         SETS THE PARAMETERS INTO THE PROPER REGISTERS - 
*         B2 = BIT OFFSET OF FIELD IN EXTERNAL RECORD 
*         B3 = BIT LENGTH OF FIELD IN EXTERNAL RECORD 
*         B4 = 1 IF ASCENDING, 0 IF DESCENDING
*         X4 = 0 IF KEY FIELD, 1 IF SUM FIELD 
*         A0 = 2 TO INDICATE TRAILING OVERPUNCH, WITH 
*              SIGN IN *X0
* 
*         CALLS S$GNIN
* 
          SPACE  4
          ENTRY  S$GNITO
S$GNITO   SUBR
  
          SB1    1
  
  
* PUT PARAMETERS INTO PROPER REGISTERS
  
          SA2    X1          VALUE OF OFFSET
          SB2    X2          B2 = OFFSET
          SA2    A1+1        ADDRESS OF LENGTH
          SA2    X2          VALUE OF LENGTH
          SB3    X2          B3 = LENGTH
          SA2    A1+2        ADDRESS OF ASC 
          SA2    X2          VALUE OF ASC 
          SB4    X2          B4 = ASC 
          SA4    A1+3        ADDRESS OF KEYORSUM
          SA4    X4          X4 = VALUE OF KEYORSUM 
******* 
* 
*  GET THE OVERPUNCH CHARACTER FROM S$GNIWD 
* 
******* 
  
          SB5    B2          SAVE ORIGINAL OFFSET IN B5 
          SB2    B2+B3       OFFSET + LENGTH
          SB2    B2-6        GET LAST CHARACTER 
  
  
                             B2 = OFFSET OF FIELD WITHIN RECORD 
          CALL   S$GNIWD               *A5 := ADDRESS OF (FIRST) WORD 
         *USES   B6,B7,X0,AX1-3,X5,AX6 *X5 := (FIRST) WORD
                             X5 := OFFSET WITHIN WORD 
******* 
* 
*  RIGHT-JUSTIFY THE OVERPUNCH CHARACTER
* 
******* 
  
          SX5    X5+6 
          GEN    (LX5 0),X5 
         *USES   B6,B7,X0,AX1-3,AX6 
  
          GEN    (MX1 -6)              *ONE-BYTE MASK 
          GEN    (BX1 -X1*X5)          *OVERPUNCH CHAR IN *X1 
          GEN    (SA1 S$STRIP+X1)      *GET SIGN OF OVERPUNCH 
          GEN    (AX1 59)              *PROPAGATE SIGN BIT
          GEN    (BX0 X1) 
  
******* 
* 
*  NOW SET UP THE CALL TO S$GNIN
* 
******* 
          SA0    2           INDICATES TRAILING OVERPUNCH 
          SB2    B5          GET ORIGINAL OFFSET BACK 
  
          CALL   S$GNIN 
          EXIT
  
S$STRIP   EXTERNAL           TABLE TO STRIP OVERPUNCHES 
  
          END 
