home *** CD-ROM | disk | FTP | other *** search
- {$I DOS.INC}
- {$I ENVIRONM.INC}
-
- TYPE
- FNameType = STRING[12];
- PathPtr = ^PathRec;
- PathRec = RECORD
- PName : BigString;
- Next : PathPtr;
- END;
-
- VAR
- StartPR,
- ThisPR,
- NextPR : PathPtr;
-
- PROCEDURE MakePath(ThePath : BigString);
- {BigString is declared in EVNIRONM.INC.}
-
- PROCEDURE ParsePath(PathStr : BigString);
-
- VAR
- PosSemi,
- PosSlash,
- PosColon,
- NextSlash,
- LPS : Byte;
- Done : Boolean;
-
- PROCEDURE IncSlash;
- BEGIN
- NextSlash := Pos('\', Copy(PathStr, PosSlash+1, LPS-PosSlash));
- IF NextSlash = 0 THEN Done := True;
- PosSlash := PosSlash+NextSlash;
- END; {IncSlash}
-
-
- BEGIN {ParsePath}
- Done := False;
- LPS := Length(PathStr);
- IF PathStr[LPS] <> ';' THEN BEGIN
- PathStr := PathStr+';';
- LPS := LPS+1;
- END; {if PathStr[LPS]<>';'}
- IF PathStr[LPS-1] <> '\' THEN BEGIN
- Insert('\', PathStr, LPS);
- LPS := LPS+1;
- END; {if PathStr[LPS - 1]<>'\'}
- PosSemi := Pos(';', PathStr);
- IF PosSemi <> LPS THEN BEGIN
- ParsePath(Copy(PathStr, 1, PosSemi));
- ParsePath(Copy(PathStr, PosSemi+1, LPS-PosSemi));
- END {if PosSemi<>LPS}
- ELSE BEGIN {PosSemi = LPS}
- PosColon := Pos(':', PathStr);
- PosSlash := Pos('\', PathStr);
- IF PosColon IN [0, 2] THEN BEGIN
- IF (PosColon = 2) AND (PosSlash = 3) THEN BEGIN
- IncSlash;
- Done := False;
- END; {if (PosColon = 2) and (PosSlash = 3)}
- REPEAT {until Done}
- ThisPR^.PName := Copy(PathStr, 1, PosSlash);
- New(ThisPR^.Next);
- ThisPR := ThisPR^.Next;
- ThisPR^.PName := '';
- ThisPR^.Next := NIL;
- IncSlash;
- UNTIL Done;
- END; {if PosColon in [0, 2]}
- END; {else PosSemi = LPS}
- END; {ParsePath}
-
- BEGIN {MakePath}
- New(StartPR);
- StartPR^.PName := '';
- StartPR^.Next := NIL;
- ThisPR := StartPR;
- ParsePath(ThePath);
- END; {MakePath}
-
- VAR
- FName : FNameType;
- AFile : FILE;
- WordOut,
- WordIn : BigString;
- Done : Boolean;
- Result : Integer;
-
- BEGIN {test ParsePath}
- FName := ParamStr(1);
- Done := False;
- IF FoundInEnv('PATH', WordOut) THEN MakePath(WordOut);
- ThisPR := StartPR;
- REPEAT {until Done}
- IF ThisPR^.PName = '' THEN Done := True;
- IF NOT Done THEN BEGIN
- Assign(AFile, ThisPR^.PName+FName);
- {$I-} Reset(AFile); {$I+}
- Result := IOResult;
- END; {if not Done}
- IF Result = 0 THEN WriteLn('Found ', FName, ' in ', ThisPR^.PName);
- IF NOT Done THEN ThisPR := ThisPR^.Next;
- UNTIL Done;
- ThisPR := StartPr;
- REPEAT {until NextPR = nil}
- NextPR := ThisPR^.Next;
- Dispose(ThisPR);
- ThisPR := NextPR;
- UNTIL NextPR = NIL;
- END.
-