FTN4
      PROGRAM QY13(5,90),92069-16060 REV.1912 781114
C 
C 
C*************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS    *
C RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
C*************************************************************
C 
C 
C     SOURCE:    92069-18076
C     RELOC:     92069-16060
C 
C 
C************************************************************ 
C 
C 
C  HELP SERVICE ROUTINE 
C 
      INTEGER CMND(2),FILE(3),DIR(128)
      INTEGER KDCB(144) 
      INTEGER IBUF(128) 
      INTEGER ERR1(9),ERR2(7) 
C$$$$$$$$$$$$$$$$$$$ NOVEMBER 3,1978   $$$$$$$$$$$$$$$$$$$$$
      INTEGER INLU,ITTY,ILP,IDCB,JDCB,XEQ 
      INTEGER DBNAM,DBLEV,DSNAM,DINAM,SELECT,SNAM 
      INTEGER DSNUM,DINUM,PARM,LPARM,ECHO,QSERR 
      INTEGER IMA,IB,IBSZ,SECNO,IEND,ISCAN
      LOGICAL BREAK 
      INTEGER IPFLAG,IOFLAG,RMOTE 
      LOGICAL BATCH,XQBCH 
      INTEGER PAGCNT,LNCNT
      INTEGER PAGLEN,COLLIM 
      REAL    RRCNT 
      REAL    SELT,RSEC 
      INTEGER IPTR
      REAL    RCOUNT
      INTEGER S,R3,TRKNM,IDILU
      INTEGER R6
      REAL    ATOTAL
      INTEGER LIST,L,T,U
      INTEGER LEVSTR,LEVLEN 
      INTEGER IBUFF 
      INTEGER SS(7,100) 
C 
      COMMON INLU(145),ITTY(145),ILP(145),IDCB(145),JDCB(144),XEQ(145)
      COMMON DBNAM(10),DBLEV(3),DSNAM(3),DINAM(3),SELECT(6),SNAM(3) 
      COMMON DSNUM,DINUM,PARM(40),LPARM,ECHO,QSERR
      COMMON IMA(37),IB(896),IBSZ,SECNO,IEND,ISCAN
      COMMON BREAK
      COMMON IPFLAG,IOFLAG,RMOTE
      COMMON BATCH,XQBCH
      COMMON PAGCNT,LNCNT 
      COMMON PAGLEN,COLLIM
      COMMON RRCNT
      COMMON SELT(64),RSEC
      COMMON IPTR 
      COMMON RCOUNT 
      COMMON S(15,50),R3,TRKNM,IDILU
      COMMON R6 
      COMMON ATOTAL(6,5)
      COMMON LIST(101,6),L(7),T(5),U(7,5) 
      COMMON LEVSTR(66,5),LEVLEN(5) 
      COMMON IBUFF(2048)
C 
      EQUIVALENCE (S,SS)
C$$$$$$$$$$$$$$$$$$$ NOVEMBER 3,1978   $$$$$$$$$$$$$$$$$$$$$
C 
      DATA FILE/2HQS,2HHE,2HLP/ 
      DATA CMND/2H  ,2H  /
C 
C COMMAND NOT FOUND 
      DATA ERR1/2H C,2HOM,2HMA,2HND,2H N,2HOT,2H F,2HOU,2HND/ 
C SYNTAX ERROR
      DATA ERR2/2H S,2HYN,2HTA,2HX ,2HER,2HRO,2HR / 
C 
C 
C 
C 
C BEGIN 
C 
C 
      LIST = 0
C 
C  SCAN FOR ; OR NAME 
C 
      CALL LSCAN(IB,I,J,K)
      IF(K .EQ. 2) GOTO 10
      IF(K .EQ. 5) GOTO 60
      GOTO 7010 
C 
C     MOVE NAME TO CMND 
C 
   10 CONTINUE
      CALL SFILL(CMND,1,4,40B)
      IF(I+3 .LT. J) J = I + 3
      CALL SMOVE(IB,I,J,CMND,1) 
   15 CALL LSCAN(IB,I,J,K)
      IF(K .EQ. 2) GOTO 20
      IF(K .EQ. 5) GOTO 60
      GOTO 7010 
   20 IF (JSCOM(IB,I,I+1,2HAL,1,IERR).NE.0) GO TO 30
      LIST = 111
      GO TO 60
   30 IF (JSCOM(IB,I,I+1,2HFU,1,IERR).NE.0) GO TO 40
      LIST = LIST + 100 
      GO TO 15
   40 IF (JSCOM(IB,I,I+1,2HSY,1,IERR).NE.0) GO TO 50
      LIST = LIST + 10
      GO TO 15
   50 IF (JSCOM(IB,I,I+1,2HOP,1,IERR).NE.0) GO TO 15
      LIST = LIST + 1 
      GO TO 15
   60 IF (LIST.EQ.0 .OR. LIST.EQ.111) LIST = 111
C 
C     GET DIRECTORY 
C 
      CALL OPEN(KDCB,IERR,FILE) 
61    IF (IERR.GE.0) GOTO 65
      CALL FMERR(IERR,ITTY) 
      GOTO 120
65    CALL READF(KDCB,IERR,DIR,128,ILEN,1)
      IF (IERR.LT.0) GOTO 61
C 
C  LSEC   DATA FILE SECTOR LIMIT
C  NWDS   NO OF WORDS/DIRENTRY ENTRY
C  NEXT   NO OF DIRECTORY ENTRIES 
C  ILIM   IDRECTORY LIMIT IN WORDS
C  IPNT   POINTER TO REL SECTOR OF DATA 
C 
      LSEC=DIR(2) 
      NENT=DIR(3) - 1 
      NWDS=DIR(4) 
      ILIM=NWDS*NENT + 7
      IF (CMND(1).NE.2H  ) GO TO 80 
   70 IOUT=1
      ISEC=DIR(7) 
      GO TO 170 
   80 DO 110 J=8,ILIM,NWDS
      IF (DIR(J)-CMND(1)) 110,90,110
   90 IF (DIR(J+1)-CMND(2)) 110,100,110 
  100 IPNT=J+2
      GO TO 130 
  110 CONTINUE
C 
C     OUTPUT "COMMAND NOT FOUND"
C 
115   CALL ERIO(2,ITTY,ERR1,9)
C 
  120 CALL CLOSE(KDCB)
      SNAM(2)=2H
      CALL LOAD(SNAM) 
C 
  130 IF (LIST.LT.100) GO TO 140
      ISEC=DIR(IPNT)
      LIST=LIST-100 
      GO TO 160 
  140 IF (LIST.LT.10) GO TO 150 
      ISEC=DIR(IPNT+1)
      LIST=LIST-10
      GO TO 160 
  150 IF (LIST.LT.1) GO TO 120
      ISEC=DIR(IPNT+2)
      LIST=LIST-1 
  160 IOUT=2
C 
C  READ 128 WORDS FROM THE DISC INTO IBUF AND 
C  RESET THE POINTER TO THE START OF THE BUFFER 
C 
  170 IPNTR=1 
      CALL READF(KDCB,IERR,IBUF,128,ILEN,ISEC)
      IF(IERR.LT.0) GOTO 61 
C 
C  PICK UP RECORD LENGTH (WORDS) AND
C  SUBSTITUTE BLANKS
C 
  180 ILGTH=IBUF(IPNTR) 
      IBUF(IPNTR)=2H
C 
C  OUTPUT THE RECORD AND UPDATE THE POINTER 
C  TO THE NEXT RECORD COUNT WORD
C 
      ILGTH=ILGTH+1 
      CALL QRIO(2,ILP,IBUF(IPNTR),ILGTH)
      IPNTR=IPNTR+ILGTH 
C 
C  IF NEXT WORD COUNT = -1 INPUT NEXT SECTOR
C                        0 END OF DATA
C                        + OUTPUT NEXT RECORD 
C 
      IF (IBUF(IPNTR)) 190,200,180
  190 ISEC=ISEC+1 
      GO TO 170 
  200 GO TO (120,130), IOUT 
C 
C 
C 
C 
C ERROR PROCESSOR 
C 
7010  CONTINUE
      CALL QRIO(2,ITTY,IB,-IEND)
      IF(I .GT. 72) I = I-I/72*72 
      CALL SFILL(IMA,1,72,40B)
      CALL SPUT(IMA,I,136B) 
      CALL QRIO(2,ITTY,IMA,-I)
      CALL ERIO(2,ITTY,ERR2,7)
      GOTO 120
      END 
$ 
                                                                                                                                                                                