** **BASIC **11-22-08 13:03:10 **09/15/86 **TOM PHILLIPS **WWW.TOM-PHILLIPS.INFO **Copyright 2008 by SQUASH. All rights reserved. * * QSEARCH - A utility to search a file or dictionary for a * series of strings, and display the lines found. * * QSEARCH { { DICT } file_name } * * * This program is based on a program idea supplied via * PICK SYSTEMS: "FIND" * * * Note: Some changes need to be made for D3, and are prefixed * with a comment line containing "D3-MODS". * * * *EQU AM TO @AM;* NORMALLY CHAR(254) EQU AM TO CHAR(254) EQU DICT.LT5 TO 'DICT ' * PROMPT '' PROCREAD PROC.RCD THEN PROC.RCD='';TERM.FLG=0 ELSE TERM.FLG=1 * CMND.LIN='' *** *** UNIVERSE CODE TO GET THE COMMAND LINE CMND.LIN=@SENTENCE *** *-> D3-MODS - D3 CODE TO GET THE COMMAND LINE *-> TCLREAD CMND.LIN *** *-> MAVERICK CODE TO GET THE COMMAND LINE *-> CMND.LIN = SENTENCE() *** CALL QCMDLINE (FILE.NAM,DICT.FLG,OPTN.RUN,CMND.LIN) IF FILE.NAM#'' THEN FILE.FLG=1 ELSE FILE.FLG=0 * IF NOT(FILE.FLG) THEN IF (TERM.FLG) THEN PRINT 'Enter the DICT,file to search: ': INPUT FILE.NAM CALL QEXIT (FILE.NAM,EXIT.FLG) IF (EXIT.FLG) THEN STOP FILE.NAM=TRIM(OCONV(FILE.NAM,'MCU')) END IF FILE.NAM='' THEN STOP * OPEN.ERR=0 DISP.NAM=FILE.NAM IF (DICT.FLG) THEN DISP.NAM=DICT.LT5:DISP.NAM END BEGIN CASE CASE (FILE.FLG) & (DICT.FLG) OPEN 'DICT',FILE.NAM TO SFIL ELSE OPEN.ERR=1 CASE (FILE.FLG) OPEN '',FILE.NAM TO SFIL ELSE OPEN.ERR=1 CASE FILE.NAM[1,5]=DICT.LT5 FILE.NAM=FILE.NAM[6,LEN(FILE.NAM)] OPEN 'DICT',FILE.NAM TO SFIL ELSE OPEN.ERR=1 CASE 1 OPEN '',FILE.NAM TO SFIL ELSE OPEN.ERR=1 END CASE IF (OPEN.ERR) THEN PRINT \Can't open \:DISP.NAM;STOP END * SRCH.IDX=0 SRCH.IDS='' LOOP IF (TERM.FLG) THEN PRINT 'Enter a search string: ': INPUT SRCH.ITM UNTIL SRCH.ITM='' DO SRCH.IDX=SRCH.IDX+1 SRCH.IDS=SRCH.ITM REPEAT IF NOT(SRCH.IDX) THEN STOP * FILE.CTR=0 ITEM.END=0 SELECT SFIL LOOP READNEXT ITEM.KEY ELSE ITEM.END=1 UNTIL ITEM.END DO FILE.CTR=FILE.CTR+1 READ ITEM.REC FROM SFIL,ITEM.KEY THEN DISP.PRT=0 FOR LOOP.IDX=1 TO SRCH.IDX ITEM.AMC=1 ITEM.BGN=1 SCAN.LEN=LEN(SRCH.IDS) ITEM.LEN=LEN(ITEM.REC) LOOP ITEM.COL=INDEX(ITEM.REC[ITEM.BGN,ITEM.LEN],SRCH.IDS,1) WHILE (ITEM.COL) DO IF NOT(DISP.PRT) THEN HEADING DISP.NAM:' QSEARCH' PRINT PRINT ITEM.KEY DISP.PRT=1 END CHNG.AMC=COUNT(ITEM.REC[ITEM.BGN,ITEM.COL],AM) IF CHNG.AMC OR ITEM.BGN=1 THEN ITEM.AMC=ITEM.AMC+CHNG.AMC PRINT ITEM.AMC:' ':ITEM.REC END ITEM.BGN=ITEM.BGN+ITEM.COL+SCAN.LEN-1 ITEM.LEN=ITEM.LEN-ITEM.COL-SCAN.LEN+1 REPEAT NEXT LOOP.IDX END REPEAT * PRINT PRINT 'Search words were: ':SRCH.IDS<1> FOR LOOP.IDX=2 TO SRCH.IDX PRINT SPACE(19):SRCH.IDS NEXT LOOP.IDX STOP * END