!*! Updated on 16-Oct-89 at 1:29 PM by Matt Badger; edit time: 0:00:16
!*************************** AMUS Program Label ******************************
! Filename: HOTIDX.RUN Date: 042289
! Category: UTIL Hash Code: 300-302-307-524 Version: 1.0(101)
! Initials: AMI/AM Name: AMI BAR-YADIN
! Company: UNITED FASHIONS OF TEXAS Telephone #:512-631-2277
! Related Files:
! Min. Op. Sys.: Expertise Level: INT
! Special: Requires d/RUN
! Description: Prints an index of a d/Soft .HOT key file
!
!
!*****************************************************************************
!* Updated on 16-Aug-89 at 6:34 PM by Ami Bar-Yadin; edit time: 1:54:24 *!
PROGRAM HOTIDX,1.0(103)
!
! by Ami Bar-Yadin, AMI/AM
!
! Display, or write to a file, a list of the keywords of a .HOT key file
!
! Usage:
!
! .run hotidx {output=}{input}
! IE: .RUN HOTIDX DBASIC.IDX=HLP:DBASIC.HOT
!
! o Default extension for both input and output is .DAT
!
! o if no input file is given on the command line,
! the user is prompted for a file name.
!
! o if not output file is given output is displayed on the screen
!
! o for more about .HOT key files, please bug Michael Lewis, NOT me.
!
!
MAP1 IC,F,,1 ! input file channel
MAP1 OC,F,,2 ! output file channel
SETUP:
I=INSTR(1,.OPTIONS,"=")
WHEN I=0
OC=0
INFIL=.OPTIONS
ELSE
OUTFIL=.OPTIONS[1,I-1]
INFIL=.OPTIONS[I+1,-1]
WEND
WHEN INFIL=SPACE
REPEAT
INPUT "Input .hot file?";INFIL
LOOKUP INFIL,I
UNTIL I<0
WEND
OPEN #IC,INFIL,RANDOM,512,INRCN
IF OC OPEN #OC,OUTFIL,OUTPUT
RETURN
READ'DIRECTORY:
INRCN=0
READ #IC TOP'REC
sort.memory 64 TOP'ENTRIES(1) TOP'BLK'FIRST(1),TOP'BLK'LAST(1)
FOR TOPIDX=1 TO 64
INRCN=TOP'BLK'NO(TOPIDX)
WHEN INRCN>0
GOSUB READ'DIR'BLOCK
INDEX+=KEYWORDS
LENINDEX+=LEN(KEYWORDS)
WEND
NEXT
RETURN
READ'DIR'BLOCK:
READ #IC INBUF
KEYWORDS=SPACE
I=1
REPEAT
A$=INBUF[I;20]
P=LEN(A$)
IF P=0 BREAK
! XCALL REPCHR,A$,0," ^",0
J=0 : DO J=INSTR(J+1,A$," ") UNTIL J=0 : A$[J;1]="^" : ENDDO
KEYWORDS=CHR(P)+A$+KEYWORDS
P+=1
I+=P+(P MOD 2)+4
UNTIL 0
RETURN
PRINT'INDEX:
WHEN LENINDEX>10000
PRINT "%Index buffer overflow, some keywords lost"
LENINDEX=LEN(INDEX)
WEND
I=1
SCREEN'AREA=SPACE : SL=1 : SW=-1
REPEAT
P=ASC(INDEX[I;1])
A$=INDEX[I+1;P]
I+=1+P
L=LEN(A$)
WHEN LEN(SLINE(SL))+L>PAGEWIDTH
J=PAGELINES
GOSUB OUTPUT'PAGE
IF OC PRINT #OC ELSE PRINT
WHEN SW>0
FOR L=1 TO PAGELINES
SLINE(L)=SLINE(L)[SW+1,-1]
NEXT
WEND
SW=-1
WEND
SLINE(SL)+=A$
SL+=1
WHEN SL>PAGELINES
SL=0
FOR L=1 TO PAGELINES
SL=SL MAX LEN(SLINE(L))
NEXT
FOR L=1 TO PAGELINES
SLINE(L)+=SPACE(1+SL-LEN(SLINE(L)))
NEXT
SW=SL+1
SL=1
WEND
UNTIL I>LENINDEX
IF SL>1 J=SL-1 : GOSUB OUTPUT'PAGE
RETURN
OUTPUT'PAGE:
IF SW>0 J=PAGELINES
FOR L=1 TO J
WHEN OC
PRINT #OC SLINE(L)[1,SW]
ELSE
PRINT SLINE(L)[1,SW]
WEND
NEXT
RETURN