* 09/29/75 -- 10:00
* UTS/TEXT COMMAND DEFINITION PROC'S
* CALLED BY 'SYSTEM CMDDEF'
*
*
         DISP     X'012473'
*
         OPEN     SCMD,ECMD,LCMD,PCMD,OPTN,LSTCMD
         OPEN     #I,#NMLST
*
*
* S:S FUNCTION -- SUPER SELECT FUNCTION
*
S:S      FNAME
         PROC
         PEND     AF(AF(1)+2)
#I       SET      0
*
*
* COMMAND DESCRIPTOR CODES
*
INVDSCR  CNAME
         PROC
*
LN       EQU      1
RN1      EQU      2
RN2      EQU      3
GD       EQU      4
SD       EQU      5
DD       EQU      6
PW       EQU      7
NM       EQU      8
DS1      EQU      9
DS2      EQU      10
DS3      EQU      11
CS1      EQU      12
CS2      EQU      13
CS3      EQU      14
*
         PEND
*
*
*
*        SCMD,ECMD,PCMD --- COMMAND PROC'S
*
SCMD     CNAME    0,0
ECMD     CNAME    1,0
LCMD     CNAME    1,1
PCMD     CNAME    2,1
         PROC
         LOCAL    CADDR,CS,NC,NW,J,PARAMS,K
         LOCAL    SAVNUM
*
*        INITIALIZATION
*
CADDR    SET      ABSVAL(%)
CS       SET      S:UT(AF(1))
NC       SET      NUM(CS)
NW       SET      (NC+8)/4+1
#I       SET      #I+1
#NMLST(#I) SET    CS(1),NC,CADDR,CADDR+NW,AF(1)
*
*        FIND PREVIOUS COMMAND NAME FOR PCMD
*
         DO       NAME(1)=2
K        SET      #I-1
J        WHILE    J<K
         DO       #NMLST(J,5)=AF(1)
PARAMS   SET      #NMLST(J,4)
K        SET      0
         FIN
         FIN
         ELSE
PARAMS   SET      #NMLST(#I,4)
         FIN
*
*        SET PARAMS=0 FOR 'N' OPTION
*
         DO       NUM(CF)>1
PARAMS   SET      0
#NMLST(#I,4) SET  0
         FIN
*
* SET COMMAND NUMBER PARAMETER
*
SAVNUM   SET      0
         DO       NUM(AF)>2
SAVNUM   SET      AF(3)
         FIN
*
*        GENERATE TABLE ENTRIES
*
         GEN,8,2,1,4,17  NW,NAME(1),NAME(2),SAVNUM,WA(AF(2))
         GEN,16,16     0,PARAMS
         GEN,8         NC
*
J        DO       NUM(CS)
         DO       CS(J)>='A'&CS(J)<='Z'
         GEN,8    CS(J)&X'BF'
         ELSE
         GEN,8    CS(J)
         FIN
         FIN
*
         BOUND    4
         PEND
*
*
*        OPTN --- PARAMETER DEFINITION PROC'S
*
OPTN     CNAME
         PROC
         LOCAL    LAST,TYPE,J,PARAM,CS,K
*
*
LAST     SET      NUM(CF)>2
TYPE     SET      SCOR(CF(2),R,NR,M)
*
*
         DO       TYPE>0
         GEN,1,7,8  LAST,NUM(AF)*2+2,TYPE
*
J        DO       NUM(AF)
PARAM    SET      SCOR(AF(J,1),S1,S2,S3,S4,S5,S6,S7,;
                  S8,S9,S10,S11,S12,S13,S14,S15,;
                  S16,S17,S18,S19,S20)
*
         DO       PARAM=0
PARAM    SET      AF(J,1)
         DO1      PARAM>='A'&PARAM<='Z'
PARAM    SET      PARAM&X'BF'
         ELSE
PARAM    SET      PARAM+X'10'
         FIN
*
         GEN,8    PARAM
         DO       NUM(AF(J))>1
         GEN,8    AF(J,2)
         ELSE
         GEN,8    0
         FIN
*
         FIN
         ELSE
         GEN,1,7  LAST,NUM(S:UT(AF(1)))+2
         GEN,8    SCOR(CF(2),S1,S2,S3,S4,S5,S6,;
                  S7,S8,S9,S10,S11,S12,S13,S14,S15,;
                  S16,S17,S18,S19,S20)+X'10'
CS       SET      S:UT(AF(1))
K        DO       NUM(CS)
         GEN,8    S:S(CS(K)<X'F0',CS(K),CS(K)&X'BF')
         FIN
         FIN
         DO       LAST>0
         BOUND    4
         FIN
         PEND
*
*
*        LSTCMD --- END OF COMMAND DEF'S, GENERATE FCL
*
LSTCMD   CNAME
         PROC
         LOCAL    J,CHK,M1,M2,FC,LENGTH,KNT,;
                  N,ADDR,NXTADDR
*
*
J        DO       #I
CHK(J)   SET      0
         FIN
*
M1       SET      0
         WHILE    M1=0
M1       SET      1
J        WHILE    J<#I
         DO       CHK(J)=0
M1       SET      0
FC       SET      #NMLST(J,1)
LENGTH   SET      0
J        SET      #I+1
         FIN
         FIN
*
*        SEARCH FOR COMMANDS WITH 1ST CHARACTER FC
*
KNT      SET      0
M2       SET      0
         WHILE    M2=0&M1=0
M2       SET      1
J        DO       #I
         DO       CHK(J)=0&#NMLST(J,1)=FC&#NMLST(J,2)>LENGTH
M2       SET      0
N        SET      J
LENGTH   SET      #NMLST(J,2)
ADDR     SET      #NMLST(J,3)
         FIN
         FIN
         GOTO,M2  LENGTH
*
*        GENERATE COMMAND LIST
*
CHK(N)   SET      1
         DO       KNT=0
KNT      SET      1
         USECT    FCLST
         DO       FC>='A'&FC<='Z'
         GEN,8    FC&X'BF'
         ELSE
         GEN,8    FC
         FIN
         GEN,8,16 0,ADDR
         ELSE
         USECT    CDEF
         ORG      NXTADDR+1
         GEN,16   ADDR
         FIN
NXTADDR  SET      ADDR
LENGTH   SET      0
*
         FIN
         FIN
         USECT    FCLST
         DATA     0
         PEND
*
*
         END
