Nájde umiestnenie súboru v systémovej premenej PATH

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategorija: Programy zos Pascalu

Program: Ff.pas
Subor exe: Ff.exe

Nájde umiestnenie súboru v systémovej premenej PATH. Súbor sa zadáva ako parameter programu. Výsledok uloží do súboru ff.dat.
{ FARBYDOS.PAS              Copyright (c) TrSek alias Zdeno Sekerak }
{ Najde umiestnenie suboru %1 podla PATH                            }
{ vysledok ulozi do suboru %2 (default ff.dat)                      }
{ ERRORLEVEL  1-malo pamete                                         }
{             2-neviem najst PATH v nastaveni systemu               }
{                                                                   }
{ Datum:23.01.1998                             http://www.trsek.com }
 
{$M 31192,0,65360}
program find_file;
 
uses crt,dos;
 
var f: text;            { citame, pisem do suborov }
    DirInfo: SearchRec; { Ci Existuje subor }
    m_file: string;     { meno suboru, ktory hladam }
    s_path: string;     { ulozeny path v ktorom hladam }
    pom: string;        { devka string }
    out_file: string;   { vysledom odlozeny do suboru }
    i: integer;         { devka }
    err: integer;       { ak vznikla chyba }
 
procedure help;
begin
 WriteLn('Find File - najde v ktorom z PATH adresarov sa nachadza subor.');
 WriteLn('--------------------------------------------------------------');
 WriteLn('%1 - aky subor hladam');
 WriteLn('%2 - do akeho suboru cestu ak nasiel');
 WriteLn('                                             Software by TRSEK');
end;
 
function prikaz(s:string):integer;
begin
  SwapVectors;
  Exec(GetEnv('COMSPEC'), '/C '+s);
  SwapVectors;
  if doserror<>0 then prikaz:=2
                 else prikaz:=0;
end;
 
BEGIN
 
 if (paramcount > 0) then begin
    m_file := paramstr(1);
    out_file := ParamStr(2);
    if( out_file='' ) then out_file:='ff.dat';
   end
  else begin
   help;
   halt(1);
  end;
 
 { ak existuje out subor tak ho zmazem }
 FindFirst( out_file, AnyFile, DirInfo );
 if ( DosError=0) then err := prikaz('del '+out_file );
 { Zistim aky je PATH }
 err := prikaz('set > $$$.$$');
 if( err<>0 ) then halt(1);
 
 { Tak co nam poskytol ??? }
 Assign(f,'$$$.$$');
 ReSet(f);
 repeat
  ReadLn( f, s_path );
 until( pos('PATH',s_path) > 0) or ( eof(f) );
 Close(f);
 { upraceme }
 err := prikaz('del $$$.$$');
 
 { Nenasiel som nic, tak aspon hlada v aktualnom adresari }
 if ( pos('PATH',s_path) = 0 ) then s_path:='';
 s_path := copy( s_path, pos('=',s_path)+1, length(s_path) );
 pom:=s_path;
 
 { Hladame v ktorej ceste je nas subor }
 repeat
  i:=pos( ';',pom );
  if ( i=0 ) then s_path:=pom
             else begin
              s_path:=copy(pom,1,i-1);
              pom:=copy(pom,i+1,length(pom));
             end;
 
  FindFirst( s_path+'\'+m_file, AnyFile, DirInfo );
 until (( i=0 ) or ( DosError=0 ));
 
 { Nenasiel ideme prec }
 if( s_path='' ) then exit;
 
 { Toto je vysledok }
 Assign( f, out_file );
 ReWrite(f);
 WriteLn( f, s_path );
 Close(f);
 
END.      { Dovidenia }