98 lines
3.3 KiB
Fortran
98 lines
3.3 KiB
Fortran
C SETHELP
|
|
C AUTHOR RODGER STADEN
|
|
C CREATES A HELP FILE FROM A FILE OF DOCUMENTATION THAT HAS THE
|
|
C FOLLOWING CHARACTERISTICS
|
|
C 1) EACH OPTION HAS A NUMBER BETWEEN BOTOPT AND TOPOPT
|
|
C 2) THE OPTION DESCRIPTIONS ARE HEADED BY THEIR OPTION NUMBER
|
|
C 3) OPTION HEADERS ARE FORMATTED IN THE FOLLOWING WAY
|
|
C A) ^@IJ. WHERE ^=SPACE, IJ=A 1 OR 2 DIGIT NUMBER, .=THE RIGHT
|
|
C DELIMITER OF THE NUMBER. THE NUMBER STARTS IN COLUMN 3.
|
|
C 4) EACH LINE <81 CHARACTERS IN LENGTH
|
|
C 5) THE BEST WAY TO FORMAT THE ORIGINAL TEXT FILE IS BY USING RUNOFF
|
|
C UNITS: KEYBOARD INPUT KBIN=5,
|
|
C KEYBOARD OUTPUT KBOUT=6,
|
|
C TEXT FILE INPUT DEVNOS(1)=1,
|
|
C HELP FILE OUTPUT DEVNOS(2)=2,
|
|
C HELP POINTERS DEVNOS(3)=3
|
|
SUBROUTINE FMAIN()
|
|
INTEGER BOTOPT,TOPOPT,BOT,TOP,DEVNOS(3)
|
|
PARAMETER (BOTOPT=-100,TOPOPT=300)
|
|
INTEGER HELPS(BOTOPT:TOPOPT),HELPE(BOTOPT:TOPOPT)
|
|
CHARACTER LINE*80
|
|
CHARACTER FILNAM*40
|
|
EXTERNAL IFROMC
|
|
CALL UNITNO(KBIN,KBOUT,DEVNOS,3)
|
|
WRITE(KBOUT,*)' SETHELP V2.1 AUTHOR: RODGER STADEN'
|
|
WRITE(KBOUT,2000)BOTOPT,TOPOPT
|
|
2000 FORMAT(' MINIMUM AND MAXIMUM ALLOWED OPTION NUMBERS ARE',2I6)
|
|
WRITE(KBOUT,1000)
|
|
1000 FORMAT(' ORIGINAL TEXT FILE NAME=',$)
|
|
CALL OPENF(DEVNOS(1),FILNAM,0,IOK,KBIN,KBOUT)
|
|
IF(IOK.NE.0)STOP
|
|
WRITE(KBOUT,1001)
|
|
1001 FORMAT(' RANDOM ACCESS TEXT FILE NAME=',$)
|
|
READ(KBIN,1002)FILNAM
|
|
1002 FORMAT(A)
|
|
FILNAM(30:30)=' '
|
|
CALL OPENRS(DEVNOS(2),FILNAM,IOK,20,3)
|
|
IF(IOK.NE.0)GO TO 100
|
|
WRITE(KBOUT,1003)
|
|
1003 FORMAT(' RECORD POINTER FILE=',$)
|
|
CALL OPENF(DEVNOS(3),FILNAM,1,IOK,KBIN,KBOUT)
|
|
IF(IOK.NE.0)STOP
|
|
C SET SILLY RANGES
|
|
BOT=99999
|
|
TOP=-9999
|
|
DO 10 I=BOTOPT,TOPOPT
|
|
HELPS(I)=1
|
|
HELPE(I)=1
|
|
10 CONTINUE
|
|
C SET NOPT, THE CURRENT OPTION NUMBER TO A FLAG VALUE TO MARK FIRST OPTION
|
|
NOPT=-9999
|
|
C IREC1 IS THE CURRENT LINE NUMBER
|
|
C IREC2 IS THE LINE NUMBER THAT THE LAST OPTION STARTS ON
|
|
IREC1=0
|
|
IREC2=1
|
|
30 CONTINUE
|
|
IREC1=IREC1+1
|
|
READ(DEVNOS(1),1002,END=40)LINE
|
|
WRITE(DEVNOS(2),REC=IREC1)LINE
|
|
C IS THIS THE FIRST LINE OF A NEW OPTION?
|
|
IF(LINE(2:2).EQ.'@')THEN
|
|
NCHAR=2
|
|
IF(LINE(4:4).EQ.'.')NCHAR=1
|
|
C LAST OPTION (NOPT) STARTS ON LINE IREC2 AND FINISHIES ON IREC1-1
|
|
C IF FIRST OPTION SKIP
|
|
IF(NOPT.EQ.-9999)GO TO 35
|
|
HELPS(NOPT)=IREC2
|
|
HELPE(NOPT)=IREC1-1
|
|
35 CONTINUE
|
|
C POINT TO START OF NEXT OPTION
|
|
IREC2=IREC1
|
|
C GET NEXT OPTION NUMBER
|
|
C NOPT=IFROMC(LINE(3:3),NCHAR,KBOUT)+ABS(BOT)
|
|
NOPT=IFROMC(LINE(3:3),NCHAR,KBOUT)
|
|
BOT=MIN(BOT,NOPT)
|
|
TOP=MAX(TOP,NOPT)
|
|
WRITE(KBOUT,2001)NOPT
|
|
2001 FORMAT(' OPTION NUMBER=',I6)
|
|
END IF
|
|
GO TO 30
|
|
40 CONTINUE
|
|
C DO LAST OPTION
|
|
HELPS(NOPT)=IREC2
|
|
HELPE(NOPT)=IREC1-1
|
|
DO 50 I=BOT,TOP
|
|
WRITE(KBOUT,2002)I,HELPS(I),HELPE(I)
|
|
2002 FORMAT(' OPTION',I6,' STARTS AT RECORD',I6,' AND ENDS AT',I6)
|
|
50 WRITE(DEVNOS(3),1004)I,HELPS(I),HELPE(I)
|
|
1004 FORMAT(3I6)
|
|
CLOSE(UNIT=DEVNOS(1))
|
|
CLOSE(UNIT=DEVNOS(3))
|
|
CLOSE(UNIT=DEVNOS(2))
|
|
STOP
|
|
100 CONTINUE
|
|
WRITE(KBOUT,9999)
|
|
9999 FORMAT(' ERROR WHEN TRYING TO OPEN DIRECT ACCESS FILE')
|
|
STOP
|
|
END
|