*DECK S$GNILO 
          IDENT  S$GNILO
          TITLE  S$GNILO - INVERT NUMERIC LEADING OVERPUNCH 
          COMMENT  GENERATE- INVERT NUMERIC LEADING OVERPUNCH 
**        S$GNILO - INVERT NUMERIC LEADING OVERPUNCH
* 
*   CALLING SEQUENCE -
*         S$GNILO(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 = 1 TO INDICATE LEADING OVERPUNCH, SIGN IN *X0 
* 
*         GENERATES CODE TO CONVERT THE LEADING OVERPUNCH INTO
*         THE APPROPRIATE SIGN IN *X0 
* 
*         CALLS S$GNIN
* 
          SPACE  4
          ENTRY  S$GNILO
S$GNILO   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 
* 
******* 
  
                             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,AX0-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 ACROSS *X1
          GEN    (BX0 X1) 
  
          SA0    1           INDICATES LEADING OVERPUNCH
  
          CALL   S$GNIN 
          EXIT
  
S$STRIP   EXTERNAL           TABLE TO STRIP OVERPUNCHES 
  
          END 
