FAST DIRECTORY CHANGE 1/2

 BBS: Inland Empire Archive
Date: 01-09-93 (11:30)             Number: 264
From: JOHN GALLAS                  Refer#: NONE
  To: ALL                           Recvd: NO  
Subj: FAST DIRECTORY CHANGE 1/2      Conf: (2) Quik_Bas
This program is similar to the famous NCD.  Enter /SCAN on the command
line and it'll scan all the directories.  Anything else, and it searches
for the directory in its database.  I compared it speedwise to one of
the shareware fast directory changers, and it was faster in finding the
directory, but the scanning part is slower.  If you wanted to, you could
probably change this to a tree program..  Welp, here it is:


'-----------------------Decapitate Here-------------------------

' JD.BAS  -  Fast Directory Changer  -  By John Gallas  -  12/30/92

' Use it as you wish, just don't forget who really wrote it.

DEFINT A-Z

DECLARE SUB AddDirs (CurrentDir$, ListOfEm$)
DECLARE SUB ScanDrive ()

DECLARE FUNCTION CurDir$ ()
DECLARE FUNCTION DIR$ (FileSpec$)

' $INCLUDE: '\QB45\QB.BI'

CONST DOS = &H21
CONST SetDTA = &H1A00, FindFirst = &H4E00, FindNext = &H4F00

CONST True = -1, False = 0

IF COMMAND$ = "" THEN

    PRINT
    PRINT "JD 1.0  By John Gallas"
    PRINT
    PRINT "Usage: JD <full or partial directory name>"
    PRINT "   or: JD /SCAN to create a new directory database."
    END

END IF

IF INSTR(COMMAND$, "/SCAN") THEN  'they wanna scan the drive

    ScanDrive
    END

END IF


'open the file
OPEN "\JD.IDX" FOR BINARY AS #1
'create a string to hold its contents
DirList$ = STRING$(LOF(1), 0)
'read in the string
GET #1, , DirList$
'close the file
CLOSE #1

Search$ = RTRIM$(LTRIM$(COMMAND$))

'We have to start scanning the list of directories after the current
'directoriy's entry, incase theres another dir with the same pattern.
Temp$ = "C:\" + CurDir$

Check = INSTR(DirList$, Temp$ + CHR$(0))

Pointer = 1

IF Check THEN Pointer = Check + LEN(Temp$) + 5

IF INSTR(Temp$, Search$) = 0 THEN
   'the current directory is definatly not one of the possible choices, so
   'set the pointer back to 1.
   Pointer = 1
END IF

Times = 1
Success = False

DO

   Check = INSTR(Pointer, DirList$, Search$)

   IF Check = 0 THEN  'check if its in an earlier entry
      IF Times = 2 THEN Success = False: EXIT DO
      Pointer = 1: Times = 2
   ELSE
      Success = True
      EXIT DO
   END IF

LOOP

IF Success THEN

   'find the entry closest to Check
   FOR x = Check TO 1 STEP -1
     x$ = MID$(DirList$, x, 1)
     IF x$ = CHR$(0) THEN x = x + 1: EXIT FOR
     IF x = 1 THEN EXIT FOR
   NEXT x
   x2 = INSTR(x, DirList$, CHR$(0))
   ToGo$ = MID$(DirList$, x, x2 - x)
   CHDIR ToGo$

ELSE

   PRINT "Directory not found!"

END IF

END

SUB AddDirs (CurrentDir$, ListOfEm$)

Temp$ = CurrentDir$

'Do this for the 1 exception that we're scanning C:\, because we won't get
'any files when we ask for a list in C:\\*.*
IF RIGHT$(Temp$, 1) = "\" THEN Temp$ = LEFT$(Temp$, LEN(Temp$) - 1)

x$ = Temp$ + "\*.*"
d$ = Temp$ + "\"

File$ = DIR$(x$)

DO WHILE LEN(File$)
  ListOfEm$ = ListOfEm$ + d$ + File$
  File$ = DIR$("")
LOOP

END SUB

FUNCTION CurDir$

'reads the current directory

DIM Reg AS RegTypeX
DIM CurrentDrive AS INTEGER
DIM CurrentDir AS STRING * 64

     'Get current disk drive
>>> Continued to next message

 * OLX 2.1 TD * Iraqi Bingo: B-52...F-16...M-1...F-18...F-117...

--- TMail v1.30.4
 * Origin: TC-AMS MLTBBS 2.2 - Minnetonka, MN (612)-938-4799 (1:282/7)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET