' It doesn't account for variables that are arrays or those that are found in the LINE() command.
' >No solution so far.
' It cannot yet differentiate the following: 4! * abc... only picks up 4! as a variable.
' Finally, there was a request for a comma separation output. This would not be difficult. Just adjust the way the data is added to the file.
' PRINT #F1, A$,
' The variables and strings can be printed in all caps with the ucase$(A$) or A$ = Ucase$(A$).
'============================================================================
'Pete's String and Variable finder.
'Finds marked %#!& and unmarked variables as well as strings in any program.
'Opens a table of the findings in Notepad.
'WARNING >>> This program makes a file called 'STRVAR.DAT' in the current
' directory. If, by coincidence, a file with this name already
' exits in the current directory, it will be overwritten. Take
' any necessary precautions to prevent this before running the
' program.
' A second file called 'TEMPDIR.TMP" is also created if a long-
' pathway name is input such as Program Files instead of progra~1.
' Remove one of the SHELL commands. One is for Win 95-98, the other 2000/NT/XP
' If both lines remain, the program will run. A 'bad command or file name'
' comment will be the only result.
' The program supports searching modules joined by a .MAK file. Input the .MAK
' file name at the input line and the program will automatically search each
' of the modules in the .MAK file.
'============================================================================
DECLARE SUB LONGPATH
(DRIVEX$
, PATHWAY$
, ORIGDIR$
)
ORIGDIR$ = DRIVEX$ + PATHWAY$
REDIM X$
(1000), Y$
(1000), Z$
(1000)
PRINT " ALERT >>> THIS DIRECTORY CONTAINS A FILE NAMED 'STRVAR.DAT' THIS FILE" PRINT " WILL BE OVERWRITTEN. DO NOT CONTINUE IF THIS IS NOT OK. - INPUT: EXIT" PRINT " THE 'STRVAR.DAT' FILE WILL BE CREATED IN THIS DIRECTORY: "; ORIGDIR$
PRINT " NO FILE CONFLICT WAS FOUND." ER1% = 0
PRINT " TYPE 'EXIT' TO QUIT AT ANY INPUT PROMPT" PRINT " INPUT THE DRIVE THE FILE IS IN [A:\, B:\, C:\]: ";: XX%
= CSRLIN: YY%
= POS(1)
PRINT " INPUT THE DIRECTORY THE FILE IS IN: ";: XX%
= CSRLIN: YY%
= POS(1)
REM CHECKS
FOR LONG
-PATHWAY NAMES
HOLDPATH$ = PATHWAY$: MODPATH$ = PATHWAY$ + "\": J% = 1
PATHWAY$
= MID$(MODPATH$
, J%
, INSTR(J%
, MODPATH$
, "\") - J%
) J%
= J%
+ LEN(PATHWAY$
) + 1 IF MSDOSPATH$
<> "" THEN MSDOSPATH$
= MSDOSPATH$
+ "\" + PATHWAY$
ELSE MSDOSPATH$
= PATHWAY$
PATHWAY$ = MSDOSPATH$
PRINT " INPUT THE .BAS FILE OR INPUT THE .MAK FILE: ";: XX%
= CSRLIN: YY%
= POS(1)
FILENAME$
= DRIVEX$
+ PATHWAY$
+ "\" + UCASE$(A1$
)
MAK% = 1
FILENAME$
= DRIVEX$
+ PATHWAY$
+ "\" + UCASE$(FILENAME$
)
PRINT " SEARCHING FILE: "; FILENAME$
REM - REMOVE ALL QUOTED SEGMENTS
A$ = AX1$ + AX2$
IF MID$(A1$
, 1, 4) <> "MID$" AND MID$(A1$
, 1, 6) <> "LTRIM$" AND MID$(A1$
, 1, 6) <> "RTRIM$" AND MID$(A1$
, 1, 6) <> "RIGHT$" AND MID$(A1$
, 1, 5) <> "LEFT$" AND MID$(A1$
, 1, 6) <> "SPACE$" AND MID$(A1$
, 1, 7) <> "STRING$" THEN IF MID$(A1$
, 1, 6) <> "LCASE$" AND MID$(A1$
, 1, 6) <> "UCASE$" AND MID$(A1$
, 1, 5) <> "INSTR" AND MID$(A1$
, 1, 6) <> "INKEY$" AND MID$(A1$
, 1, 6) <> "IOCTL$" AND MID$(A1$
, 1, 5) <> "TIME$" AND MID$(A1$
, 1, 4) <> "CHR$" THEN IF MID$(A1$
, 1, 7) <> "VARPTR$" AND MID$(A1$
, 1, 4) <> "MKD$" AND MID$(A1$
, 1, 7) <> "MKDMBF$" AND MID$(A1$
, 1, 4) <> "MKI$" AND MID$(A1$
, 1, 4) <> "MKL$" AND MID$(A1$
, 1, 4) <> "MKS$" AND MID$(A1$
, 1, 4) <> "STR$" THEN IF MID$(A1$
, 1, 7) <> "MKSMBF$" AND MID$(A1$
, 1, 4) <> "OCT$" AND MID$(A1$
, 1, 4) <> "HEX$" AND MID$(A1$
, 1, 9) <> "'$DYNAMIC" AND MID$(A1$
, 1, 8) <> "'$STATIC" AND MID$(A1$
, 1, 9) <> "'$INCLUDE" AND MID$(A1$
, 1, 3) <> "LEN" THEN A3$ = A1$
I = 0
I = I + 1
A3$ = A1$
I = 0
I = I + 1
VAR1$ = "="
A3$ = OLDA3$
IF MID$(A3$
, 1, 4) <> "MID$" AND MID$(A3$
, 1, 6) <> "LTRIM$" AND MID$(A3$
, 1, 6) <> "RTRIM$" AND MID$(A3$
, 1, 6) <> "RIGHT$" AND MID$(A3$
, 1, 5) <> "LEFT$" AND MID$(A3$
, 1, 6) <> "SPACE$" AND MID$(A3$
, 1, 7) <> "STRING$" THEN IF MID$(A3$
, 1, 6) <> "LCASE$" AND MID$(A3$
, 1, 6) <> "UCASE$" AND MID$(A3$
, 1, 5) <> "INSTR" AND MID$(A3$
, 1, 6) <> "INKEY$" AND MID$(A3$
, 1, 6) <> "IOCTL$" AND MID$(A3$
, 1, 5) <> "TIME$" AND MID$(A3$
, 1, 4) <> "CHR$" THEN IF MID$(A3$
, 1, 7) <> "VARPTR$" AND MID$(A3$
, 1, 4) <> "MKD$" AND MID$(A3$
, 1, 7) <> "MKDMBF$" AND MID$(A3$
, 1, 4) <> "MKI$" AND MID$(A3$
, 1, 4) <> "MKL$" AND MID$(A3$
, 1, 4) <> "MKS$" AND MID$(A3$
, 1, 4) <> "STR$" THEN IF MID$(A3$
, 1, 7) <> "MKSMBF$" AND MID$(A3$
, 1, 4) <> "OCT$" AND MID$(A3$
, 1, 4) <> "HEX$" AND MID$(A3$
, 1, 9) <> "'$DYNAMIC" AND MID$(A3$
, 1, 8) <> "'$STATIC" AND MID$(A3$
, 1, 9) <> "'$INCLUDE" AND MID$(A3$
, 1, 3) <> "LEN" THEN
I = 0
I = I + 1
OLDA3$ = A1$
A$ = "TABLE OF VARIABLES AND STRINGS FOR: " + ORIGFILENAME$
I = 0
I = I + 1
CASE 1: NUM$
= "00" + NUM$
CASE 2: NUM$
= "0" + NUM$
PRINT #F1
, "STRING NAME " + NUM$
+ " = "; X$
(I
)
I = 0
I = I + 1
CASE 1: NUM2$
= "00" + NUM2$
CASE 2: NUM2$
= "0" + NUM2$
PRINT #F1
, "VARIABLES MARKED " + NUM2$
+ " = "; Y$
(I
)
I = 0
I = I + 1
CASE 1: NUM3$
= "00" + NUM3$
CASE 2: NUM3$
= "0" + NUM3$
PRINT #F1
, "VARIABLES UNMARKED " + NUM3$
+ " = "; Z$
(I
)
REM SHELL "COMMAND /C START NOTEPAD " + ORIGDIR$
+ "\STRVAR.DAT"
SHELL "CMD /C START NOTEPAD " + ORIGDIR$
+ "\STRVAR.DAT"
READSCREEN:
A1$ = ""
CKPATH:
IF LEN(PATHWAY$
) > 12 THEN CALL LONGPATH
(DRIVEX$
, PATHWAY$
, ORIGDIR$
) CALL LONGPATH
(DRIVEX$
, PATHWAY$
, ORIGDIR$
)
RESNXT:
ERH:
CHECKFILE:
ER1:
RUNPRO:
VARIABLES:
SUB LONGPATH
(DRIVEX$
, PATHWAY$
, ORIGDIR$
)
DIRSEARCH:
SHELL "DIR /A:D /O:N > " + ORIGDIR$
+ "\TEMPDIR.TMP"
REM - CONVERTS LONG
-FILE WINDOWS PATHWAY
NAME TO MS
-DOS
8.3 FORMAT.
IF A2$
<> "" THEN PATHWAY$
= A2$
FXN1:
KILL ORIGDIR$
+ "\TEMPDIR.TMP"
ENDSRCHDIRPF: