CUESHEL 
          IDENT  CUESHEL,FWA
          ABS 
          ENTRY  CDSHELL
          ENTRY  RMSHELL
          ENTRY  RFL= 
          SYSCOM B1 
          TITLE  CUESHEL - CUSTOMIZED USER ENVIRONMENT VALIDATOR. 
*COMMENT  CUESHEL - CUSTOMIZED USER VALIDATOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RMSHELL  SPACE  4,10 
 CUESHEL  SPACE  4,10 
***       CUESHEL - CUSTOMIZED USER ENVIRONMENT VALIDATOR.
* 
*         M. D. LEMBCKE.     81/10/30.
*         P. A. GILLESBY.    84/10/15.
  
          SPACE  4,10 
***       CUESHEL - CUSTOMIZED USER ENVIRONMENT VALIDATOR.
* 
*         *CUESHEL* IS DESIGNED TO ACCOMODATE MULTIPLE SHELL PROGRAMS,
*         EACH SPECIFIED WITH A SEPARATE ENTRY POINT. 
* 
*         FLAG = 1 IF RMSHELL 
*         FLAG = 2 IF CDSHELL 
* 
*         WHEN A COMMAND IS DETECTED, THE COMMAND WILL BE MATCHED 
*         AGAINST A VALIDATED LIST.  IF A MATCH IS FOUND, 
*         THE VALIDATION BITS WILL BE CHECKED TO ENSURE THE COMMAND 
*         IS VALID FOR THE SHELL PROGRAM SPECIFIED.  IF VALID,
*         THE COMMAND WILL BE ISSUED TO THE SYSTEM VIA *EXCST*
*         (WITH A *$* PREFIX TO FORCE SYSTEM LIBRARY LOAD).  IF 
*         NO MATCH IS FOUND BUT *CDSHELL* WAS SELECTED, THE 
*         COMMAND WILL STILL BE ISSUED TO THE SYSTEM. 
*         HOWEVER, IF NO MATCH IS FOUND AND *RMSHELL* WAS 
*         SELECTED, AN ERROR MESSAGE WILL BE ISSUED TO THE
*         DAYFILE.
* 
*         THERE ARE FOUR ERRORS THAT WILL CAUSE THE PROGRAM TO
*         TERMINATE.  THE FIRST IS WHEN THE STATEMENT EXCEEDS SEVEN 
*         CHARACTERS.  SECOND IS NO MATCH; WHERE THE USER IS
*         UNAUTHORIZED TO USE THE STATEMENT AND/OR THE STATEMENT WAS
*         NOT RECOGNIZED.  THE THIRD IS WHEN THE COMMAND EXCEEDS
*         80 CHARACTERS AND THE FOURTH IS WHEN A TERMINATING
*         DELIMITER IS NOT FOUND WITHIN THE COMMAND PARAMETERS. 
* 
* 
*         NOTES  USB (LINE FOLLOWING CUE1) RETURNS THE LWA OF THE 
*                BUFFER IN REGISTER B7.  THIS VALUE IS NEEDED WHEN
*                REPACKING THE COMMAND.  ANY MODIFICATIONS SHOULD 
*                AVOID USING B7.
          SPACE  4,10 
***       DAYFILE ERROR MESSAGES. 
* 
*         * COMMAND KEYWORD TOO LONG.*  THIS MESSAGE WILL BE
*         ISSUED WHEN THE COMMAND EXCEEDS SEVEN CHARACTERS. 
* 
*         * INCORRECT COMMAND.*  THIS MESSAGE IS ISSUED IF ONE OF THE 
*         *CUESHEL* ENTRY POINTS IS EXECUTED AS A COMMAND RATHER THAN 
*         AS A SHELL PROCESSOR. 
* 
*         * INPUT LINE TOO LONG.*  THIS MESSAGE WILL BE ISSUED TO THE 
*         DAYFILE WHEN THE COMMAND IS GREATER THAN 80 CHARACTERS. 
* 
*         * NO MATCHING DELIMITER.*  THIS MESSAGE WILL BE 
*         ISSUED WHENEVER A DOLLAR SIGN ($) APPEARS AS A
*         DELIMITER AND AN ENDING DELIMITER IS NOT FOUND. 
* 
*         * UNAUTHORIZED COMMAND.*  THE USER IS AUTHORIZED TO EXECUTE 
*         ONLY A LIMITED SUBSET OF COMMANDS.  THIS MESSAGE IS ISSUED
*         WHENEVER THE COMMAND IS LESS THAN EIGHT CHARACTERS AND DOES 
*         NOT MATCH AGAINST THE VALIDATED LIST (*RMSHELL*), OR MATCHES
*         AN ENTRY IN THE LIST WHICH IS NOT AUTHORIZED FOR THE ENTRY
*         POINT IN USE (*CDSHELL* OR *RMSHELL*).
  
          SPACE  4,10 
***       COMMON DECKS. 
  
*CALL     COMCCMD 
*CALL     COMCMAC 
          TITLE  MAIN PROGRAM.
  
          ORG    111B 
 FWA      BSS    0
 CDSHELL  SX7    2           SET (X7) TO 2 IF *CDSHELL* PROGRAM 
          EQ     CUESHEL     ENTER MAIN PROGRAM 
  
 RMSHELL  SX7    1           SET (X7) TO 1 IF *RMSHELL* PROGRAM 
*         EQ     CUESHEL     ENTER MAIN PROGRAM 
          SPACE  4,10 
 CUESHEL  SA7    SHELFLG     SAVE VALUE 
          SB1    1
          GETSHC USBB        CHECK SHELL CONTROLS 
          SA1    USBB 
          LX1    59-11
          NG     X1,CUE0     IF EXECUTING AS A SHELL
          MESSAGE  CUED,0,R  * INCORRECT COMMAND.*
          ABORT 
  
 CUE0     SA2    CCDR        FWA OF PACKED DATA = RA + 70 
          NZ     X2,CUE1     IF INPUT PRESENT 
          RJ     GII         GET INTERACTIVE INPUT
          EQ     B7,B1,CUE22 IF NO INPUT
  
*         UNPACK INPUT STRING INTO BUFFER.  THEN CHECK FIRST NON-BLANK
*         CHARACTER.  IF IT IS A $, REPLACE IT WITH A BLANK.
  
 CUE1     SB2    CCDR 
          RJ     USB         UNPACKS 1 CHARACTER/WORD RIGHT JUSTIFIED 
          SB3    -1 
          SB5    B7-USBB+1   MAXIMUM CHARACTER INDEX
 CUE2     SB3    B3+1 
          SA2    USBB+B3
          GE     B3,B5,CUE22 IF INPUT IS ALL BLANKS 
          SX3    X2-1R
          ZR     X3,CUE2     IF A BLANK 
          SX3    X2-1R$ 
          SB3    B3-1 
          NZ     X3,CUE4     IF NOT *$* 
          SX6    1R 
          SA6    A2+         REPLACE *$* WITH BLANK 
  
*         CHECK FOR EXISTING TERMINATOR TO DETERMINE IF ONE 
*         MUST BE ADDED.
  
 CUE4     SB3    B3+1 
          SA2    USBB+B3     GET NEXT CHARACTER 
          GE     B3,B5,CUE5  IF AT END OF COMMAND 
          SX3    X2-1R) 
          ZR     X3,CUE8     IF TERMINATOR FOUND
          SX3    X2-1R. 
          ZR     X3,CUE8     IF TERMINATOR FOUND
          SX3    X2-1R$ 
          ZR     X3,CUE6     IF *$* DELIMITER FOUND 
          EQ     CUE4        CHECK NEXT CHARACTER 
  
 CUE5     SA5    RI 
          ZR     X5,CUE8     IF INPUT RECEIVED FROM SYSTEM
          SX6    1R.         APPEND *.* TO INTERACTIVE INPUT
          SB7    B7+B1
          SA6    B7 
          EQ     CUE8        PACK COMMAND 
  
*         LOOK FOR MATCHING *$*.
  
 CUE6     SB3    B3+1 
          SA2    USBB+B3     CHECK NEXT CHARACTER 
          LE     B3,B5,CUE7  IF NOT END OF COMMAND
          SX7    CUEC        *NO MATCHING DELIMITER.* 
          SA5    RI 
          ZR     X5,CUE15    IF INPUT RECEIVED FROM SYSTEM
          SX6    1R.         APPEND *.* TO INTERACTIVE INPUT
          SB7    B7+B1
          SA6    B7 
          EQ     CUE15       SET ERROR AND COMPLETE 
  
 CUE7     SX3    X2-1R$ 
          ZR     X3,CUE4     IF MATCHING DELIMITER FOUND
          EQ     CUE6        CHECK NEXT CHARACTER 
  
*         PACK COMMAND TOGETHER.
  
 CUE8     SB6    B0+         SET NO ERROR 
          SA2    CTRLC
          BX3    X3-X3
          SB3    0           SET CHARACTER COUNTER
          SB4    7           SET MAXIMUM CHARACTERS PER COMMAND 
 CUE9     SA2    A2+1 
          SX6    X2-1R
          ZR     X6,CUE9     IF CHARACTER = BLANK 
          SX6    X2-1R+ 
          PL     X6,CUE10    IF SEPARATOR FOUND 
          SB3    B3+1 
          SB4    B4-1        DECREASE CHARACTER COUNT 
          SX7    CUEA        *COMMAND KEYWORD TOO LONG.*
          NG     B4,CUE15    IF MAXIMUM LENGTH EXCEEDED 
          LX3    6
          BX3    X3+X2       APPEND CHARACTER TO COMMAND
          EQ     CUE9        GET NEXT CHARACTER 
  
 CUE10    SB4    10          LEFT JUSTIFY CONTROL STATEMENT 
          SX2    6
          SX4    B4-B3       CHARACTER POSITIONS TO SHIFT 
          IX4    X4*X2       BITS TO SHIFT
          SB4    X4 
          LX6    X3,B4
          SA6    PCS
  
*         DO A BINARY TREE SEARCH TO FIND STATEMENT WITHIN THE LIST.
  
          SX3    CMDSL       LENGTH OF LIST TO CHECK (MAX)
          SX0    B1 
          IX4    X3+X0       ADD IN ROUND UP FACTOR 
          AX4    1           X4 = (MAX/2)   ROUNDED UP
          BX5    X4          X5 = CURRENT POSITION IN LIST (CUR)
          SA1    PCS         X1 = PACKED CONTROL WORD 
 CUE11    SA2    X5+CMDS     GET COMMAND AND VALIDATION BITS
          MX0    42          MASK OFF COMMAND ONLY
          BX2    X0*X2
          IX2    X2-X1
          IX4    X3-X5       HOW MANY POSITIONS LEFT TO CHECK (MAX-CUR) 
          ZR     X2,CUE14    IF COMMAND MATCH FOUND IN TABLE
          NZ     X4,CUE12    IF MORE ENTRIES IN TABLE TO CHECK
          SB3    2
          SA2    SHELFLG
          SB4    X2 
          EQ     B3,B4,CUE16 IF *CDSHELL* AND NOT IN TABLE
          SX7    CUEB        *UNAUTHORIZED COMMAND.*
          EQ     CUE15       IF ERROR 
 CUE12    SX0    B1 
          IX4    X4+X0       ADD IN ROUND-UP FACTOR 
          AX4    1           (MAX-CUR)/2 HALF THE AMOUNT LEFT TO CHECK
          PL     X2,CUE13    IF POSITIVE, SKIPPED AHEAD TOO FAR 
          IX5    X5+X4       SEARCH AHEAD     CUR+((MAX-CUR)/2) 
          EQ     CUE11       CHECK NEXT CALCULATED ENTRY IN THE LIST
  
 CUE13    BX3    X5          NUMBER COMMANDS LEFT TO CHECK (MAX=CUR)
          IX5    X5-X4       SEARCH BACKWARDS HALFWAY OF WHAT IS LEFT 
          EQ     CUE11       CHECK NEXT CALCULATED ENTRY IN THE LIST
  
*         DETERMINE IF COMMAND IS VALIDATED FOR THE SHELL PROGRAM 
*         SPECIFIED.
  
 CUE14    SA2    A2          RESET COMMAND AT CURRENT POSITION
          SA3    SHELFLG     RETRIEVE SHELL FLAG
          BX2    X3*X2
          NZ     X2,CUE16    IF VALID COMMAND 
          SX7    CUEB        *UNAUTHORIZED COMMAND.*
  
*         STORE APPROPRIATE ERROR MESSAGE AND SET ERROR FLAG. 
  
 CUE15    SA7    ERRM 
          SB6    1
  
*         REPACK COMMAND WITH *$* PREFIX AND CALL *EXCST*.
  
 CUE16    SA1    CTRLC-1     B7 = LWA IN *USBB*  (SET BY *COMCUSB*) 
          SB4    B0          B4 = COUNT OF WORDS REPACKED 
          SB2    B0 
 CUE17    SX6    B0+         INITIALIZE EMPTY WORD
          SB3    10          B3 = NUMBER CHARACTERS PER WORD (0-9)
 CUE18    SA1    A1+B1       GET NEXT CHARACTER 
          SX3    X1-1R$ 
          ZR     X3,CUE18.1  IF CHARACTER IS *$*
          NZ     B2,CUE18.1  IF HAVE FOUND FIRST NON-BLANK
          SX3    X1-1R
          ZR     X3,CUE18    IF CHARACTER IS BLANK
          SB2    1           SET B2 TO INDICATE FIRST NON-BLANK 
 CUE18.1  LX6    6
          BX6    X6+X1       APPEND CHARACTER 
          SB5    A1          B5 = CURRENT ADDRESS IN *USBB* 
          EQ     B5,B7,CUE19 IF END OF BUFFER 
          SB3    B3-1 
          NZ     B3,CUE18    IF CURRENT WORD NOT YET FULL 
          SA6    MCCDR+B4    STORE FULL WORD
          SB4    B4+1        INCREASE WORD COUNT
          EQ     CUE17       PROCESS UNTIL LWA OF BUFFER IS REACHED 
  
 CUE19    SX2    B3-B1       LEFT JUSTIFY LAST WORD OF COMMAND
          SX3    6
          IX2    X2*X3
          SB2    X2 
          LX6    B2 
          SA6    MCCDR+B4 
          NZ     B6,CUE20    IF ERROR FLAG SET
          EXCST  MCCDR       PASS MODIFIED COMMAND TO SYSTEM
          EQ     CUE22       EXIT 
  
*         ISSUE ERROR MESSAGE.
  
 CUE20    SA5    ERRM 
          SA2    RI 
          ZR     X2,CUE21    IF NO REQUESTED INPUT
          WRITEW OUTPUT,X5,3
          WRITER OUTPUT,R 
 CUE21    SX0    CUEB 
          BX0    X0-X5
          ZR     X0,CUE21.1  IF *UNAUTHORIZED COMMAND*
          SX0    3
 CUE21.1  MESSAGE  MCCDR,X0,R 
          MESSAGE  X5,X0,R
          ABORT 
  
 CUE22    ENDRUN
  
*         ERROR MESSAGE DATA. 
  
 CUEA     DATA     C* COMMAND KEYWORD TOO LONG.*
 CUEB     DATA     C* UNAUTHORIZED COMMAND.*
 CUEC     DATA     C* NO MATCHING DELIMITER.* 
 CUED     DATA     C* INCORRECT COMMAND.* 
          TITLE  SUBROUTINES. 
 GII      SPACE    4,15 
***       GII - GET INTERACTIVE INPUT.
* 
*         CALLED TO PROMPT AND GET A SINGLE INPUT LINE. 
* 
*         ENTRY  CCDR = ADDRESS OF 8-WORD AREA. 
* 
*         EXIT   CCDR = INPUT LINE. 
*                CCDR = 0 IF EOR/EOF/EOI. 
*                (B7) = 1 IF ENDRUN REQUIRED. 
* 
*         USES   X - 2, 6, 7. 
*                A - 2, 6, 7. 
*                B - 7. 
* 
*         CALLS  SUT. 
* 
*         MACROS CSET, MESSAGE, PROMPT, READ, READW, WRITER, WRITEW.
  
  
 GII1     SB7    B1+         FLAG TO END-RUN
  
 GII      SUBR
          CSET   NORMAL 
          RJ     SUT         SET UP TERMINAL
          SX6    B0 
          SA6    CCDR        ZERO FIRST AND LAST WORD OF BUFFER 
          SA6    CCDR+8 
          SX7    B1 
          SA7    RI          SET FLAG FOR THE REQUESTED INPUT 
          PROMPT OFF         TURN OFF AUTO PROMPT 
          WRITEW OUTPUT,OUT,1  WRITE PROMPT 
          READ   INPUT,R     GET INPUT LINE 
          READW  INPUT,CCDR,9 
          CSET   RESTORE
          SB7    B0+
          SA2    CCDR 
          ZR     X2,GII1     IF NO INPUT DATA 
          SA2    CCDR+8 
          ZR     X2,GIIX     IF NOT TOO MUCH DATA 
          MESSAGE  CCDR,3,R  ISSUE ERROR MESSAGE AND ENDRUN 
          MESSAGE  GIIA,3,R 
          WRITEW OUTPUT,GIIA,3
          WRITER OUTPUT,R 
          EQ     GII1        SET FLAG TO REQUIRE ENDRUN 
  
 GIIA     DATA     C* INPUT LINE TOO LONG.* 
 SUT      SPACE    4,15 
***       SUT - SET UP TERMINAL.
* 
*         SETS UP THE LIST-OF-FILES FOR *OUTPUT*. 
*         SUT CAN ONLY BE CALLED FOR AN INTERACTIVE JOB; IT VERIFIES
*         THAT FILES *INPUT* AND *OUTPUT* HAVE DEVICE TYPE *TT* 
*         BY RETURNING THEM.
*         ONLY THE FIRST CALL TO SUT IS ACTED UPON. 
* 
*         USES   X - 1, 6.
*                A - 1, 6.
* 
*         MACROS RETURN, SETLOF.
  
  
 SUT      SUBR
          SA1    LOFF        CHECK FOR LIST OF FILES ALREADY PRESENT
          NZ     X1,SUTX     IF ALREADY SET UP, RETURN
          MX6    1           SET LIST OF FILES PRESENT FLAG 
          SA6    A1 
          RETURN INPUT,R     RETURN FILES 
          RETURN OUTPUT,R 
          SA1    OUTPUT      CLEAR FET STATUS 
          MX6    49 
          LX6    1
          BX6    X6*X1
          SA6    A1 
          MX6    1           SET FLUSH BIT
          LX6    36+1 
          SA1    OUTPUT+1 
          BX6    X6+X1
          SA6    A1 
          SETLOF LOFP        SET LIST-OF-FILES
          EQ     SUTX        RETURN 
          SPACE  4,10 
***       COMMON DECKS. 
  
*         BUFFER FOR *COMCUSB*.  *CTRLC* MUST BE JUST BEFORE *USBB*.
  
 CTRLC    DATA   1R$         CONTROL CARD BUFFER
 USBB     BSSZ   81          USED IN COMCUSB TO UNPACK STRING OF CHARS
  
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCRDH 
*CALL     COMCRDW 
*CALL     COMCSYS 
*CALL     COMCUSB 
*CALL     COMCWTW 
          TITLE  TABLES AND BUFFERS.
 CMDS     SPACE  4,10 
**        CMDS - TABLE OF VALID COMMANDS. 
* 
*T        42/COMMAND,16/0,1/C,1/R 
* 
*         COMMAND = COMMAND NAME. 
*         C = 1 IF CDSHELL COMMAND. 
*         R = 1 IF RMSHELL COMMAND. 
* 
*         NOTE - THIS TABLE MUST BE IN ALPHABETICAL ORDER.
  
  
 CMDS     BSS    0
          VFD    42/0LACCESS,16/0,1/1,1/0 
          VFD    42/0LALGOL5,16/0,1/0,1/0 
          VFD    42/0LALX,16/0,1/0,1/1
          VFD    42/0LAPEX,16/0,1/0,1/0 
          VFD    42/0LAPL,16/0,1/0,1/0
          VFD    42/0LAPPEND,16/0,1/1,1/0 
          VFD    42/0LAP1,16/0,1/0,1/1
          VFD    42/0LASCII,16/0,1/1,1/0
          VFD    42/0LASSIGN,16/0,1/1,1/1 
          VFD    42/0LATTACH,16/0,1/1,1/1 
          VFD    42/0LAUTO,16/0,1/1,1/1 
          VFD    42/0LBASIC,16/0,1/0,1/0
          VFD    42/0LBATCH,16/0,1/1,1/1
          VFD    42/0LBEGIN,16/0,1/1,1/1
          VFD    42/0LBINDER,16/0,1/1,1/0 
          VFD    42/0LBKSP,16/0,1/1,1/0 
          VFD    42/0LBLANK,16/0,1/1,1/0
          VFD    42/0LBRIEF,16/0,1/1,1/0
          VFD    42/0LBYE,16/0,1/1,1/1
          VFD    42/0LCATALOG,16/0,1/1,1/1
          VFD    42/0LCATLIST,16/0,1/1,1/1
          VFD    42/0LCD2UTIL,16/0,1/1,1/0
          VFD    42/0LCD2000,16/0,1/1,1/0 
          VFD    42/0LCFO,16/0,1/1,1/0
          VFD    42/0LCHANGE,16/0,1/1,1/1 
          VFD    42/0LCHARGE,16/0,1/1,1/1 
          VFD    42/0LCHVAL,16/0,1/1,1/0
          VFD    42/0LCKP,16/0,1/1,1/0
          VFD    42/0LCLASS,16/0,1/1,1/0
          VFD    42/0LCLEAR,16/0,1/1,1/1
          VFD    42/0LCOBOL5,16/0,1/0,1/0 
          VFD    42/0LCOMMENT,16/0,1/1,1/0
          VFD    42/0LCOMMON,16/0,1/0,1/0 
          VFD    42/0LCOMPASS,16/0,1/0,1/0
          VFD    42/0LCOPY,16/0,1/1,1/1 
          VFD    42/0LCOPYBF,16/0,1/1,1/1 
          VFD    42/0LCOPYBR,16/0,1/1,1/1 
          VFD    42/0LCOPYCF,16/0,1/1,1/1 
          VFD    42/0LCOPYCR,16/0,1/1,1/1 
          VFD    42/0LCOPYEI,16/0,1/1,1/1 
          VFD    42/0LCOPYER,16/0,1/0,1/1 
          VFD    42/0LCOPYL,16/0,1/1,1/0
          VFD    42/0LCOPYLM,16/0,1/1,1/0 
          VFD    42/0LCOPYSBF,16/0,1/1,1/1
          VFD    42/0LCOPYX,16/0,1/1,1/0
          VFD    42/0LCSET,16/0,1/1,1/0 
          VFD    42/0LCSU,16/0,1/0,1/1
          VFD    42/0LCTB,16/0,1/0,1/1
          VFD    42/0LCTIME,16/0,1/1,1/0
          VFD    42/0LCT3,16/0,1/1,1/1
          VFD    42/0LCT7,16/0,1/1,1/1
          VFD    42/0LCT8,16/0,1/1,1/1
          VFD    42/0LCU1,16/0,1/0,1/1
          VFD    42/0LDAYFILE,16/0,1/1,1/1
          VFD    42/0LDEBUG,16/0,1/0,1/0
          VFD    42/0LDEFINE,16/0,1/1,1/1 
          VFD    42/0LDETACH,16/0,1/1,1/0 
          VFD    42/0LDIAL,16/0,1/1,1/0 
          VFD    42/0LDISPLAY,16/0,1/1,1/1
          VFD    42/0LDMB,16/0,1/1,1/0
          VFD    42/0LDMD,16/0,1/1,1/1
          VFD    42/0LDMDECS,16/0,1/1,1/1 
          VFD    42/0LDMP,16/0,1/1,1/1
          VFD    42/0LDMPECS,16/0,1/1,1/1 
          VFD    42/0LDOCMENT,16/0,1/1,1/0
          VFD    42/0LDROP,16/0,1/1,1/1 
          VFD    42/0LEALOGCD,16/0,1/1,1/0
          VFD    42/0LEALOGSV,16/0,1/1,1/0
          VFD    42/0LEALOGVS,16/0,1/1,1/0
          VFD    42/0LEAPREVC,16/0,1/1,1/0
          VFD    42/0LEAPREVS,16/0,1/1,1/0
          VFD    42/0LEAUL101,16/0,1/1,1/0
          VFD    42/0LEAVL105,16/0,1/1,1/0
          VFD    42/0LEC3,16/0,1/0,1/1
          VFD    42/0LEC8,16/0,1/0,1/1
          VFD    42/0LEDIT,16/0,1/1,1/1 
          VFD    42/0LELD,16/0,1/0,1/1
          VFD    42/0LELSE,16/0,1/1,1/0 
          VFD    42/0LENDIF,16/0,1/1,1/0
          VFD    42/0LENDW,16/0,1/1,1/0 
          VFD    42/0LENQUIRE,16/0,1/1,1/1
          VFD    42/0LENTER,16/0,1/1,1/0
          VFD    42/0LEVICT,16/0,1/1,1/0
          VFD    42/0LEXECUTE,16/0,1/0,1/1
          VFD    42/0LEXIT,16/0,1/1,1/1 
          VFD    42/0LEXPLAIN,16/0,1/1,1/0
          VFD    42/0LFCOPY,16/0,1/1,1/0
          VFD    42/0LFILE,16/0,1/1,1/0 
          VFD    42/0LFSE,16/0,1/1,1/1
          VFD    42/0LFS8,16/0,1/0,1/1
          VFD    42/0LFTN,16/0,1/0,1/0
          VFD    42/0LFTN5,16/0,1/0,1/0 
          VFD    42/0LF45,16/0,1/0,1/0
          VFD    42/0LGET,16/0,1/1,1/1
          VFD    42/0LGETLOG,16/0,1/0,1/1 
          VFD    42/0LGO,16/0,1/1,1/1 
          VFD    42/0LGOODBYE,16/0,1/1,1/1
          VFD    42/0LGPSS,16/0,1/0,1/0 
          VFD    42/0LGTR,16/0,1/1,1/0
          VFD    42/0LHELLO,16/0,1/1,1/1
          VFD    42/0LHELLO7,16/0,1/1,1/0 
          VFD    42/0LHELP,16/0,1/1,1/1 
          VFD    42/0LHELPME,16/0,1/1,1/1 
          VFD    42/0LHPA,16/0,1/0,1/1
          VFD    42/0LHTIME,16/0,1/1,1/0
          VFD    42/0LICEMDDN,16/0,1/1,1/0
          VFD    42/0LIEDIT,16/0,1/1,1/0
          VFD    42/0LIF,16/0,1/1,1/0 
          VFD    42/0LIFE,16/0,1/1,1/0
          VFD    42/0LITEMIZE,16/0,1/1,1/0
          VFD    42/0LKRONREF,16/0,1/1,1/0
          VFD    42/0LLABEL,16/0,1/1,1/1
          VFD    42/0LLBC,16/0,1/0,1/0
          VFD    42/0LLDI,16/0,1/1,1/0
          VFD    42/0LLDSET,16/0,1/1,1/0
          VFD    42/0LLENGTH,16/0,1/1,1/0 
          VFD    42/0LLGO,16/0,1/0,1/1
          VFD    42/0LLIB,16/0,1/0,1/0
          VFD    42/0LLIBEDIT,16/0,1/1,1/0
          VFD    42/0LLIBGEN,16/0,1/1,1/0 
          VFD    42/0LLIBLOAD,16/0,1/1,1/0
          VFD    42/0LLIBRARY,16/0,1/1,1/0
          VFD    42/0LLIBTASK,16/0,1/1,1/0
          VFD    42/0LLIMITS,16/0,1/1,1/1 
          VFD    42/0LLINE,16/0,1/1,1/1 
          VFD    42/0LLISTLB,16/0,1/1,1/1 
          VFD    42/0LLIST80,16/0,1/1,1/0 
          VFD    42/0LLOAD,16/0,1/0,1/0 
          VFD    42/0LLOC,16/0,1/0,1/0
          VFD    42/0LLOCK,16/0,1/1,1/0 
          VFD    42/0LLOGIN,16/0,1/1,1/1
          VFD    42/0LLOGOUT,16/0,1/1,1/1 
          VFD    42/0LLO72,16/0,1/1,1/0 
          VFD    42/0LMACHINE,16/0,1/1,1/0
          VFD    42/0LMALET,16/0,1/0,1/1
          VFD    42/0LMAP,16/0,1/1,1/1
          VFD    42/0LMAPINI,16/0,1/0,1/1 
          VFD    42/0LMFL,16/0,1/1,1/1
          VFD    42/0LMFLINK,16/0,1/1,1/0 
          VFD    42/0LMFQUEUE,16/0,1/1,1/0
          VFD    42/0LMODE,16/0,1/1,1/1 
          VFD    42/0LMODIFY,16/0,1/1,1/0 
          VFD    42/0LMRG,16/0,1/0,1/1
          VFD    42/0LNEW,16/0,1/1,1/1
          VFD    42/0LNOEXIT,16/0,1/1,1/1 
          VFD    42/0LNORERUN,16/0,1/1,1/0
          VFD    42/0LNORM,16/0,1/1,1/1 
          VFD    42/0LNORMAL,16/0,1/1,1/1 
          VFD    42/0LNOSORT,16/0,1/1,1/0 
          VFD    42/0LNOTE,16/0,1/1,1/0 
          VFD    42/0LNULL,16/0,1/1,1/0 
          VFD    42/0LOFFSW,16/0,1/1,1/1
          VFD    42/0LOLD,16/0,1/1,1/1
          VFD    42/0LOMREF,16/0,1/1,1/0
          VFD    42/0LONEXIT,16/0,1/1,1/1 
          VFD    42/0LONSW,16/0,1/1,1/1 
          VFD    42/0LOPLEDIT,16/0,1/1,1/0
          VFD    42/0LOPMSG,16/0,1/0,1/1
          VFD    42/0LOUT,16/0,1/1,1/1
          VFD    42/0LOVWRITE,16/0,1/1,1/0
          VFD    42/0LPACK,16/0,1/1,1/1 
          VFD    42/0LPACKNAM,16/0,1/1,1/1
          VFD    42/0LPASCAL,16/0,1/0,1/0 
          VFD    42/0LPASSWOR,16/0,1/1,1/0
          VFD    42/0LPAUSE,16/0,1/1,1/0
          VFD    42/0LPBC,16/0,1/0,1/0
          VFD    42/0LPDU,16/0,1/1,1/0
          VFD    42/0LPERMIT,16/0,1/1,1/1 
          VFD    42/0LPLI,16/0,1/0,1/0
          VFD    42/0LPRESET,16/0,1/1,1/1 
          VFD    42/0LPRIMARY,16/0,1/1,1/1
          VFD    42/0LPROFILE,16/0,1/1,1/0
          VFD    42/0LPROTECT,16/0,1/1,1/0
          VFD    42/0LPURGALL,16/0,1/1,1/0
          VFD    42/0LPURGE,16/0,1/1,1/1
          VFD    42/0LQGET,16/0,1/1,1/0 
          VFD    42/0LQUEUE7,16/0,1/1,1/0 
          VFD    42/0LRBR,16/0,1/0,1/0
          VFD    42/0LRECOVER,16/0,1/1,1/1
          VFD    42/0LREDO,16/0,1/1,1/0 
          VFD    42/0LREDUCE,16/0,1/1,1/1 
          VFD    42/0LREGEN,16/0,1/0,1/1
          VFD    42/0LRENAME,16/0,1/1,1/1 
          VFD    42/0LREPLACE,16/0,1/1,1/1
          VFD    42/0LREQUEST,16/0,1/1,1/1
          VFD    42/0LRERUN,16/0,1/1,1/0
          VFD    42/0LRESEQ,16/0,1/1,1/0
          VFD    42/0LRESOURC,16/0,1/1,1/1
          VFD    42/0LRESTART,16/0,1/1,1/0
          VFD    42/0LRETURN,16/0,1/1,1/1 
          VFD    42/0LREVERT,16/0,1/1,1/1 
          VFD    42/0LREVIEW,16/0,1/1,1/0 
          VFD    42/0LREWIND,16/0,1/1,1/1 
          VFD    42/0LRFL,16/0,1/1,1/1
          VFD    42/0LROLLOUT,16/0,1/1,1/0
          VFD    42/0LROUTE,16/0,1/1,1/1
          VFD    42/0LRTIME,16/0,1/1,1/0
          VFD    42/0LRUN,16/0,1/0,1/1
          VFD    42/0LSATISFY,16/0,1/1,1/0
          VFD    42/0LSAVE,16/0,1/1,1/1 
          VFD    42/0LSCOPY,16/0,1/1,1/0
          VFD    42/0LSCREEN,16/0,1/1,1/1 
          VFD    42/0LSECHDR,16/0,1/1,1/0 
          VFD    42/0LSET,16/0,1/1,1/1
          VFD    42/0LSETASL,16/0,1/1,1/0 
          VFD    42/0LSETCORE,16/0,1/1,1/0
          VFD    42/0LSETFAL,16/0,1/1,1/0 
          VFD    42/0LSETFS,16/0,1/1,1/0
          VFD    42/0LSETJAL,16/0,1/1,1/0 
          VFD    42/0LSETJOB,16/0,1/1,1/0 
          VFD    42/0LSETJSL,16/0,1/1,1/0 
          VFD    42/0LSETPFAC,16/0,1/1,1/0
          VFD    42/0LSETPFAL,16/0,1/1,1/0
          VFD    42/0LSETPR,16/0,1/1,1/0
          VFD    42/0LSETTL,16/0,1/1,1/1
          VFD    42/0LSHELL,16/0,1/0,1/0
          VFD    42/0LSKIP,16/0,1/1,1/1 
          VFD    42/0LSKIPEI,16/0,1/1,1/1 
          VFD    42/0LSKIPF,16/0,1/1,1/1
          VFD    42/0LSKIPFB,16/0,1/1,1/1 
          VFD    42/0LSKIPR,16/0,1/1,1/1
          VFD    42/0LSLOAD,16/0,1/1,1/0
          VFD    42/0LSORT,16/0,1/1,1/0 
          VFD    42/0LSORTMRG,16/0,1/1,1/0
          VFD    42/0LSTATUS,16/0,1/1,1/1 
          VFD    42/0LSTIME,16/0,1/1,1/0
          VFD    42/0LSUBMIT,16/0,1/1,1/1 
          VFD    42/0LSWITCH,16/0,1/1,1/1 
          VFD    42/0LTCOPY,16/0,1/1,1/0
          VFD    42/0LTDU,16/0,1/1,1/1
          VFD    42/0LTDUMP,16/0,1/1,1/1
          VFD    42/0LTEXT,16/0,1/1,1/1 
          VFD    42/0LTIMEOUT,16/0,1/1,1/0
          VFD    42/0LTIO,16/0,1/0,1/1
          VFD    42/0LTRMDEF,16/0,1/1,1/1 
          VFD    42/0LULIB,16/0,1/1,1/0 
          VFD    42/0LUNIPOST,16/0,1/1,1/0
          VFD    42/0LUNLOAD,16/0,1/1,1/1 
          VFD    42/0LUNLOCK,16/0,1/1,1/0 
          VFD    42/0LUPDATE,16/0,1/1,1/1 
          VFD    42/0LUPROC,16/0,1/1,1/0
          VFD    42/0LUSECPU,16/0,1/1,1/1 
          VFD    42/0LUSER,16/0,1/1,1/1 
          VFD    42/0LVERIFY,16/0,1/1,1/1 
          VFD    42/0LVFYLIB,16/0,1/1,1/0 
          VFD    42/0LVSN,16/0,1/1,1/1
          VFD    42/0LWBR,16/0,1/0,1/0
          VFD    42/0LWHATJSN,16/0,1/1,1/0
          VFD    42/0LWHILE,16/0,1/1,1/0
          VFD    42/0LWRITEF,16/0,1/1,1/1 
          VFD    42/0LWRITER,16/0,1/1,1/1 
          VFD    42/0LX,16/0,1/0,1/0
          VFD    42/0LXEDIT,16/0,1/1,1/1
 CMDSL    EQU    *-CMDS      LENGTH OF COMMAND LIST 
 BUFFERS  SPACE  4,10 
  
*         BUFFERS.
  
 ERRM     BSSZ   1           STORE APPROPRIATE ERROR MESSAGE
 SHELFLG  BSSZ   1           SHELL PROGRAM FLAG 
 MCCDR    BSSZ   9           MODIFIED CCDR
 PCS      BSSZ   1           PACKED CONTROL STATEMENT 
 RI       BSSZ   1           REQUESTED INPUT FROM TERMINAL
 INPUT    FILEC  IBUF,101B
 OUTPUT   FILEC  OBUF,101B
 LOFP     VFD    12/0,18/LOF,30/0 
 LOFF     CON    0           LIST OF FILES FLAG 
 LOF      VFD    1/0,41/0,18/3
          VFD    42/0LOUTPUT,18/OUTPUT
          VFD    60/0 
 OUT      VFD    12/1L/,12/1,36/0 
 IBUF     EQU    *
 OBUF     EQU    IBUF+101B
 RFL=     EQU    OBUF+101B+10B
  
          END 
