BBS: Inland Empire Archive Date: 01-09-93 (11:30) Number: 265 From: JOHN GALLAS Refer#: NONE To: ALL Recvd: NO Subj: FAST DIRECTORY CHANGE 2/2 Conf: (2) Quik_Bas
>>> Continued from previous message Reg.ax = &H19 * 256 INTERRUPTX &H21, Reg, Reg CurrentDrive = Reg.ax MOD 256 'Get current directory Reg.ax = &H47 * 256 Reg.dx = CurrentDrive + 1 'Note adding one to drive for this, or 'could use 0 for default drive Reg.ds = VARSEG(CurrentDir) Reg.si = VARPTR(CurrentDir) INTERRUPTX &H21, Reg, Reg x = INSTR(CurrentDir, CHR$(0)) IF x = 1 THEN CurDir$ = "\" ELSE CurDir$ = LEFT$(CurrentDir, x - 1) END FUNCTION ' This function was origionally written by Dave Cleary. I made a few 'modifications to it so that it would only find directories. I put a '* next to the lines that I changed. FUNCTION DIR$ (FileSpec$) STATIC DIM DTA AS STRING * 44, Regs AS RegTypeX Null$ = CHR$(0) ReTry: '* '----- Set up our own DTA so we don't destroy COMMAND$ Regs.ax = SetDTA 'Set DTA function Regs.dx = VARPTR(DTA) 'DS:DX points to our DTA Regs.ds = -1 'Use current value for DS INTERRUPTX DOS, Regs, Regs 'Do the interrupt '----- Check to see if this is First or Next IF LEN(FileSpec$) THEN 'FileSpec$ isn't null, so 'FindFirst FileSpecZ$ = FileSpec$ + Null$ 'Make FileSpec$ into an ASCIIZ 'string Regs.ax = FindFirst 'Perform a FindFirst Regs.cx = 16 '* I changed this to look for dirs Regs.dx = SADD(FileSpecZ$) 'DS:DX points to ASCIIZ file Regs.ds = -1 'Use current DS ELSE 'We have a null FileSpec$, Regs.ax = FindNext 'so FindNext END IF INTERRUPTX DOS, Regs, Regs 'Do the interrupt '----- Return file name or null IF Regs.flags AND 1 THEN 'No files found DIR$ = "" 'Return null string EXIT FUNCTION ELSE '* check if its . or .., if so, can't accept it. IF ASC(MID$(DTA, 22, 1)) <> 16 THEN 'its not a subdirectory, so skip it GOTO ReTry END IF IF MID$(DTA, 31, 1) = "." THEN '*If its . or .. FileSpec$ = "" GOTO ReTry END IF END IF Null = INSTR(31, DTA, Null$) 'Get the filename found DIR$ = MID$(DTA, 31, Null - 30) 'It's an ASCIIZ string starting 'at offset 30 of the DTA END FUNCTION SUB ScanDrive PRINT "Scanning Directories..." Path$ = "C:\*.*" DPath$ = "C:\" DirList$ = "C:\" + CHR$(0) 'Go through DirList$ and search each subdirectory in it. Place = 1 DO x = INSTR(Place, DirList$, CHR$(0)) IF x THEN 'theres yet another subdirectory in the list 'find out what it is DPath$ = MID$(DirList$, Place, x - Place) Place = x + 1 LOCATE , 1: PRINT DPath$; " "; AddDirs DPath$, DirList$ ELSE EXIT DO END IF LOOP OPEN "\JD.IDX" FOR BINARY AS #1 PUT #1, , DirList$ CLOSE #1 PRINT PRINT "Done." END END SUB '-----------------------Truncate Here------------------------- * 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)
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