FTN4,L,C
      PROGRAM BORL
C 
C 
C*************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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     LISTING:   92063-19009
C     SOURCE:    92063-18009
C     RELOC:     92063-16009
C 
C 
C************************************************************ 
C 
C 
C  THIS PROGRAM WILL BUILD THE FILE 'HELPF' OR
C  LIST THE CONTENTS OF THE FILE '%HELP'. 
C 
      INTEGER DIR(128),DATA(128),RSN
      DIMENSION IBUF(41),INAM(3),NAME(3),ISIZE(2) 
      COMMON IBUF,INAM,NAME,DATA,NDATA,RSN,LU 
      COMMON IDCBW(144),IDCBR(144),IERR 
C 
C  INITIALIZE ARRAYS AND VARIABLES
C 
      DO 1 J=1,128
      DIR(J)=0
    1 DATA(J)=0 
      NDATA=1 
      RSN=2 
      NDIR=5
      NWDS=5
      NAME(1)=2HHE
      NAME(2)=2HLP
      NAME(3)=2HF 
      INAM(1)=2H%H
      INAM(2)=2HEL
      INAM(3)=2HP 
      ISIZE(1)=-1 
      ISIZE(2)=128
      CALL OPEN(IDCBR,IERR,INAM)
      IF (IERR.LT.0) GOTO 6 
      IF (ISSW(15)) 10,4
    4 CALL CREAT(IDCBW,IERR,NAME,ISIZE,2) 
      IF (IERR.GE.0) GOTO 5 
    6 CALL FMERR(IERR,6)
7     CALL CLOSE(IDCBR) 
      CALL LOCF(IDCBW,IERR,IREC,IRB,IOFF,JSEC)
      CALL CLOSE(IDCBW,IERR,(JSEC/2-RSN+1)) 
      CALL EXEC(6)
C 
C****************** 
C* VARIABLE NAMES * 
C****************** 
C 
C  DIR    128 WD BUFFER FOR DIRECTORY 
C  NDIR   POINTER TO START OF NEXT DIRECTORY ENTRY
C  NWDS   NO OF WORDS PER DIRECTORY ENTRY 
C  DATA   128 WD BUFFER FOR DISC OUTPUT 
C  NDATA  POINTER TO START OF NEXT RECORD IN DATA 
C  RSN    RELATIVE SECTOR NUMBER
C  IBUF   41 WD BUFFER FOR INPUT RECORD 
C  INAM   FILE MAME '%HELP' 
C  NAME   FILE NAME 'HELPF' 
C  LOG    INPUT RECORD SIZE (WORDS) 
C  LU     INPUT DEVICE LU 
C 
C 
C  CHECK SWITCH REG BIT(15)  ON = PRINT DATA FILE - %HELP 
C                           OFF = BUILD DATA FILE - HELPF 
5     IF (ISSW(15)) 10,100
C 
C  GET NEW PAGE ON PRINTER
C 
   10 CALL EXEC(3,1106B,-1) 
C 
C  **     END OF DATA 
C   1     SPACE LINE
C  %%     END OF COMMAND DESCRIPTION
C 
   20 CALL READF(IDCBR,IERR,IBUF(2),40,LOG) 
      IF (IERR.LT.0) GOTO 6 
      IF (IBUF(2).EQ.2H**) STOP 
      IF (IBUF(2).EQ.2H 1) GO TO 30 
      IF (IBUF(2).EQ.2H%%) GO TO 10 
      IBUF(1)=2H
      WRITE(6,40) (IBUF(I),I=1,LOG) 
      GO TO 20
   30 WRITE (6,40)
      GO TO 20
   40 FORMAT (2X,40R2)
C 
C  READ IN FIRST DATA RECORD IN A GROUP 
C  OF RECORDS DESCRIBING A COMMAND
C 
C  IF FIRST WORD = ** (END OF FILE) 
C 
  100 CALL READF(IDCBR,IERR,IBUF(2),40,LOG) 
      IF (IERR.EQ.-12) GOTO 105 
      IF (IERR.LT.0) GOTO 6 
105   IF (IBUF(2).EQ.2H**) GO TO 300
      IF (LOG-2) 120,110,120
  110 DIR(NDIR)=20040B
      DIR(NDIR+1)=20040B
      GO TO 130 
  120 CALL SMOVE(IBUF,8,11,DIR,2*NDIR-1)
  130 NDIR=NDIR+2 
      DIR(NDIR)=RSN 
      NDIR=NDIR+1 
C 
C  READ NEXT RECORD(S) UNTIL %% MARK
C  OR UNTIL CHANGE OF FUNCTION
C  (I.E.  F, S, O)
C 
  200 CALL READF(IDCBR,IERR,IBUF(2),40,LOG) 
      IF (IERR.LT.0) GOTO 6 
      IBUF(1)=LOG 
      IF (IBUF(2).NE.2H%%) GO TO 210
      CALL WDISC
      IF (IERR.LT.0) GOTO 6 
      GO TO 100 
C 
C  SUBSTITUTE CR/LF 
C 
  210 IF (IBUF(2).EQ.2H 1) IBUF(2)=6412B
C 
      IF (IBUF(2).EQ.2H S) GO TO 220
      IF (IBUF(2).EQ.2H O) GO TO 220
      GO TO 225 
C 
C  WRITE LAST DISC SECTOR FOR THIS COMMAND
C 
  220 CALL WDISC
      IF (IERR.LT.0) GOTO 6 
      DIR(NDIR)=RSN 
      NDIR=NDIR+1 
C 
C  IF THERE IS ROOM FOR THIS RECORD IN THE
C  CURRENT SECTOR BUFFER (RECORD LEN + 2),
C  MOVE THE RECORD TO THE BUFFER
C 
  225 K=LOG+2 
      IF (129-NDATA-K) 230,240,240
  230 DATA(NDATA)=-1
      CALL WDISC
      IF (IERR.LT.0) GOTO 6 
C 
C  MOVE DATA TO OUTPUT BUFFER 
C 
  240 K=NDATA+LOG 
      J=0 
      DO 250 I=NDATA,K
      J=J+1 
  250 DATA(I)=IBUF(J) 
      NDATA=NDATA+J 
      GO TO 200 
C 
C  FINISH THE DIRECTORY 
C 
  300 DIR(4)=NWDS 
      DIR(3)=NDIR/NWDS
      DIR(2)=RSN-1
      DIR(1)=NDIR-1 
C 
C  WRITE THE DIRECTORY
C 
      CALL WRITF(IDCBW,IERR,DIR,128,1)
      GOTO 7
      END 
      SUBROUTINE WDISC
      COMMON IBUF(41),INAM(3),NAME(3),IDATA(128),NDATA,IRSN,LU
      COMMON IDCBW(144),IDCBR(144),IERR 
C 
      CALL WRITF(IDCBW,IERR,IDATA,128,IRSN) 
      IRSN=IRSN+1 
      NDATA=1 
      DO 10 I=1,128 
   10 IDATA(I)=0
      RETURN
      END 
$END
FTN4,L,C
      SUBROUTINE WDISC
      COMMON IBUF(41),INAM(3),NAME(3),IDATA(128),NDATA,IRSN,LU
      COMMON IDCBW(144),IDCBR(144),IERR 
C 
      CALL WRITF(IDCBW,IERR,IDATA,128,IRSN) 
      IRSN=IRSN+1 
      NDATA=1 
      DO 10 I=1,128 
   10 IDATA(I)=0
      RETURN
      END 
$ 
                                                                                                                                                