FTN4,B,L
C 
      PROGRAM KEYS(3,75)
C 
C     DATE: 09 FEB 77 
C 
      DIMENSION IDCB(144),IBUF(40),IREG(2),LU(5)
      DIMENSION NWRDS(8),IBUF2(33),IBUF3(33)
      DIMENSION LABL1(13,4),LABL2(13,4) 
      DIMENSION ISTRG(45,8) 
C 
C DIMENSION TERMINAL INITIALIZATION AND LABEL DISPLAY RECORDS 
C 
      INTEGER REC1(4),REC2(55),REC3(55),REC4(2) 
C 
C DIMENSION SOFT KEY ASCII COMMAND STRING RECORD
C 
      INTEGER REC5(360),REC6(2) 
C 
C DIMENSION ASCII BUFFERS 
C 
      INTEGER REC7(53),REC8(51),REC9(72),REC10(35),REC11(72)
      INTEGER REC12(29),REC13(62),REC14(53),REC15(41),REC16(52) 
      INTEGER REC17(19),REC18(20),REC19(16),REC20(5),REC21(12)
C 
C EQUIVALENCES
C 
      EQUIVALENCE (REG,IREG,IA),(IREG(2),IB),(KEYN,REC9(21))
      EQUIVALENCE (IERR,REC17(12))
C 
C LABEL EQUIVALENCES
C 
      EQUIVALENCE (LABL1(1,1),REC2(7)),(LABL2(1,1),REC3(7)) 
C 
C ASCII COMMAND STRING EQUIVALENCE
C 
      EQUIVALENCE (ISTRG(1,1),REC5(6))
C 
C DATA RECORD TO INITIALIZE THE TERMINAL
C 
      DATA REC1/015555B,015530B,015550B,015512B/
C 
C DATA RECORD TO DISPLAY THE FIRST FOUR SOFT KEY LABELS 
C 
      DATA REC2/020033B,023141B,030562B,033103B,015446B,062102B,
     1          020040B,020040B,020040B,020040B,020040B,020040B,
     2          020040B,020040B,015446B,062100B,015503B,015446B,
     3          062102B,020040B,020040B,020040B,020040B,020040B,
     4          020040B,020040B,020040B,015446B,062100B,015503B,
     5          015446B,062102B,020040B,020040B,020040B,020040B,
     6          020040B,020040B,020040B,020040B,015446B,062100B,
     7          015503B,015446B,062102B,020040B,020040B,020040B,
     8          020040B,020040B,020040B,020040B,020040B,015446B,
     9          062100B/
C 
C DATA RECORD TO DISPLAY THE SECOND FOUR SOFT KEY LABELS
C 
      DATA REC3/020033B,023141B,031562B,033103B,015446B,062102B,
     1          020040B,020040B,020040B,020040B,020040B,020040B,
     2          020040B,020040B,015446B,062100B,015503B,015446B,
     3          062102B,020040B,020040B,020040B,020040B,020040B,
     4          020040B,020040B,020040B,015446B,062100B,015503B,
     5          015446B,062102B,020040B,020040B,020040B,020040B,
     6          020040B,020040B,020040B,020040B,015446B,062100B,
     7          015503B,015446B,062102B,020040B,020040B,020040B,
     8          020040B,020040B,020040B,020040B,020040B,015446B,
     9          062100B/
C 
C DATA RECORD TO PROTECT SOFT KEY LABEL DISPLAY AND SET UP TERMINAL 
C 
      DATA REC4/015502B,015554B/
C 
C DATA RECORD CONTAINING COMMAND STRINGS FOR SOFT KEYS 1 THRU 8.
C 
C COMMAND STRING FOR SOFT KEY 1 
C 
      DATA REC5/015446B,063062B,060461B,065440B,031114B,015560B,
     1          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 2 
C 
     2          015446B,063062B,060462B,065440B,031114B,015561B,
     3          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 3 
C 
     4          015446B,063062B,060463B,065440B,031114B,015562B,
     5          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 4 
C 
     6          015446B,063062B,060464B,065440B,031114B,015563B,
     7          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 5 
C 
     8          015446B,063062B,060465B,065440B,031114B,015564B,
     9          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 6 
C 
     A          015446B,063062B,060466B,065440B,031114B,015565B,
     B          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 7 
C 
     C          015446B,063062B,060467B,065440B,031114B,015566B,
     D          39*020040B, 
C 
C COMMAND STRING FOR SOFT KEY 8 
C 
     E          015446B,063062B,060470B,065440B,031114B,015567B,
     F          39*020040B/ 
C 
C HOME THE CURSOR 
C 
      DATA REC6/015550B,015501B/
C 
C ASCII MESSAGE BUFFERS 
C 
      DATA REC7/006412B,2HEN,2HTE,2HR ,2HON,2HE ,2HOF,2H T,2HHE,2HSE, 
     C2H F,2HUN,2HCT,2HIO,2HNS,2H: ,2H[C,2HRE,2HAT,2HE,,2HMO,2HDI,2HFY, 
     C2H,O,2HUT,2HPU,2HT,,2HLI,2HST,2H] ,006412B,2HOR,2H P,2HRE,2HSS, 
     C2H [,2HRE,2HTU,2HRN,2H] ,2HTO,2H T,2HER,2HMI,2HNA,2HTE,2H T,
     C2HHI,2HS ,2HPR,2HOG,2HRA,2HM:/
C 
      DATA REC8/006412B,2HEN,2HTE,2HR ,2H[S,2HOF,2HT ,2HKE,2HY ,
     C2HNU,2HMB,2HER,2H (,2H1-,2H8),2H] ,2HTO,2H B,2HE ,2HPR,2HOG,
     C2HRA,2HMM,2HED,2H O,2HR ,006412B,2HPR,2HES,2HS ,2H[R,2HET,
     C2HUR,2HN],2H I,2HF ,2HLA,2HST,2H A,2HSS,2HIG,2HNM,2HEN,2HT ,
     C2HHA,2HS ,2HBE,2HEN,2H M,2HAD,2HE:/ 
C 
      DATA REC9/006412B,2H S,2HOF,2HT ,2HKE,2HY ,2HAS,2HSI,2HGN,
     C2HME,2HNT,2H F,2HOR,2H F,2HUN,2HCT,2HIO,2HN ,2HKE,2HY ,020040B, 
     C2*006412B,2HEN,2HTE,2HR ,2HUP,2H T,2HO ,2H[1,2H6 ,2HCH,2HAR,
     C2HAC,2HTE,2HRS,2H] ,2HFO,2HR ,2HSO,2HFT,2H K,2HEY,2H L,2HAB,
     C2HEL,2H O,2HR ,006412B,2HPR,2HES,2HS ,2H[R,2HET,2HUR,2HN],2H I, 
     C2HF ,2HNO,2H L,2HAB,2HEL,2H I,2HS ,2HTO,2H B,2HE ,2HAS,2HSI,
     C2HGN,2HED,2H: / 
C 
      DATA REC10/06412B,2HEN,2HTE,2HR ,2H[0,2H] ,2HFO,2HR ,2HNO,
     C2HRM,2HAL,2H O,2HR ,2H[2,2H] ,2HFO,2HR ,2HTR,2HAN,2HSM,2HIT,
     C2H O,2HNL,2HY ,006412B,2HCO,2HMM,2HAN,2HD ,2HST,2HRI,2HNG,
     C2H T,2HYP,2HE:/ 
C 
      DATA REC11/006412B,2HEN,2HTE,2HR ,2H[U,2HP ,2HTO,2H 8,2H0 , 
     C2HCH,2HAR,2HAC,2HTE,2HRS,2H] ,2HFO,2HR ,2HSO,2HFT,2H K,2HEY,
     C2H C,2HOM,2HMA,2HND,006412B,2HST,2HRI,2HNG,2H T,2HO ,2HBE,
     C2H A,2HSS,2HIG,2HNE,2HD ,2HTO,2H T,2HHI,2HS ,2HKE,2HY ,2HOR,
     C2H P,2HRE,2HSS,2H [,2HRE,2HTU,2HRN,2H] ,006412B,2HTO,2H D,
     C2HEF,2HAU,2HLT,2H T,2HO ,2HST,2HAN,2HDA,2HRD,2H C,2HOM,2HMA,
     C2HND,2H S,2HTR,2HIN,2HG:/ 
C 
      DATA REC12/006412B,2HEN,2HTE,2HR ,2H[F,2HIL,2HE ,2HNA,2HME, 
     C2H,S,2HEC,2HUR,2HIT,2HY ,2HCO,2HDE,2H,C,2HAR,2HTR,2HID,2HGE,
     C2H] ,2HOR,2H [,2H26,2H45,2HA ,2HLU,2H] /
C 
      DATA REC13/2HWH,2HER,2HE ,2HSO,2HFT,2H K,2HEY,2H C,2HOM,2HMA, 
     C2HND,2H S,2HET,2H T,2HO ,2HBE,2H M,2HOD,2HIF,2HIE,2HD ,2HIS,
     C2H S,2HTO,2HRE,2HD ,2HOR,006412B,2HPR,2HES,2HS ,2H[R,2HET,
     C2HUR,2HN],2H T,2HO ,2HCO,2HNT,2HIN,2HUE,2H M,2HOD,2HIF,2HYI,
     C2HNG,2H A,2H C,2HOM,2HMA,2HND,2H S,2HET,2H I,2HN ,2HTH,2HIS,
     C2H P,2HRO,2HGR,2HAM,2H: / 
C 
      DATA REC14/2HWH,2HER,2HE ,2HSO,2HFT,2H K,2HEY,2H C,2HOM,2HMA, 
     C2HND,2H S,2HET,2H T,2HO ,2HBE,2H O,2HUT,2HPU,2HT ,2HIS, 
     C2H S,2HTO,2HRE,2HD ,2HOR,006412B,2HPR,2HES,2HS ,2H[R,2HET,
     C2HUR,2HN],2H T,2HO ,2HOU,2HTP,2HUT,2H D,2HIR,2HEC,2HTL,2HY ,
     C2HFR,2HOM,2H T,2HHI,2HS ,2HPR,2HOG,2HRA,2HM:/ 
C 
      DATA REC15/2HTO,2H W,2HHI,2HCH,2H C,2HOM,2HMA,2HND,2H S,2HET, 
     C2H I,2HS ,2HTO,2H B,2HE ,2HOU,2HTP,2HUT,2H O,2HR ,2H[R,2HET,
     C2HUR,2HN],2H T,2HO ,006412B,2HRE,2HPL,2HAC,2HE ,2HOR,2HIG,
     C2HIN,2HAL,2H F,2HIL,2HE ,2HOR,2H L,2HU:/
C 
      DATA REC16/2HWH,2HER,2HE ,2HSO,2HFT,2H K,2HEY,2H C,2HOM,2HMA, 
     C2HND,2H S,2HET,2H T,2HO ,2HBE,2H L,2HIS,2HTE,2HD ,2HIS,2H S,
     C2HTO,2HRE,2HD ,2HOR,006412B,2HPR,2HES,2HS ,2H[R,2HET,2HUR,
     C2HN],2H T,2HO ,2HLI,2HST,2H D,2HIR,2HEC,2HTL,2HY ,2HFR,2HOM,
     C2H T,2HHI,2HS ,2HPR,2HOG,2HRA,2HM:/ 
C 
      DATA REC17/006412B,2HFI,2HLE,2H M,2HAN,2HAG,2HER,2H E,
     C2HRR,2HOR,020055B,020040B,2H H,2HAS,2H O,2HCC,2HUR, 
     C2HRE,2HD /
C 
      DATA REC18/006412B,2HER,2HRO,2HR ,2HIN,2H R,2HEA,2HDI,2HNG, 
     C2H C,2HOM,2HMA,2HND,2H S,2HET,2H F,2HRO,2HM ,2HLU,2H! / 
C 
      DATA REC19/006412B,2HNO,2H O,2HRI,2HGI,2HNA,2HL ,2HFI,
     C2HLE,2H O,2HR ,2HLU,2H E,2HXI,2HST,2HS:/
C 
      DATA REC20/006412B,2HEN,2HD ,2HKE,2HYS/ 
C 
      DATA REC21/006412B,2HKE,2HYS,2H H,2HAS,2H B,2HEE,2HN ,
     C2HAB,2HOR,2HTE,2HD!/
C 
C 
C RETRIEVE LU NUMBER OF 2645A INPUT TERMINAL-ILU
C RETRIEVE LU NUMBER OF LIST DEVICE-LU(2) 
C 
      CALL RMPAR(LU)
      IF((LU.LT.1).OR.(LU.GT.63))LU=1 
      ILU=IOR(LU,400B)
C 
      IF((LU(2).LT.1).OR.(LU(2).GT.63))LU(2)=ILU
      LU(2)=IOR(LU(2),200B) 
C 
C GO INITIALIZE ALL BUFFERS 
C 
      GOTO 700
    5 ICR=0 
      IMOD=0
      IOUT=0
      ILST=0
C 
C 
C CREATE, MODIFY, OUTPUT OR LIST A SOFT KEY COMMAND SET?
C 
   10 CALL EXEC(2,ILU,REC7,53)
      REG=EXEC(1,ILU,IBUF,1)
      IF(IBUF.EQ.040440B)GOTO 3000
      IF(IB.EQ.0)GOTO 2000
      IBUF=IAND(IBUF,077400B) 
      IF(IBUF.EQ.041400B)GOTO 200 
      IF(IBUF.EQ.046400B)GOTO 300 
      IF(IBUF.EQ.047400B)GOTO 400 
      IF(IBUF.EQ.046000B)GOTO 500 
      GOTO 10 
C 
C READ COMMAND SET FROM OLD FILE
C 
C 
C OPEN OLD FILE 
C 
   17 CALL OPEN(IDCB,IERR,IBUF2(2),0,IBUF2(6),IBUF2(10))
      IF(IERR.LT.0)GOTO 630 
C 
C READ CONTENTS OF FILE 
C 
      CALL READF(IDCB,IERR,REC1,4)
      IF(IERR.LT.0)GOTO 630 
C 
      CALL READF(IDCB,IERR,REC2,55) 
      IF(IERR.LT.0)GOTO 630 
C 
      CALL READF(IDCB,IERR,REC3,55) 
      IF(IERR.LT.0)GOTO 630 
C 
      CALL READF(IDCB,IERR,REC4,2)
      IF(IERR.LT.0)GOTO 630 
C 
      K=1 
      DO 20 I=1,8 
      CALL READF(IDCB,IERR,REC5(K),45,LEN)
      IF(IERR.LT.0)GOTO 630 
      NWRDS(I)=LEN
      K=K+45
   20 CONTINUE
C 
      CALL READF(IDCB,IERR,REC6,2)
      IF(IERR.LT.0)GOTO 630 
C 
C CLOSE FILE
C 
      CALL CLOSE(IDCB,IERR) 
      IF(IERR.LT.0)GOTO 630 
      IF(IMOD.EQ.1)GOTO 315 
      IF(IOUT.EQ.1)GOTO 415 
      IF(ILST.EQ.1)GOTO 510 
C 
C READ OLD COMMAND SET FROM A DEVICE LU 
C 
   22 REG=EXEC(1,IBUF2(2),REC1,4) 
      IF(IB.NE.4)GOTO 675 
C 
      REG=EXEC(1,IBUF2(2),REC2,55)
      IF(IB.NE.55)GOTO 675
C 
      REG=EXEC(1,IBUF2(2),REC3,55)
      IF(IB.NE.55)GOTO 675
C 
      REG=EXEC(1,IBUF2(2),REC4,2) 
      IF(IB.NE.2)GOTO 675 
C 
      K=1 
      DO 25 I=1,8 
      REG=EXEC(1,IBUF2(2),REC5(K),45) 
      NWRDS(I)=IB 
      K=K+45
   25 CONTINUE
C 
      REG=EXEC(1,IBUF2(2),REC6,2) 
      IF(IB.NE.2)GOTO 675 
      IF(IMOD.EQ.1)GOTO 315 
      IF(IOUT.EQ.1)GOTO 415 
      IF(ILST.EQ.1)GOTO 510 
C 
C 
C MAKE SOFT KEY ASSIGNMENTS 
C 
C 
C REQUEST FUNCTION KEY NUMBER WHOSE ASSIGNMENT IS TO BE MADE. 
C 
   30 CALL EXEC(2,ILU,REC8,51)
      REG=EXEC(1,ILU,KEYN,1)
      IF(IB.EQ.0)GOTO 10
      IF(KEYN.EQ.040440B)GOTO 3000
      IMSK1=IAND(KEYN,177B) 
      IF(IMSK1.NE.40B)GOTO 30 
      IMSK2=IAND(KEYN,077400B)
      IF((IMSK2.GT.034000B).OR.(IMSK2.LT.030400B))GOTO 30 
      KEY=KEYN/400B-60B 
C 
C READ SOFT KEY LABEL ASSIGNMENT OF UP TO 16 CHARACTERS AND STORE.
C 
      CALL EXEC(2,ILU,REC9,72)
C 
      REG=EXEC(1,ILU,IBUF,8)
      IF(IBUF.EQ.040440B)GOTO 3000
      IF(IB.EQ.0)GOTO 45
C 
C CENTER THE SOFT KEY LABEL IN THE LABEL FIELD. 
C 
      NUM=IAND(IB,1)
      IF(NUM.NE.0)GOTO 35 
      I1=IB 
      GOTO 40 
   35 I1=IB+1 
   40 L=((8-I1)/2)+1
C 
C INITIALIZE LABEL BUFFER FOR SPECIFIC KEY
C 
   45 IF(KEY.GT.4)KEY1=KEY-4
      DO 55 J=1,8 
      IF(KEY.GT.4)GOTO 50 
      LABL1(J,KEY)=020040B
      GOTO 55 
   50 LABL2(J,KEY1)=020040B 
   55 CONTINUE
      IF(IB.EQ.0)GOTO 85
C 
C SAVE THE SOFT KEY LABEL 
C 
   65 DO 80 K=1,IB
      IF(KEY.GT.4)GOTO 70 
      LABL1(L,KEY)=IBUF(K)
      GOTO 75 
   70 LABL2(L,KEY1)=IBUF(K) 
   75 L=L+1 
   80 CONTINUE
C 
C REQUEST SOFT KEY TYPE 
C 
   85 CALL EXEC(2,ILU,REC10,35) 
C 
      REG=EXEC(1,ILU,IBUF,1)
      IF(IBUF.EQ.040440B)GOTO 3000
      IF(IB.NE.0)GOTO 90
      ITYPE=62B 
      GOTO 95 
   90 ITYPE=IAND(IBUF,177B) 
      IF(ITYPE.NE.40B)GOTO 85 
      ITYPE=IAND(IBUF,077400B)
      IF((ITYPE.NE.030000B).AND.(ITYPE.NE.031000B))GOTO 85
      ITYPE=ITYPE/400B
C 
C SAVE THE SOFT KEY TYPE
C 
   95 REC5(45*(KEY-1)+2)=IOR(ITYPE,063000B) 
C 
C 
C REQUEST ASCII COMMAND STRING
C 
C 
  100 CALL EXEC(2,ILU,REC11,72) 
C 
      REG=EXEC(1,ILU,IBUF,-80)
      IF(IBUF.EQ.040440B)GOTO 3000
      IF(IB.NE.0)GOTO 105 
      NWRDS(KEY)=6
      L=45*(KEY-1)
      REC5(L+4)=065440B 
      REC5(L+5)=031114B 
      REC5(L+6)=015560B+(KEY-1) 
      GOTO 180
  105 IC=IB 
C 
C CONVERT NUMBER OF CHARACTERS TO ASCII EQUIVALENT
C 
  115 NCHAR=KCVT(IC)
C 
C CALCULATE WHERE TO STORE COMMAND STRING LENGTH IN REC5
C 
      LOC=((KEY-1)*45)+4
C 
C 
      IF(IC.GE.10)GOTO 165
C 
C NUMBER OF CHARACTERS IN COMMAND STRING IS LESS THAN 10. 
C 
C MASK SINGLE DIGIT,OR WITH ASCII L, SHIFT TO UPPER BYTE, OR
C WITH ASCII L, STORE IN WORD FIVE OF COMMAND STRING. 
C SET WORD FOUR OF ASCII COMMAND STRING TO 065440B. 
C 
      ICHR1=IAND(NCHAR,77B)*400B
      REC5(LOC)=065440B 
      REC5(LOC+1)=IOR(ICHR1,114B) 
      GOTO 170
C 
C NUMBER OF CHARACTERS IN COMMAND STRING IS GE 10.
C 
C MASK UPPER BYTE, SHIFT TO LOWER BYTE, OR WITH ASCII SMALL 
C K AND STORE IN WORD FOUR OF COMMAND STRING. 
C 
  165 ICHR1=IAND(NCHAR,037400B)/400B
      REC5(LOC)=IOR(065400B,ICHR1)
C 
C MASK LOWER BYTE, MOVE TO UPPER BYTE, OR WITH ASCII L AND
C STORE IN WORD FIVE OF COMMAND STRING. 
C 
      ICHR2=IAND(NCHAR,77B)*400B
      REC5(LOC+1)=IOR(ICHR2,114B) 
C 
C CALCULATE NUMBER OF WORDS IN COMMAND STRING 
C 
  170 NUM=IAND(IB,1)
      IF(NUM.NE.0)GOTO 175
      I1=IB/2 
      GOTO 180
  175 I1=(IB+1)/2 
C 
C INITIALIZE COMMAND STRING BUFFER FOR SPECIFIC KEY 
C 
  180 DO 185 I=2,40 
      ISTRG(I,KEY)=020040B
  185 CONTINUE
      IF(IB.EQ.0)GOTO 30
C 
C SAVE COMMAND STRING 
C 
      DO 190 I=1,I1 
      ISTRG(I,KEY)=IBUF(I)
  190 CONTINUE
C 
C SAVE NUMBER OF WORDS IN THE STRING
C 
      NWRDS(KEY)=5+I1 
      GOTO 30 
C 
C 
C CREATE A NEW SOFT KEYS COMMAND SET
C 
C 
  200 ICR=1 
      GOTO 700
  205 ICR=0 
      GOTO 30 
C 
C 
C MODIFY AN OLD COMMAND SET 
C 
C 
  300 IMOD=1
      CALL EXEC(2,ILU,REC12,29) 
      CALL EXEC(2,ILU,REC13,62) 
C 
      REG=EXEC(1,ILU,IBUF,-20)
      CALL PARSE(IBUF,IB,IBUF3) 
      IF(IBUF3(2).EQ.040440B)GOTO 3000
      IF(IBUF3.EQ.0)GOTO 315
      IBUF2=IBUF3 
      IBUF2(2)=IBUF3(2) 
      IBUF2(3)=IBUF3(3) 
      IBUF2(4)=IBUF3(4) 
      IBUF2(6)=IBUF3(6) 
      IBUF2(10)=IBUF3(10) 
      GOTO 700
  305 IF(IBUF2.EQ.1)GOTO 310
      GOTO 17 
  310 IF((IBUF2(2).LT.1).OR.(IBUF2(2).GT.63))GOTO 300 
      GOTO 22 
  315 IMOD=0
      GOTO 30 
C 
C OUTPUT COMMAND SET
C 
  400 IOUT=1
C 
C REQUEST WHERE COMMAND SET TO BE OUTPUT IS STORED [FILE,LU OR KEYS]
C 
      CALL EXEC(2,ILU,REC12,29) 
      CALL EXEC(2,ILU,REC14,53) 
C 
      REG=EXEC(1,ILU,IBUF,-20)
      CALL PARSE(IBUF,IB,IBUF3) 
      IF(IBUF3(2).EQ.040440B)GOTO 3000
      IF(IBUF3.EQ.0)GOTO 415
      IBUF2=IBUF3 
      IBUF2(2)=IBUF3(2) 
      IBUF2(3)=IBUF3(3) 
      IBUF2(4)=IBUF3(4) 
      IBUF2(6)=IBUF3(6) 
      IBUF2(10)=IBUF3(10) 
      IF(IBUF2.EQ.1)GOTO 405
      GOTO 17 
  405 IF((IBUF2(2).LT.1).OR.(IBUF2(2).GT.63))GOTO 400 
      GOTO 22 
C 
C REQUEST [FILE,LU] WHERE COMMAND SET IS TO BE OUTPUT 
C 
  415 IOUT=0
      IFLG=0
      CALL EXEC(2,ILU,REC12,29) 
      CALL EXEC(2,ILU,REC15,41) 
C 
      REG=EXEC(1,ILU,IBUF,-20)
      CALL PARSE(IBUF,IB,IBUF3) 
      IF(IBUF3(2).EQ.040440B)GOTO 3000
C 
C COMMAND SET TO BE OUTPUT TO A FILE OR LU? 
C 
      IF(IBUF3.EQ.0)GOTO 420
      IF(IBUF3.EQ.1)GOTO 430
      GOTO 600
  420 IF(IBUF2.EQ.0)GOTO 1000 
      IF(IBUF2.EQ.1)GOTO 425
      GOTO 610
  425 IF((IBUF2(2).LT.1).OR.(IBUF2(2).GT.63))GOTO 415 
      GOTO 665
  430 IF((IBUF3(2).LT.1).OR.(IBUF3(2).GT.63))GOTO 415 
      GOTO 660
C 
C LIST COMMAND SET
C 
  500 ILST=1
      CALL EXEC(2,ILU,REC12,29) 
      CALL EXEC(2,ILU,REC16,52) 
C 
      REG=EXEC(1,ILU,IBUF,-20)
      CALL PARSE(IBUF,IB,IBUF3) 
      IF(IBUF3(2).EQ.040440B)GOTO 3000
      IF(IBUF3.EQ.0)GOTO 510
      IBUF2=IBUF3 
      IBUF2(2)=IBUF3(2) 
      IBUF2(3)=IBUF3(3) 
      IBUF2(4)=IBUF3(4) 
      IBUF2(6)=IBUF3(6) 
      IBUF2(10)=IBUF3(10) 
      IF(IBUF2.EQ.1)GOTO 505
      GOTO 17 
  505 IF((IBUF2(2).LT.1).OR.(IBUF2(2).GT.63))GOTO 500 
      GOTO 22 
C 
C LIST SOFT KEY COMMAND SET 
C 
  510 ILST=0
      DO 515 K=1,4
      REG=EXEC(2,LU(2),LABL1(1,K),8)
      ITYPE=IAND(REC5(2+45*(K-1)),77B)
      REG=EXEC(2,LU(2),ITYPE,1) 
      REG=EXEC(2,LU(2),ISTRG(1,K),NWRDS(K)) 
  515 CONTINUE
      DO 520 K=1,4
      REG=EXEC(2,LU(2),LABL2(1,K),8)
      ITYPE=IAND(REC5(2+45*(K+3)),77B)
      REG=EXEC(2,LU(2),ITYPE,1) 
      REG=EXEC(2,LU(2),ISTRG(1,K+4),NWRDS(K+4)) 
  520 CONTINUE
      GOTO 10 
C 
C COMMAND SET IS TO BE STORED IN A FILE 
C 
C 
  600 IBUF2=IBUF3 
      IBUF2(2)=IBUF3(2) 
      IBUF2(3)=IBUF3(3) 
      IBUF2(4)=IBUF3(4) 
      IBUF2(6)=IBUF3(6) 
      IBUF2(10)=IBUF3(10) 
      GOTO 615
C 
C CREATE OR REPLACE COMMAND SET FILE
C 
  610 CALL OPEN(IDCB,IERR,IBUF2(2),0,IBUF2(6),IBUF2(10))
      IF(IERR.LT.0)GOTO 630 
      GOTO 620
  615 CALL CREAT(IDCB,IERR,IBUF2(2),5,4,IBUF2(6),IBUF2(10)) 
      IF(IERR.LT.0)GOTO 630 
C 
C WRITE FIRST RECORD
C 
  620 CALL WRITF(IDCB,IERR,REC1,4)
      IF(IERR.LT.0)GOTO 630 
C 
C WRITE SECOND RECORD FOR FIRST FOUR SOFT KEY LABELS
C 
      CALL WRITF(IDCB,IERR,REC2,55) 
      IF(IERR.LT.0)GOTO 630 
C 
C WRITE THIRD RECORD FOR SECOND FOUR SOFT KEY LABELS
C 
      CALL WRITF(IDCB,IERR,REC3,55) 
      IF(IERR.LT.0)GOTO 630 
C 
C WRITE FOURTH RECORD 
C 
      CALL WRITF(IDCB,IERR,REC4,2)
      IF(IERR.LT.0)GOTO 630 
C 
C WRITE SOFT KEY COMMAND STRINGS
C 
      K=1 
      DO 625 KEY=1,8
      CALL WRITF(IDCB,IERR,REC5(K),NWRDS(KEY))
      IF(IERR.LT.0)GOTO 630 
      K=K+45
  625 CONTINUE
C 
C WRITE SIXTH RECORD
C 
      CALL WRITF(IDCB,IERR,REC6,2)
      IF(IERR.LT.0)GOTO 630 
C 
C WRITE AN END OF FILE
C 
      CALL WRITF(IDCB,IERR,REC6,-1) 
      IF(IERR.LT.0)GOTO 630 
      GOTO 650
C 
C FILE MANAGER ERROR MESSAGE
C 
C CONVERT TWO'S COMPLEMENT OF FMGR ERROR CODE TO POSITIVE 
C OCTAL EQUIVALENT
C 
  630 IFLG=1
      IERR1=IERR-1B 
      IB=1
      DO 645 I=1,16 
      IE=IAND(IERR1,IB) 
      IF(IE.EQ.IB)GOTO 635
      IERR1=IERR1+IB
      GOTO 640
  635 IERR1=IERR1-IB
  640 IB=IB*2B
  645 CONTINUE
C 
C CONVERT OCTAL ERROR CODE TO ASCII EQUIVALENT
C 
      IERR=KCVT(IERR1)
C 
C WRITE ERROR MESSAGE 
C 
      CALL EXEC(2,ILU,REC17,19) 
C 
C CLOSE FILE
C 
  650 CALL CLOSE(IDCB,IERR) 
      IF(IMOD.EQ.1)GOTO 300 
      IF(IOUT.EQ.1)GOTO 400 
      IF(ILST.EQ.1)GOTO 500 
      IF(IFLG.EQ.1)GOTO 415 
      GOTO 10 
C 
C 
C COMMAND SET TO BE OUTPUT TO A DEVICE LOGICAL UNIT 
C 
  660 IBUF2=IBUF3 
      IBUF2(2)=IBUF3(2) 
C 
C WRITE FIRST RECORD TO LU
C 
  665 REG=EXEC(2,IBUF2(2),REC1,4) 
C 
C WRITE SECOND RECORD TO LU 
C 
      REG=EXEC(2,IBUF2(2),REC2,55)
C 
C WRITE THIRD RECORD TO LU
C 
      REG=EXEC(2,IBUF2(2),REC3,55)
C 
C WRITE FOURTH RECORD TO LU 
C 
      REG=EXEC(2,IBUF2(2),REC4,2) 
C 
C WRITE SOFT KEY COMMAND STRINGS
C 
      K=1 
      DO 670 KEY=1,8
      REG=EXEC(2,IBUF2(2),REC5(K),NWRDS(KEY)) 
      K=K+45
  670 CONTINUE
C 
C WRITE SIXTH RECORD TO LU
C 
      REG=EXEC(2,IBUF2(2),REC6,2) 
      GOTO 10 
C 
C EXEC ERROR MESSAGE
C 
  675 CALL EXEC(2,ILU,REC18,20) 
      IF(IMOD.EQ.1)GOTO 300 
      IF(IOUT.EQ.1)GOTO 400 
      IF(ILST.EQ.1)GOTO 500 
      GOTO 10 
C 
C INITIALIZE ALL BUFFERS
C 
  700 DO 710 K=1,4
      DO 710 J=1,8
      LABL1(J,K)=020040B
      LABL2(J,K)=020040B
  710 CONTINUE
      DO 715 K=1,8
      NWRDS(K)=6
      L=45*(K-1)
      REC5(L+2)=063062B 
      REC5(L+4)=065440B 
      REC5(L+5)=031114B 
      REC5(L+6)=015560B+(K-1) 
      DO 715 J=2,40 
      ISTRG(J,K)=020040B
  715 CONTINUE
      IF(ICR.EQ.1)GOTO 205
      IF(IMOD.EQ.1)GOTO 305 
      GOTO 5
C 
C NO ORIGINAL FILE OR LU EXISTS MESSAGE 
C 
 1000 CALL EXEC(2,ILU,REC19,16) 
      GOTO 415
C 
C END KEYS MESSAGE
C 
 2000 CALL EXEC(2,ILU,REC20,5)
      GOTO 4000 
C 
C KEYS HAS BEEN ABORTED MESSAGE 
C 
 3000 CALL EXEC(2,ILU,REC21,12) 
 4000 END 
      END$
                                                                                                                                                                                          