*DECK S$GNIVK 
          PROC S$GNIVK(TYPE,KEYLENGTH,KEYOFFSET,ASC,CS,KEYORSUM); 
  
#**       S$GNIVK- GENERATE CODE TO INVERT A FIELD                     #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         S$GNIVK(TYPE,KEYLENGTH,KEYOFFSET,ASC,CS)                    # 
#                                                                      #
#     GIVEN-                                                           #
#         TYPE = TYPE OF FIELD (INTEGER,DISPLAY,ETC.)                  #
#         KEYLENGTH = LENGTH OF FIELD WITHIN EXTERNAL RECORD           #
#         KEYOFFSET = OFFSET OF FIELD WITHIN EXTERNAL RECORD           #
#         ASC = TRUE IF ASCENDING SORT ORDER, FALSE IF DESCENDING      #
#         CS = COLLATING SEQUENCE LOACATION (NEEDED FOR KEY FIELDS    # 
#               (ONLY IF TYPE=DISPLAY)                                 #
  
#     DOES-                                                            #
#         GENERATE CODE TO-                                            #
#             CONVERT THE FIELD FROM ITS EXTERNAL FORMAT TO ITS        #
#             INTERNAL FORMAT, AND APPEND THE CONVERTED FIELD TO THE   #
#             INTERNAL RECORD.                                         #
#                                                                      #
#                                                                      #
  
          BEGIN 
          ITEM  TYPE                  U;
          ITEM  KEYOFFSET             I;
          ITEM  KEYLENGTH             I;
          ITEM  ASC                   B;
          ITEM  CS                    I;
          ITEM KEYORSUM            B;  # TRUE MEANS SUM,               #
                                       # FALSE MEANS KEY               #
  
*CALL A 
  
*CALL KTSW$ 
  
  
          XREF
              BEGIN 
              PROC  S$ABORT; # HANDLE INTERNAL ERROR                   #
              PROC  S$GNID;            # GEN- INVERT DISPLAY CHARS     #
              PROC  S$GNIF;            # GEN- INVERT FLOATED NUMBERS   #
              PROC  S$GNIFS;           # GEN- INVERT FLOATED SIGN CHRS #
              PROC  S$GNII;            # GEN- INVERT INTEGER           #
              PROC  S$GNIL;            # GEN- INVERT LOGICAL           #
              PROC  S$GNILO;           # GEN- INVERT LEADING OVERPUNCH #
              PROC  S$GNILS;           # GEN- INVERT LEADING SEPARATE  #
              PROC  S$GNINS;           # GEN- INVERT NON-SIGNED        #
              PROC  S$GNIP;            # GEN- INVERT PACKED            #
              PROC  S$GNIPN;           # GEN- INVERT PACKED, NON-SIGNED#
              PROC  S$GNITO;           # GEN- INVERT TRAILING OVERPUNCH#
              PROC  S$GNITS;           # GEN- INVERT TRAILING SEPARATE #
              END 
  
*CALL MACHINE 
  
          CONTROL DISJOINT; 
  
          CONTROL INERT;
  
          CONTROL EJECT;
  
          GOTO KTSW$[TYPE]; 
  
  
DISPLAY:                     # CHARACTERS WITH *DISPLAY* CHARACTER SET #
          S$GNID(KEYOFFSET,KEYLENGTH,ASC,CS); 
#***#     RETURN; 
  
  
FLOAT:                       # FLOATING POINT NUMBERS                  #
          S$GNII(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
INTEGER:                     # SIGNED BINARY INTEGER                   #
          S$GNII(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
LOGICAL:                     # UNSIGNED BINARY INTEGERS                #
          S$GNIL(KEYOFFSET,KEYLENGTH,ASC);
#***#     RETURN; 
  
  
LEADING:                     # CHARACTERS AS NUMBER WITH LEADING SIGN  #
#***#     RETURN; 
  
  
NUMERICFS:                   # NUMERIC CHAR. IN FLOATING SIGN FORMAT   #
          S$GNIF(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
NUMERICNS:                   # NUMERIC CHARACTERS WITHOUT A SIGN       #
          S$GNINS(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
  
#***#     RETURN; 
  
  
NUMERICLO:                   # NUMERIC CHAR. W/ LEADING OVERPUNCH SIGN #
          S$GNILO(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
NUMERICLS:                   # NUMERIC CHAR. WITH LEADING SEPARATE SIGN#
          S$GNILS(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
NUMERICTO:                   # NUMERIC CHAR. W/ TRAILING OVERPUNCH SIGN#
          S$GNITO(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
NUMERICTS:                   # NUMERIC CHAR. W/ TRAILING SEPARATE SIGN #
          S$GNITS(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
PACKED:                      # PACKED DECIMAL FORMAT WITH A SIGN       #
          S$GNII(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
PACKEDNS:                    # PACKED DECIMAL FORMAT WITHOUT A SIGN    #
          S$GNII(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
TRAILING:                    # CHARACTERS AS NUMBER WITH TRAILING SIGN #
#***#     RETURN; 
  
  
SEPARATE:                    # CHARACTERS AS A NUMBER WITH THE SIGN    #
                             # SPECIFIED AS A SEPARATE + OR -          #
#***#     RETURN; 
  
  
          END  # S$GNIVK #
          TERM
