*DECK S$SORT
          PROC  S$SORT(NPARMS, MRL, BA);
  
#**       S$SORT -  START COLLECTING SORT PARAMETERS                   #
#                                                                      #
#     CALLING SEQUENCE-                                                #
#         SMSORT(MRL, BA):                                             #
#         (THIS CALLS THE MACHINE-DEPENDANT ROUTINE SMSORT WHICH       #
#          COUNTS PARAMETERS AND CALLS S$SORT.)                        #
#                                                                      #
#     GIVEN-                                                           #
#         NPARMS = NUMBER OF PARAMETERS SUPPLIED.                      #
#         MRL = MAXIMUM 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 
*CALL NPARMS
          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$ 
  
          XDEF
              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$"SMSORT")  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.                                    #
  
          S$MRL = MRL;                 # SAVE FOR S$FILE               #
          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 = 1;   # THIS IS A SORT RUN                          #
  
          END  # S$SORT # 
          TERM
