Contributor: HAROLD MASSELINK {I have written a program that searches for a specific directory on the disk. The sourcecode is included. } program XD; uses Dos, Crt,strings; var fdir, Sdir: array[0..255] of Char; Scherm : Text ; vlag : byte; ch : char; i,l,x,y : integer; temp,found,dir : string; procedure CursorOff; assembler; asm mov ah,1 { turn off cursor } mov cx,2304h int 10h end; {CursorOff} procedure CursorOn; assembler; asm mov ah,1 { turn off cursor } mov cx,0304h int 10h end; {CursorOn} procedure Show( Direct : String ) ; var { Info must be a local parameter of Show. This way the information in the SearchRec is saved when a subdirectory is explored using recursion. } Info : SearchRec ; begin { We have to search the directory in Direct, build the search-path } if ( Direct[Length(Direct)] <> '\' ) THEN Direct := Direct + '\' ; ch := '1'; FindFirst( Direct+'*.*', AnyFile, Info ) ; { As long as we have 'things' in the Direct directory, look at them } while ( DosError = 0 ) do begin if ( (Info.Name <> '.') and (Info.Name <> '..') and ( (Info.Attr and Directory) = Directory) ) then begin gotoxy(x,y); clreol; Write(Direct+Info.Name) ; for i:= 0 to l-1 do fdir[i] := info.name[i+1]; i:= StrComp(fdir, sDir); if keypressed then ch := readkey; IF ch=#27 THEN BEGIN writeln; writeln; Writeln(' ...User Break...'); writeln; cursoron; HALT(1); END; if i=0 then begin found := direct+info.name; writeln; vlag := 1; break; end; { We will now search that directory } Show(Direct+Info.Name ) ; end ; { Are there any more things out there ? If so, look at them } if vlag = 1 then break; FindNext( Info ) ; end ; end ; procedure help; begin writeln; writeln('Syntax : XD.EXE [dir]'); writeln; cursoron; halt(1); end; begin cursoroff; vlag := 0; found := ' '; dir := paramstr(1); l := length(paramstr(1)); Writeln; WRITELN (' X',chr(68),' v1.3 By ',chr(72),'arol',chr(100),'M',chr(97),'ss',chr(101),'link '); if paramcount<1 then help; for i := 0 to l do begin dir[i+1] := UpCase(dir[i+1]); sdir[i] := dir[i+1]; end; Writeln; writeln (' Searching for : [',DIR,'*]');; Write (' Current : '); x := wherex; y := wherey; GetDir(0,temp); show(temp); gotoxy(1,y-1); if vlag=1 then chdir(found) else begin chdir(temp); writeln; clreol; Writeln(' Could not find : [',Dir,'*]'); end; writeln; cursoron; end.