!*! 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 MAP1 OUTFIL,S,30 MAP1 INFIL,S,30 MAP1 INRCN,F MAP1 INBUF,X,512 MAP1 TOPIDX,F MAP1 TOP'REC MAP2 TOP'ENTRIES(64) MAP3 TOP'BLK'FIRST,S,3 MAP3 TOP'BLK'LAST,S,3 MAP3 TOP'BLK'NO,B,2 MAP1 KEYWORDS,S,512 MAP1 INDEX,S,10000 MAP1 LENINDEX,F DEF PAGELINES=23 DEF PAGEWIDTH=80 MAP1 SCREEN'AREA,S MAP2 SL,F MAP2 SW,F MAP2 SLINE(PAGELINES),S,PAGEWIDTH MAP1 I,F MAP1 J,F MAP1 P,F MAP1 L,F MAP1 A$,S,25 ! !======= ! HOTIDX: GOSUB SETUP GOSUB READ'DIRECTORY GOSUB PRINT'INDEX END 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