*DECK S$GNGR
          PROC  S$GNGR(SPEC$, WSAS$); 
  
#**       S$GNGR -  GENERATE- GET USER RECORD                          #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         S$GNGR(SPEC$, WSAS$):                                        #
#                                                                      #
#     GIVEN-                                                           #
#         SPEC$ = USER SPECIFICATION.                                  #
#         WSAS$ = ALLOCATION OF WORKING STORAGE AREA.                  #
#                                                                      #
#     GENERATES-                                                       #
#         "GETREC":   TRY TO GET A RECORD FROM USER.                   #
#                     IF CANNOT,                                       #
#                         SET REGISTER = END-OF-DATA                   #
#                         JUMP TO "GOTIREC".                           #
#                     PUT THE USER RECORD AT WSAS$OREC.                #
  
  
          BEGIN 
  
*CALL A 
  
*CALL E$
  
*CALL SPEC$ 
  
*CALL WSAS$ 
  
          XREF
              BEGIN 
              PROC  S$ERROR;           # HANDLE USER ERRORS            #
              PROC  S$GNGR1;           # GEN- GET-USER-RECORD, CASE 1  #
              PROC  S$GNGR2;           # GEN- GET-USER-RECORD, CASE 2  #
              END 
  
          ARRAY  FITARRAY[0:99];
              ITEM  FITADDR      U(0, 0,60);     # ADDRESS OF FIT      #
  
          ITEM  I            I;        # INDEX TO SPEC$                #
          ITEM  NFILES       I;        # NUMBER OF INPUT FILES         #
          CONTROL DISJOINT; 
  
          CONTROL INERT;
  
CONTROL EJECT;
  
#     SET UP ARRAY OF FIT ADDRESSES FOR CASES 1 AND 2                  #
  
          NFILES = 0; 
          I = SPEC$1STINF;
          FOR I=I WHILE I NQ 0 DO 
              BEGIN 
              NFILES = NFILES + 1;
              IF NFILES GR 100 THEN    # IF MORE THAN 100 INPUT FILES  #
                  BEGIN 
                  S$ERROR(E$54);       # WARN USER OF ERROR            #
                  I = 0;               # STOP ACCEPTING MORE FILES     #
                  END 
              ELSE
                  BEGIN 
                  FITADDR[NFILES-1] = SPEC$INFIT[I];
                  I = SPEC$NEXTIN[I]; 
                  END 
              END 
  
#     DECIDE ON WHICH COMBINATION OF FILE INPUT AND/OR OWN1            #
  
          IF SPEC$1STINF NQ 0 THEN     # IF AT LEAST 1 INPUT FILE      #
              BEGIN 
  
#     GENERATE-   "GETREC":  GO TO "ENTRY<N>" ACCORDING TO             #
#                             VALUE IN "GETSTATE"  (ORIGINALLY 0)      #
#                 "ENTRY0":  GET RECORD VIA RECORD MANAGER             #
#                             ON END-OF-FILE GO TO "EOF"               #
#                            GO TO "GOTUREC".                          #
#                 "EOF":     DISPOSE OF INPUT FILE.                    #
#                            IF ANOTHER INPUT FILE,                    #
#                                OPEN IT                               #
#                                GO TO "GETREC".                       #
#                        (IF OWN2 PROCEDURE)                           #
#                            SET "GETSTATE" = 2.                       #
#                 "ENTRY2":  CALL OWN2 PROCEDURE TO DETERMINE <ACTION> #
#                            IF <ACTION> = *INSERT*,                   #
#                                COPY USER RECORD TO WSAS$OREC         #
#                                GO TO "GOTUREC".                      #
#                        (END OF OWN2-ONLY CODE)                       #
#                            SET "GETSTATE" = 3.                       #
#                 "ENTRY3":  SET REGISTER = END-OF-DATA.               #
#                            GO TO "GOTIREC".                          #
  
              S$GNGR1(SPEC$OWN1,SPEC$OWN2,WSAS$OREC,(SPEC$MRL-1)/10 +1, 
                  NFILES, FITARRAY, SPEC$FASTIN,
                  SPEC$OWNT,SPEC$VERIFY); 
#***#         RETURN; 
              END 
  
          ELSE                         # IF NO INPUT FILES             #
  
              BEGIN 
              S$GNGR2(SPEC$OWN1, SPEC$OWN2, WSAS$OREC, SPEC$OWNT);
#***#         RETURN; 
              END 
  
#     GENERATE-   "GETREC":  GO TO "ENTRY<N>" ACCORDING TO VALUE IN    #
#                             "GETSTATE" (ORIGINALLY 0).               #
  
  
          END  # S$GNGR # 
          TERM
