[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]

    {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.

[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]