*DECK S$SEQX
          PROC S$SEQX(CALLTYP, GROUP, EQUGR, SEQNM);
#**       S$SEQX - CHECK THE ORDER OF THE SEQ_ CALLS                   #
#                                                                      #
#      CALLING SEQUENCE -                                              #
#         S$SEQX(CALLTYP,GROUP,EQUGR,SEQNM):                           #
#                                                                      #
#      GIVEN -                                                         #
#         CALLTYP = STATUS TYPE - CSTYP"X" - WHERE X IS SEQN,SEQA,SEQR,#
#            SEQS OR 0(DUMMY TYPE).                                    #
#         GROUP = GROUP NUMBER SUPPLIED BY S$NEWGR                     #
#         EQUGR = NEW GROUP NUMBER FOR EQUATES IN THE COL-SEQUENCE     #
#            TO BE USED BY THE SM5SEQS AND SM5SEQR ROUTINES            #
#         SEQNM = CONTAINS SEQNAME GIVEN BY SM5SEQN                    #
#                                                                      #
#      DOES -                                                          #
#         THIS ROUTINE ASSURES THAT THE ORDER OF THE SEQ_ CALLS        #
#            IS CORRECT -                                              #
#             THAT SM5SEQN IS CALLED BEFORE SM5SEQS,_SEQR, OR _SEQA    #
#             THAT SM5SEQR AND _SEQA ARE CALLED ONLY ONCE FOR EACH     #
#                COLLATING SEQUENCE SPECIFIED                          #
#         THIS ROUTINE ALSO CAN BE CALLED WITH CALLTYP = 0, THEN       #
#            IT WILL CALULATE A NEW GROUP NUMBER AND SET IT            #
#            INTO EQUGR, AND WILL TAKE SEQNM PARAMETER AND             #
#            STORES IT'S ADDRESS(FIGUARATIVELY) FOR USE BY S$SEQS      #
#                                                                      #
  
          BEGIN 
  
*CALL CSTYP 
  
          ITEM CALLTYP  S:CSTYP;       # TELLS WHAT ROUTINE CALLED THIS#
          ITEM GROUP;                  # GROUP NUMBER FOR RP$GROUP     #
          ITEM EQUGR;                  # NEW GROUP NO. FOR EQUATES     #
          ITEM SEQNM    C(10);         # NAME IN LAST SM5SEQN CALL     #
  
*CALL A 
  
*CALL E$
  
*CALL STATUS$ 
  
          ITEM GRP       I;             # COPY OF 'GROUP'              #
          ITEM SEQAFLG  B=FALSE;       # TRUE IF _SEQA WAS CALLED      #
          ITEM SEQNFLG  B=FALSE;       # TRUE IF _SEQN WAS CALLED      #
          ITEM SEQRFLG  B=FALSE;       # TRUE IF _SEQR WAS CALLED      #
          ITEM SN       C(10);         # SEQNM STORED INTO SN          #
  
          XREF
              BEGIN 
              PROC S$ERROR; 
              FUNC S$NEWGR;           # GIVES CURRENT RP$GROUP NUMBER  #
              END 
  
  
          IF CALLTYP EQ 0  THEN 
              BEGIN 
              EQUGR = S$NEWGR;
              SEQNM = SN; 
              GROUP = GRP;
              END 
  
          IF CALLTYP EQ CSTYP"SEQN"   THEN
              BEGIN 
              SN = SEQNM;              # STORE SEQNM FOR LATER USE     #
              SEQNFLG = TRUE; 
              SEQAFLG = FALSE;
              SEQRFLG = FALSE;
              GROUP = S$NEWGR;
              GRP = GROUP;
              END 
  
          IF CALLTYP EQ CSTYP"SEQS"   THEN
              BEGIN 
              IF NOT SEQNFLG  THEN
                  BEGIN 
                  S$ERROR(E$91);  # SEQN MUST BE CALLED BEFORE ANY     #
#                    OTHER SEQ PARAMETER CAN BE GIVEN                  #
                  STATUS$NORML = FALSE; 
#***#             RETURN; 
                  END 
              SEQNM = SN; 
              GROUP = GRP;
              END 
  
          IF CALLTYP EQ CSTYP"SEQA"  THEN 
              BEGIN 
              IF NOT SEQNFLG  THEN
                  BEGIN 
                  S$ERROR(E$91);  # SEQN MUST BE CALLED BEFORE ANY     #
#                    OTHER SEQ PARAMETER CAN BE GIVEN                  #
                  STATUS$NORML = FALSE; 
#***#             RETURN; 
                  END 
              IF SEQAFLG  THEN  # SM5SEQA HAS ALREADY BEEN CALLED      #
                  BEGIN 
                  S$ERROR(E$90);  # SEQR AND SEQA MAY BE SPECIFIED ONLY#
#                    ONCE FOR EACH COLLATING SEQUENCE                  #
                  STATUS$NORML = FALSE; 
#***#             RETURN; 
                  END 
  
#               ELSE SM5SEQN HAS BEEN PROPERLY CALLED SO GO ON         #
  
              SEQAFLG = TRUE; 
              SEQNM = SN; 
              GROUP = GRP;
              END 
  
          IF CALLTYP EQ CSTYP"SEQR"  THEN 
              BEGIN 
              IF NOT SEQNFLG  THEN
                  BEGIN 
                  S$ERROR(E$91);  # SEQN MUST BE CALLED BEFORE ANY     #
#                    OTHER SEQ PARAMETER CAN BE GIVEN                  #
                  STATUS$NORML = FALSE; 
#***#             RETURN; 
                  END 
              IF SEQRFLG  THEN  # SM5SEQR HAS ALREADY BEEN CALLED      #
                  BEGIN 
                  S$ERROR(E$90);  # SEQR AND SEQA MAY BE SPECIFIED ONLY#
#                    ONCE FOR EACH COLLATING SEQUENCE                  #
                  STATUS$NORML = FALSE; 
#***#             RETURN; 
                  END 
  
#               ELSE SM5SEQN HAS BEEN PROPERLY CALLED SO GO ON         #
  
              SEQRFLG = TRUE; 
              SEQNM = SN; 
              GROUP = GRP;
              END 
  
#           IF ANY OTHER CSTYP IS USED THEN DON'T DO ANYTHING          #
  
          END  # OF S$SEQX #
          TERM
