FTN4,B,L
C 
      PROGRAM KYDMP(3,10) 
C 
C     DATE:09 FEB 77
C 
C 
C     KYDMP IS A PROGRAM THAT WILL OUTPUT SOFT KEY COMMAND SETS 
C     FROM DISC OR MINI CARTRIDGE FILE OR LU TO A 2645A TERMINAL
C     IN AN HP 1000 SYSTEM. IT IS PROVIDED SPECIFICALLY FOR RTE-M 
C     SYSTEMS IN WHICH THERE IS NO FMGR PROGRAM.
C 
C     USE ONE OF THE FOLLOWING COMMAND SEQUENCES TO RUN KYDMP 
C     FROM RTE OR FMGR: 
C 
C        1) TO DUMP A COMMAND SET FROM A DISC OR MINI-CARTRIDGE 
C           FILE USE: 
C 
C                RU,KYDMP,[LU],FI,[LN],[AM] [,SECURITY CODE]
C 
C        2) TO DUMP A COMMAND SET FROM AN UNNAMED MINI-CARTRIDGE
C           FILE USE: 
C 
C                RU,KYDMP,[LU],CTU
C 
C                WHERE: [LU] = THE LU# OF THE 2645A TERMINAL TO WHICH 
C                              THE COMMAND SET IS TO BE OUTPUT.DEFAULT
C                              IS LU 1. 
C 
C                       FI,LN,AM =FILE NAME WHERE COMMAND SET IS STORED 
C                              FI = FIRST TWO CHARACTERS OF ASCII NAME
C                              LN = SECOND TWO CHARACTERS OF ASCII NAME 
C                              AM = THIRD TWO CHARACTERS OF ASCII NAME
C 
C                       SECURITY CODE = SECURITY CODE OF FILE (OPTIONAL)
C 
C                       CTU = LU# OF 2645A CTU WHERE COMMAND SET TO BE
C                              DUMPED IS STORED.
C 
C 
      DIMENSION IDCB(144),IP(5),NAM(3),IBUF(55) 
      DIMENSION MSG1(22),MSG2(20),MSG3(17),IA(2)
C 
      EQUIVALENCE (IP(2),NAM),(REG,IA),(IB,IA(2)),(IERR,MSG2(8))
C 
      DATA MSG1/006412B,2HNO,2H S,2HEC,2HON,2HD ,2HPA,2HRA,2HME,
     C2HTE,2HR ,2HSP,2HEC,2HIF,2HIE,2HD ,2HOR,2H N,2HEG,2HAT, 
     C2HIV,2HE /
C 
C 
      DATA MSG2/006412B,2HFM,2HGR,2H E,2HRR,2HOR,020055B,020040B, 
     C2H W,2HHE,2HN ,2HRE,2HAD,2HIN,2HG ,2HFR,2HOM,2H F,2HIL,2HE /
C 
      DATA MSG3/006412B,2HER,2HRO,2HR ,2HIN,2H R,2HEA,2HDI,2HNG,
     C2H F,2HRO,2HM ,2H26,2H45,2HA ,2HCT,2HU /
C 
C 
C RETRIEVE PARAMETERS 
C 
      CALL RMPAR(IP)
      IF((IP.LT.1).OR.(IP.GT.77B))IP=1
C 
C IS SECOND PARAMETER AN LU?
C 
      IF(IP(2).LT.1)GOTO 300
      IF(IP(2).LT.77B)GOTO 200
C 
C SECOND PARAMETER IS A FILE NAME 
C 
      IF(IP(3).EQ.0)IP(3)=020040B 
      IF(IP(4).EQ.0)IP(4)=020040B 
C 
C READ COMMAND SET FROM A FILE AND OUTPUT TO 2645A
C 
C OPEN FILE 
C 
      CALL OPEN(IDCB,IERR,NAM,0,IP(5))
      IF(IERR.LT.0)GOTO 310 
C 
C READ FIRST RECORD AND OUTPUT
C 
      CALL READF(IDCB,IERR,IBUF,4)
      IF(IERR.LT.0)GOTO 310 
      REG=EXEC(2,IP,IBUF,4) 
C 
C READ SECOND RECORD AND OUTPUT 
C 
      CALL READF(IDCB,IERR,IBUF,55) 
      IF(IERR.LT.0)GOTO 310 
      REG=EXEC(2,IP,IBUF,55)
C 
C READ THIRD RECORD AND OUTPUT
C 
      CALL READF(IDCB,IERR,IBUF,55) 
      IF(IERR.LT.0)GOTO 310 
      REG=EXEC(2,IP,IBUF,55)
C 
C READ FOURTH RECORD AND OUTPUT 
C 
      CALL READF(IDCB,IERR,IBUF,2)
      IF(IERR.LT.0)GOTO 310 
      REG=EXEC(2,IP,IBUF,2) 
C 
C READ EIGHT COMMAND STRING RECORDS AND OUTPUT
C 
      DO 110 I=1,8
      CALL READF(IDCB,IERR,IBUF,45,LEN) 
      IF(IERR.LT.0)GOTO 310 
      REG=EXEC(2,IP,IBUF,LEN) 
  110 CONTINUE
C 
C READ LAST RECORD AND OUTPUT 
C 
      CALL READF(IDCB,IERR,IBUF,2)
      IF(IERR.LT.0)GOTO 310 
      REG=EXEC(2,IP,IBUF,2) 
C 
C CLOSE FILE
C 
      CALL CLOSE(IDCB,IERR) 
      GOTO 400
C 
C 
C READ COMAND SET FROM LU 
C 
C READ FIRST RECORD FROM 2645A CTU AND OUTPUT 
C 
  200 REG=EXEC(1,NAM,IBUF,4)
      IF(IB.NE.4)GOTO 330 
      REG=EXEC(2,IP,IBUF,4) 
C 
C READ SECOND RECORD FROM 2645A CTU AND OUTPUT
C 
      REG=EXEC(1,NAM,IBUF,55) 
      IF(IB.NE.55)GOTO 330
      REG=EXEC(2,IP,IBUF,55)
C 
C READ THIRD RECORD FROM 2645A CTU AND OUTPUT 
C 
      REG=EXEC(1,NAM,IBUF,55) 
      IF(IB.NE.55)GOTO 330
      REG=EXEC(2,IP,IBUF,55)
C 
C READ FOURTH RECORD FROM 2645ACTU AND OUTPUT 
C 
      REG=EXEC(1,NAM,IBUF,2)
      IF(IB.NE.2)GOTO 330 
      REG=EXEC(2,IP,IBUF,2) 
C 
C READ EIGHT COMMAND STRING RECORDS AND OUTPUT
C 
      DO 210 I=1,8
      REG=EXEC(1,NAM,IBUF,45) 
      REG=EXEC(2,IP,IBUF,IB)
  210 CONTINUE
C 
C READ LAST RECORD FROM 2645A CTU AND OUTPUT
C 
      REG=EXEC(1,NAM,IBUF,2)
      IF(IB.NE.2)GOTO 330 
      REG=EXEC(2,IP,IBUF,2) 
      GOTO 400
C 
C MESSAGE-SECOND PARAMETER ZERO OR NEGATIVE 
C 
  300 CALL EXEC(2,IP,MSG1,22) 
      GOTO 400
C 
C MESSAGE-ERROR WHEN READING FROM FILE
C 
  310 IERR1=IERR-1B 
      IB=1
      DO 320 I=1,16 
      IE=IAND(IERR1,IB) 
      IF(IE.EQ.IB)GOTO 312
      IERR1=IERR1+IB
      GOTO 315
  312 IERR1=IERR1-IB
  315 IB=IB*2B
  320 CONTINUE
      IERR=KCVT(IERR1)
      CALL EXEC(2,IP,MSG2,20) 
      GOTO 400
C 
C ERROR WHEN READING FROM 2645A CTU 
C 
  330 CALL EXEC(2,IP,MSG3,17) 
  400 END 
      END$
