*DECK S$GTIMI 
          PROC S$GTIMI(RP$,OWNFILE);
#**       S$GTIMI -  INTERACTIVELY QUERIES USER ABOUT MISC. PARAM.     #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         S$GTIMI(RP$,OWNFL):                                          #
#                                                                      #
#     GIVEN-                                                           #
#         RP$ = ARRAY CONTAINING TYPES OF RAW PARAMETERS               #
#         OWNFL = TRUE IFF FILE NAME GIVEN                             #
#                                                                      #
#     DOES-                                                            #
#         QUERIES USER IN REGARDS TO MISCELLANEOUS PARAMETERS          #
  
          BEGIN 
          ITEM  OWNFILE      B; 
  
  
*CALL A 
  
*CALL LINE$ 
  
  
*CALL KT$ 
  
*CALL QUERY$
  
*CALL RP$ 
  
  
*CALL RSFLAGS 
          XREF
              BEGIN 
              PROC  S$ABORT;           # HANDLE INTERNAL ABORT ERROR   #
              PROC  S$ANSKS;           # GETS SUM TYPE STATUS          #
              PROC  S$ANSNM;           # GETS NON-NEGATIVE INTEGER     #
              PROC  S$ANSYN;           # GETS Y/N ANSWER FROM I/U      #
              FUNC  S$NEWGR      I;    # GET A NEW GROUP NUMBER        #
              PROC S$PUTLN; 
              PROC  S$PTQUE;           # PUT QUERY TO USER             #
              ITEM  S$SMFLG  I;        # FLAG SORT OR MERGE            #
              END 
  
          ARRAY [1:20]  S(2); 
              BEGIN 
              ITEM  NAMEOFNUM    C(0, 0,11)  =
                                       [ "FIRST      "
                                       , "SECOND     "
                                       , "THIRD      "
                                       , "FOURTH     "
                                       , "FIFTH      "
                                       , "SIXTH      "
                                       , "SEVENTH    "
                                       , "EIGHTH     "
                                       , "NINTH      "
                                       , "TENTH      "
                                       , "ELEVENTH   "
                                       , "TWELFTH    "
                                       , "THIRTEENTH "
                                       , "FOURTEENTH "
                                       , "FIFTEENTH  "
                                       , "SIXTEENTH  "
                                       , "SEVENTEENTH"
                                       , "EIGHTEENTH "
                                       , "NINETEENTH "
                                       , "TWENTIETH  "
                                       ]; 
              ITEM  LENGTHOFNAME I(1,54, 6)  =
                                       [  5     # FIRST               # 
                                       ,  6      # SECOND              #
                                       ,  5      # THIRD               #
                                       ,  6      # FOURTH              #
                                       ,  5      # FIFTH               #
                                       ,  5      # SIXTH               #
                                       ,  7      # SEVENTH             #
                                       ,  5      # EIGHTH              #
                                       ,  5      # NINTH               #
                                       ,  5      # TENTH               #
                                       ,  8      # ELEVENTH            #
                                       ,  7      # TWELFTH             #
                                       ,  10     # THIRTEENTH          #
                                       ,  10     # FOURTEENTH          #
                                       ,  9      # FIFTEENTH           #
                                       ,  9      # SIXTEENTH           #
                                       ,  11     # SEVENTEENTH         #
                                       ,  10     # EIGHTEENTH          #
                                       ,  10     # NINETEENTH          #
                                       ,  9      # TWENTIETH           #
                                       ]; 
              END 
  
  
          ITEM  GMSW         I=1;      # INDEX TO GTIMILOC             #
          ITEM  KTSW         I;        # INDEX TO SWITCH KTSW$         #
          ITEM  NUM          I;        # NUMERIC RESPONSE FROM S$ANSNM #
          ITEM  NUM2         I;        # NUMERIC RESPONSE FROM S$ANSNM #
          ITEM  NSUMFIELDS   I;        # NUM OF USERS SUM FIELDS       #
          ITEM  GROUP        I;        # NEW GROUP NUMBER FROM S$NEWGR #
          ITEM  I            I;        # SCRATCH                       #
          ITEM  L            I;        # SCRATCH                       #
          ITEM  SUMTYPENAME C(12);
          ITEM  YES          B;        # INDICATE RESPONSE TO S$ANSYN  #
          ITEM  YES2         B; 
          ITEM  YES3         B; 
  
          SWITCH   GTIMILOC 
                ,   GTIMILOC1 
                ,   GTIMILOC2 
                ,   GTIMILOC3 
                ,   GTIMILOC4 
                ,   GTIMILOC5 
                ,   GTIMILOC6 
                ,   GTIMILOC7 
                ,   GTIMIEND
              ; 
  
  
CONTROL DISJOINT; 
  
CONTROL INERT;
  
CONTROL EJECT;
  
#      CHECK FLAG, IF FIRST TIME OR RESTART THEN RESET SWITCH          #
  
          IF B<2,1>S$FLAGS EQ 0 THEN
              BEGIN 
              GMSW = 1;                # RESET SWITCH FOR GTIMI        #
              B<2,1>S$FLAGS = 1;       # CHANGE FLAG                   #
              END 
  
          $BEGIN
          IF GMSW LS 1
            OR GMSW GR 8 THEN 
              S$ABORT("S$GTIMI"); 
          $END
  
          GOTO GTIMILOC[GMSW];
  
# TELLS USER ABOUT OPTIONS OF SORT/MERGE                               #
  
GTIMILOC1:  
          QUERY$LINE[1] = 
          "SORT/MERGE HAS OTHER OPTIONS: FASTIO, RETAIN, SUMMING AND";
          QUERY$LLINE[1] = 57;
          QUERY$LINE[2] = 
          "VERIFY. DO YOU WANT ANY OF THESE OPTIONS"; 
          QUERY$LLINE[2] = 40;
          QUERY$NLINES = 2; 
          S$ANSYN(QUERY$, YES); 
          IF YES THEN 
              BEGIN 
              QUERY$LINE[1] = 
              "DO YOU WANT A BRIEF DESCRIPTION OF THESE OPTIONS"; 
              QUERY$LLINE[1] = 48;
              QUERY$NLINES = 1; 
              S$ANSYN(QUERY$, YES2);
              IF YES2 THEN
                  BEGIN 
                  QUERY$LINE[1] = 
          "FOR A SORT RUN, THERE ARE FASTIO, RETAIN AND/OR SUMMING."; 
                  QUERY$LLINE[1] = 56;
                  QUERY$LINE[2] = 
          "FOR A MERGE RUN, THERE ARE FASTIO, RETAIN AND/OR VERIFY."; 
                  QUERY$LLINE[2] = 56;
                  QUERY$LINE[3] = 
          "FASTIO OPTION TELLS SORT/MERGE TO READ AND WRITE RECORDS"; 
                  QUERY$LLINE[3] = 56;
                  QUERY$LINE[4] = 
          "OF BLOCK TYPE C AND RECORD TYPE F, OR BLOCK TYPE I AND"; 
                  QUERY$LLINE[4] = 54;
                  QUERY$LINE[5] = 
      "RECORD TYPE W DIRECTLY RATHER THAN USING CYBER RECORD MANAGER."; 
                  QUERY$LLINE[5] = 62;
                  QUERY$NLINES = 5; 
                  S$PTQUE(QUERY$);
                  END    # IF DESCRIPTION WANTED #
  
              QUERY$LINE[1] = 
              "DO YOU WANT THE FASTIO OPTION";
              QUERY$LLINE[1] = 29;
              QUERY$NLINES = 1; 
              S$ANSYN(QUERY$, YES3);
              IF YES3 THEN
                  BEGIN 
                  RP$TYPE = RP$T"FASTIO"; 
                  GMSW = 2;   # GTIMILOC2 # 
#***#             RETURN; 
                  END 
  
GTIMILOC2:  
  
# QUERY ABOUT RETAINING RECORDS WITH SAME KEY VALUE                    #
  
              IF YES2 THEN    # IF DESCRIPTION WANTED # 
                  BEGIN 
                  QUERY$LINE[1] = 
            "THE RETAIN OPTION TELLS SORT/MERGE TO OUTPUT RECORDS"; 
                  QUERY$LLINE[1] = 52;
                  QUERY$LINE[2] = 
              "WITH EQUAL SORT KEYS IN THE SAME ORDER THEY ARE READ"; 
                  QUERY$LLINE[2] = 52;
                  QUERY$NLINES = 2; 
                  S$PTQUE(QUERY$);
                  END 
  
              QUERY$LINE[1] = "DO YOU WANT THE RETAIN OPTION";
              QUERY$LLINE[1] = 29;
              QUERY$NLINES = 1; 
              S$ANSYN(QUERY$, YES3);
              IF YES3 THEN
                  BEGIN 
                  RP$TYPE = RP$T"RETAIN"; 
                  GMSW = 3;    # GTIMILOC3 #
#***#             RETURN; 
                  END 
  
GTIMILOC3:  
          IF S$SMFLG EQ 1 THEN  # IF SORT RUN                          #
              BEGIN 
              IF YES2 THEN    # IF DESCRIPTION WANTED # 
                  BEGIN 
                  QUERY$LINE[1] = 
          "SUMMING OPTION SPECIFIES THAT RECORDS WITH ALL KEY FIELDS";
                  QUERY$LLINE[1] = 57;
                  QUERY$LINE[2] = 
          "EQUAL ARE COMBINED INTO ONE NEW RECORD. SUM FIELDS IN THE";
                  QUERY$LLINE[2] = 57;
                  QUERY$LINE[3] = 
          "NEW RECORD ARE FORMED BY ADDING THE VALUES IN THE";
                  QUERY$LLINE[3] = 49;
                  QUERY$LINE[4] = 
          "CORRESPONDING SUM FIELDS OF THE EQUAL KEY RECORDS."; 
                  QUERY$LLINE[4] = 50;
                  QUERY$NLINES = 4; 
                  S$PTQUE(QUERY$);
                  END 
  
              QUERY$LINE[1] = "DO YOU WANT THE SUMMING OPTION"; 
              QUERY$LLINE[1] = 30;
              QUERY$NLINES = 1; 
              S$ANSYN(QUERY$, YES3);
              IF YES3 THEN
                  BEGIN 
  
# QUERY AS TO HOW MANY SUM FIELDS THE USER HAS                         #
  
                  QUERY$LINE[1] = "HOW MANY SUM FIELDS DO YOU HAVE";
                  QUERY$LLINE[1] = 31;
                  QUERY$NLINES = 1; 
                  S$ANSNM(QUERY$, NSUMFIELDS);
  
# ASK FOR SUM TYPE OF SUM FIELDS IN ORDER OF IMPORTANCE                #
  
                  QUERY$LINE[1] = 
              "THE LEFT-MOST CHARACTER OR BIT OF A RECORD IS NUMBER 1.";
                  QUERY$LLINE[1] = 55;
                  QUERY$NLINES = 1; 
                  S$PTQUE(QUERY$);    # SEND QUERY TO USER #
  
                  FOR I = 1 STEP 1 UNTIL NSUMFIELDS DO
                      BEGIN 
  
                      GROUP = S$NEWGR;
                      RP$GROUP = GROUP; 
  
REASK:  
                      QUERY$LINE[1] = "WHAT IS THE TYPE OF THE "; 
                      C<24,11>QUERY$LINE[1] = NAMEOFNUM[I]; 
                      L = 24 + LENGTHOFNAME[I]; 
                      C<L,15>QUERY$LINE[1]= " SUM FIELD"; 
                      QUERY$LLINE[1] = L + 15;
                      QUERY$NLINES = 1; 
  
                      S$ANSKS(QUERY$, SUMTYPENAME, KTSW); 
  
                      IF KTSW LS 3 OR KTSW GR 11 THEN # BAD SUM NAME  # 
                          BEGIN 
                          QUERY$LINE[1] = SUMTYPENAME;
                          C<13,34>QUERY$LINE[1] = 
                            "IS NOT A SUM TYPE. PLEASE REENTER."; 
                          QUERY$LLINE[1] = 47;
                          QUERY$NLINES = 1; 
                          S$PTQUE(QUERY$);
  
    #***#                 GOTO REASK; 
                          END 
                      ELSE
                          BEGIN 
                          RP$TYPE = RP$T"SUMTYPE";
                          RP$VALUE = KTSW;
                          GMSW = 4;    # GTIMILOC4 #
    #***#                 RETURN; 
                          END 
  
# GET NO OF THE LEFT-MOST CHARACTER OR BIT IN THE SUM FIELDS           #
  
GTIMILOC4:  
                      QUERY$LINE[1] = "FOR THE "; 
                      C<8,11>QUERY$LINE[1] = NAMEOFNUM[I];
                      L = 8 + LENGTHOFNAME[I];
                      C<L,35>QUERY$LINE[1] =
                        " SUM FIELD, WHAT IS THE NUMBER"; 
                      QUERY$LLINE[1] = L + 35;
                      QUERY$LLINE[2] = 27;
                      QUERY$NLINES = 2; 
                      IF SUMTYPENAME EQ "BINARY_BITS" 
                        OR SUMTYPENAME EQ "INTEGER_BITS" THEN 
                          BEGIN 
                          QUERY$LINE[2] = "OF THE LEFT-MOST BIT       ";
                          RP$TYPE = RP$T"SUMBITPOS";
                          END 
                      ELSE
                          BEGIN 
                          QUERY$LINE[2] = "OF THE LEFT-MOST CHARACTER ";
                          RP$TYPE = RP$T"SUMBYTEPOS"; 
                          END 
  
                      S$ANSNM(QUERY$, NUM2);
                      RP$VALUE = NUM2;
                      GMSW = 5;    # GTIMILOC5 #
#***#                 RETURN; 
  
# GET THE NUMBER OF THE RIGHT-MOST CHARACTER OR BIT IN THE SUM FIELD   #
  
GTIMILOC5:  
                      QUERY$LINE[1] = "FOR THE "; 
                      C<8,11>QUERY$LINE[1] = NAMEOFNUM[I];
                      L = 8 + LENGTHOFNAME[I];
                      C<L,35>QUERY$LINE[1] =
                        " SUM FIELD, WHAT IS THE NUMBER"; 
                      QUERY$LLINE[1] = L + 35;
                      QUERY$LLINE[2] = 27;
                      QUERY$NLINES = 2; 
                      IF SUMTYPENAME EQ "BINARY_BITS" 
                        OR SUMTYPENAME EQ "INTEGER_BITS" THEN 
                          BEGIN 
                          QUERY$LINE[2] = "OF THE RIGHT-MOST BIT      ";
                          RP$TYPE = RP$T"SUMNBITS"; 
                          END 
                      ELSE
                          BEGIN 
                          QUERY$LINE[2] = "OF THE RIGHT-MOST CHARACTER";
                          RP$TYPE = RP$T"SUMNBYTES";
                          END 
  
                      S$ANSNM(QUERY$, NUM); 
                      IF NUM LS NUM2 THEN 
                          BEGIN 
                          LINE$LINE = 
        "THE RIGHT-MOST POSITION CANNOT BE LESS THAN THE LEFT-MOST!"; 
                          LINE$LENGTH = 60; 
                          S$PUTLN(LINE$); 
                          GOTO GTIMILOC5; 
                          END 
                      RP$VALUE = NUM - NUM2 + 1;  # LEN = LAST-FIRST+1 #
                      GMSW = 6;    # GTIMILOC6 #
#***#                 RETURN; 
  
  
GTIMILOC6:  
                          QUERY$LINE[1] = 
              "WHAT IS THE REPETITION FACTOR FOR THIS SUM FIELD"; 
                          QUERY$LLINE[1] = 48;
                          QUERY$NLINES = 1; 
                          S$ANSNM(QUERY$, NUM); 
                          RP$TYPE = RP$T"SUMREP"; 
                          RP$VALUE = NUM; 
                          GMSW = 7;    # GTIMILOC7 #
#***#                     RETURN; 
  
GTIMILOC7:  
                      END    # FOR LOOP # 
                  END 
              END 
  
          ELSE                  # IF MERGE RUN #
              BEGIN 
              IF YES2 THEN    # IF DESCRIPTION WANTED # 
                  BEGIN 
                  QUERY$LINE[1] = 
              "THE VERIFY OPTION TELLS SORT/MERGE TO CHECK MERGE INPUT";
                  QUERY$LLINE[1] = 55;
                  QUERY$LINE[2] = 
              "RECORDS FOR CORRECT ORDER. IF A MERGE INPUT RECORD IS";
                  QUERY$LLINE[2] = 53;
                  QUERY$LINE[3] = 
              "OUT OF ORDER, THE MERGE IS ABORTED AND A DIAGNOSTIC";
                  QUERY$LLINE[3] = 51;
                  QUERY$LINE[4] ="IS ISSUED.";
                  QUERY$LLINE[4] = 10;
                  QUERY$NLINES = 4; 
                  S$PTQUE(QUERY$);
                  END  #  IF YES2  #
  
              QUERY$LINE[1] = 
              "DO YOU WANT THE VERIFY OPTION";
              QUERY$LLINE[1] = 29;
              QUERY$NLINES = 1; 
              S$ANSYN(QUERY$, YES3);
              IF YES3 THEN
                  BEGIN 
                  RP$TYPE = RP$T"VERIFY"; 
                  GMSW = 8;     # GTIMIEND    # 
#***#             RETURN; 
                  END 
              END 
          END    # IF OPTION(S) WANTED #
  
# SET RP$TYPE TO $END$ TO INDICATE END OF S$GTIMI                      #
  
  
GTIMIEND: 
          RP$TYPE = RP$T"$END$";
#***#     RETURN; 
  
          END # S$GTIMI # 
          TERM
