*DECK S$GNILS 
          IDENT  S$GNILS
          TITLE  S$GNILS - INVERT NUMERIC LEADING SEPARATE
          COMMENT  GENERATE- INVERT NUMERIC LEADING SEPARATE
**        S$GNILS - INVERT NUMERIC LEADING SEPARATE 
* 
*   CALLING SEQUENCE -
*         S$GNILS(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 = 0 TO INDICATE PRESENCE OF SIGN IN *X0
* 
*         CALLS S$GNIN
* 
          SPACE  4
          ENTRY  S$GNILS
S$GNILS   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 SIGN 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 SIGN CHARACTER ( "+" OR "-" )
* 
******* 
  
          SX5    X5+6 
          GEN    (LX5 0),X5 
         *USES   B6,B7,X0,AX1-3,AX6 
******* 
* 
*  NOW DO SOMETHING MACHINE-DEPENDENT. THE CHARACTER AT THE 
*  RIGHT OF *X5 SHOULD BE 46B FOR "-" OR 45B FOR "+". THIS WILL 
*  BE BINARY 100110 (-) OR 100101 (+). NOTE THE SECOND BIT FROM 
*  THE RIGHT-    '             ' . THE INSTRUCTION LX5 58 WILL
*  PUT THIS BIT IN THE SIGN BIT OF *X5. 
* 
******* 
          GEN    (LX5 58) 
*  NOW PROPAGATE THE SIGN BIT ACROSS *X5
          GEN    (AX5 59) 
          GEN    (BX0 X5)    PUT RESULT INTO X0 FOR S$GNIN
  
******* 
* 
*  NOW SET UP THE CALL TO S$GNIN
* 
******* 
          SA0    0           INDICATES SIGN IN *X0
          SB2    B2+6        REMOVE SIGN FROM OFFSET
          SB3    B3-6        REMOVE SIGN FROM LENGTH
  
          CALL   S$GNIN 
          EXIT
  
          END 
