*DECK S$GNRVK 
          PROC S$GNRVK(TYPE,KEYLENGTH,KEYOFFSET,ASC,CS,KEYORSUM); 
  
#**       S$GNRVK- GENERATE CODE TO REVERT A FIELD                    # 
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         S$GNRVK(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 INTERNAL FORMAT TO ITS        #
#             EXTERNAL FORMAT, AND MOVE THE FIELD FROM THE INTERNAL    #
#             RECORD TO THE EXTERNAL 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$ 
  
*CALL SPEC$ 
  
          XREF
              BEGIN 
              PROC  S$ABORT;           # HANDLE AN INTERNAL ABORT      #
              PROC  S$GNRD;            # GEN- REVERT DISPLAY           #
              PROC  S$GNRF;            # GEN- REVERT FLOATING POINT    #
              PROC  S$GNRFS;           # GEN- REVERT FLOATED SIGN CHRS #
              PROC  S$GNRI;            # GEN- REVERT INTEGER           #
              PROC  S$GNRL;            # GEN- REVERT LOGICAL           #
              PROC  S$GNRLO;           # GEN- REVERT LEADING OVERPUNCH #
              PROC  S$GNRLS;           # GEN- REVERT LEADING SEPARATE  #
              PROC  S$GNRNS;           # GEN- REVERT NON-SIGNED        #
              PROC  S$GNRP;            # GEN- REVERT PACKED            #
              PROC  S$GNRPN;           # GEN- REVERT PACKED NON-SIGNED #
              PROC  S$GNRTO;           # GEN- REVERT TRAILING OVERPUNCH#
              PROC  S$GNRTS;           # GEN- REVERT TRAILING SEPARATE #
              END 
  
*CALL MACHINE 
  
  
          CONTROL DISJOINT; 
  
          CONTROL INERT;
  
CONTROL EJECT;
  
          GOTO KTSW$[TYPE]; 
  
  
DISPLAY:                     # CHARACTERS WITH *DISPLAY* CHARACTER SET #
          S$GNRD(KEYOFFSET,KEYLENGTH,ASC,CS); 
          RETURN; 
  
  
FLOAT:                       # FLOATING POINT NUMBERS                  #
          S$GNRI(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
INTEGER:                     # SIGNED BINARY INTEGER                   #
          S$GNRI(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
LOGICAL:                     # UNSIGNED BINARY INTEGERS                #
          S$GNRL(KEYOFFSET,KEYLENGTH,ASC);
#***#     RETURN; 
  
  
LEADING:                     # CHARACTERS AS NUMBER WITH LEADING SIGN  #
#***#     RETURN; 
  
  
NUMERICFS:                   # NUMERIC CHAR. IN FLOATING SIGN FORMAT   #
          S$GNRF(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM); 
#***#     RETURN; 
  
  
NUMERICNS:                   # NUMERIC CHARACTERS WITHOUT A SIGN       #
          S$GNRNS(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
  
#***#     RETURN; 
  
  
NUMERICLO:                   # NUMERIC CHAR. W/ LEADING OVERPUNCH SIGN #
          S$GNRLO(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
NUMERICLS:                   # NUMERIC CHAR. WITH LEADING SEPARATE SIGN#
          S$GNRLS(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
NUMERICTO:                   # NUMERIC CHAR. W/ TRAILING OVERPUNCH SIGN#
          S$GNRTO(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
NUMERICTS:                   # NUMERIC CHAR. W/ TRAILING SEPARATE SIGN #
          S$GNRTS(KEYOFFSET,KEYLENGTH,ASC,KEYORSUM);
#***#     RETURN; 
  
  
PACKED:                      # PACKED DECIMAL FORMAT WITH A SIGN       #
#***#     RETURN; 
  
  
PACKEDNS:                    # PACKED DECIMAL FORMAT WITHOUT A SIGN    #
#***#     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$GNRVK #
          TERM
