*DECK S$GNPRU 
          PROC S$GNPRU(SPEC$, OREC, ORSA, REC$);
  
#**       S$GNPRU -  GENERATE- PUT INTERNAL RECORD TO USER             #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         S$GNPRU(SPEC$, <OREC>, <ORSA>, REC$):                        #
#                                                                      #
#     GIVEN-                                                           #
#         SPEC$ = USER SPECIFICATION.                                  #
#         <OREC>  = WSAF$OREC OR WSAS$OREC, WHICH IS                   #
#                    OFFSET IN WSA$ FOR EXTERNAL RECORD                #
#         REC$ = FORMAT OF INPUTERNAL RECORD.                          #
#         <OREC> = WSAF$OREC OR WSAS$OREC, WHICH IS                    #
#          THE WORD OFFSET IN WSA$ FOR THE RECORD STORAGE AREA.        #
#                                                                      #
#     DOES-                                                            #
#         GENERATES CODE TO PUT AN INTERNAL RECORD TO THE SUER.        #
#                                                                      #
#     GENERATED 170 CODE DOES-                                         #
#         DISPOSES OF RECORD DESCRIBED BY X6.                          #
#         PRESERVES X6.                                                #
#         LEAVES B2 = CONTENTS OF "WSA".                               #
#         LEAVES B1 = 1.                                               #
  
  
          BEGIN 
          ITEM  OREC         I;        # OFFSET FOR EXTERNAL RECORD    #
          ITEM  ORSA         I;        # WSA$ OFFSET FOR REC STOR AREA #
  
*CALL A 
  
*CALL REC$
  
*CALL SPEC$ 
  
          XREF
              BEGIN 
              PROC  S$GNCHK;           # GEN- OWN5 COMPARE CODE        #
              PROC  S$GNPR1;           # GEN- PUT RECORD, CASE 1       #
              PROC  S$GNPR2;           # GEN- PUT RECORD PART 2        #
              PROC  S$GNPR3;           # GEN- PUT RECORD PART 3        #
              PROC  S$GNREV;           # GEN- REVERT RECORD            #
              END 
  
          ITEM  RECLENBYT    I;        # EXT REC LEN IN BYTES          #
          ITEM  RECLENWRD    I;        # EXT REC LEN IN WORDS          #
  
          CONTROL DISJOINT ;
  
          CONTROL INERT;
  
CONTROL EJECT;
  
          S$GNREV(SPEC$, OREC, ORSA, REC$); 
  
          IF SPEC$FIXED THEN
              RECLENBYT = SPEC$FIXLEN;
          ELSE
              RECLENBYT = SPEC$MRL; 
  
          RECLENWRD = (RECLENBYT + 9)/10; 
  
          IF SPEC$OWN5 NQ 0 THEN
              BEGIN 
              S$GNPR2(SPEC$OWN3, SPEC$OWN4, SPEC$OWN5, SPEC$MRL,
                         OREC, RECLENWRD, REC$LK1, REC$LK2);
              S$GNCHK(REC$LK1, REC$LK2);
              S$GNPR3(SPEC$OWN3, SPEC$OWN4, OREC, RECLENWRD,
                SPEC$OUTFIT,RECLENBYT,SPEC$FASTOUT,SPEC$OWN5,SPEC$OWNT);
              END 
          ELSE
              BEGIN 
              S$GNPR1(SPEC$OWN3, SPEC$OWN4, OREC, RECLENWRD,
                  SPEC$OUTFIT, RECLENBYT, SPEC$FASTOUT, SPEC$OWNT); 
              END 
  
          END  # S$GNPRU #
          TERM
