*DECK  S$MERGE
          PROC  S$MERGE(NPARMS,MRL,BA); 
#**       S$MERGE -  START COLLECTING MERGE PARAMETERS                 #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         SMMERGE(MRL,BA):                                             #
#         (THIS CALLS THE MACHINE-DEPENDANT ROUTINE SMMERGE WHICH      #
#          COUNTS PARAMETERS AND CALLS S$MERGE.)                       #
#     GIVEN-                                                           #
#         NPARMS = NUMBER OF PARAMETERS SUPPLIED.                      #
#         MRL = MAXIMUN RECORD LENGTH IN CHARACTERS.                   #
#         BA = DESIRED SIZE OF SCRATCH SPACE TO BE USED BY SORT.       #
#                                                                      #
#     DOES-                                                            #
#         IF THE LAST CALLED SM<XXX> PROCEDURE WAS NOT SMEND (OR SMRTN)#
#             ISSUE A DIAGNOSTIC, AND                                  #
#             EXIT.                                                    #
#         IF EXACTLY 1 OR 2 PARAMETERS WERE NOT ORIGINALLY SUPPLIED,   #
#             ISSUE A DIAGNOSTIC, AND                                  #
#             EXIT.                                                    #
#         SAVES THE "MRL" RAW PARAMETER.                               #
#         IF BA WAS SUPPLIED,                                          #
#             SAVES THE "BA" RAW PARAMETER.                            #
  
  
          BEGIN 
          ITEM  NPARMS       I;        # NUMBER OF ORIGINAL PARAMETERS #
          ITEM  MRL          I;        # MAXIMUM RECORD LENGTH (CHARS) #
          ITEM  BA           I;        # DESIRED SIZE OF WORKING SPACE #
  
          XREF
              BEGIN 
              PROC  S$CMFRF;           # FREE FIXED BLOCK              #
              PROC  S$ERROR;           # HANDLE USER ERROR             #
              FUNC  S$INSEQ  B;        # TRUE IFF CALL IN SEQUENCE     #
              PROC  S$SVREL;           # SAVE RELOCATABLE PARAMETER    #
              ITEM  S$SMFLG  I;        # FLAG SORT OR MERGE            #
              END 
  
  
*CALL A 
  
*CALL E$
  
*CALL RP$ 
  
*CALL SQ$ 
  
          XREF
              ITEM  S$MRL    I;        # MRL FOR S$FILE                #
  
CONTROL DISJOINT; 
  
CONTROL INERT;
  
CONTROL EJECT;
  
  
#     IF THE LAST CALLED SM<XXX> PROCEDURE WAS NOT SMEND (OR SMRTN),   #
#         ISSUE A DIAGNOSTIC, AND                                      #
#         EXIT.                                                        #
  
          IF NOT S$INSEQ(SQ$"SMMERGE")  THEN
              BEGIN 
              S$ERROR(E$110);          # CALL OUT OF SEQUENCE          #
              RETURN ;
              END 
  
#     IF EXACTLY 1 OR 2 PARAMETERS WERE NOT ORIGINALLY SUPPLIED,       #
#         ISSUE A DIAGNOSTIC, AND                                      #
#         EXIT.                                                        #
  
          IF NPARMS LQ 0
           OR NPARMS GR 2  THEN 
              BEGIN 
              S$ERROR(E$108);          # TOO FEW/MANY PARAMETERS       #
#***#         RETURN; 
              END 
  
#     SAVE THE "MRL" RAW PARAMETER.                                    #
  
          RP$TYPE = RP$T"MRL";
          $BEGIN
          RP$GROUP = 0;                # CAN ONLY OCCUR ONCE           #
          $END
          RP$VALUE = MRL; 
          S$SVREL(RP$);                # SAVE THE RAW PARAMETER        #
  
#     IF BA WAS SUPPLIED,                                              #
#         SAVE THE "BA" RAW PARAMETER                                  #
  
          IF NPARMS EQ 2  THEN
              BEGIN 
              RP$TYPE = RP$T"BA"; 
              $BEGIN
              RP$GROUP = 0;            # CAN ONLY OCCUR ONCE           #
              $END
              RP$VALUE = BA;
              S$SVREL(RP$);            # SAVE THE RAW PARAMETER        #
              END 
  
  
          S$SMFLG = 2;   # THIS IS A MERGE RUN                         #
          END # S$MERGE # 
          TERM
