[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]
Unit ExecPath;
Interface
PROCEDURE ExecInPath(line : STRING);
FUNCTION FindInPath(cmd : STRING): STRING;
FUNCTION Exist(fn : STRING): BOOLEAN;
Implementation
Uses
Dos;
FUNCTION Exist(fn : STRING): BOOLEAN;
VAR
f : FILE;
a : WORD;
BEGIN
Assign(f,fn);
GetFAttr(f,a);
Exist := DosError = 0;
END;
FUNCTION FindInPath(cmd : STRING): STRING;
VAR
path : STRING;
Dir : DirStr;
Name : NameStr;
Ext : ExtStr;
p : WORD;
BEGIN
FSplit(cmd,Dir,Name,Ext);
IF Dir <> '' THEN BEGIN
IF Ext <> '' THEN BEGIN
cmd := Dir + Name + Ext;
IF NOT Exist(cmd) THEN cmd := '';
END
ELSE BEGIN
cmd := Dir + Name + '.COM';
IF NOT Exist(cmd) THEN BEGIN
cmd := Dir + Name + '.EXE';
IF NOT Exist(cmd) THEN BEGIN
cmd := Dir + Name + '.BAT';
IF NOT Exist(cmd) THEN
cmd := '';
END;
END;
END;
FindInPath := cmd;
Exit;
END;
path := '.;'+GetEnv('PATH');
REPEAT
p := Pos(';',path);
IF p = 0 THEN p := Length(path)+1;
Dir := Copy(path,1,p-1);
Delete(path,1,p);
IF Dir[Length(Dir)] <> '\' THEN
Insert('\',Dir,Length(Dir)+1);
IF Ext <> '' THEN BEGIN
cmd := Dir + Name + Ext;
IF NOT Exist(cmd) THEN
cmd := '';
END
ELSE BEGIN
cmd := Dir + Name + '.COM';
IF NOT Exist(cmd) THEN BEGIN
cmd := Dir + Name + '.EXE';
IF NOT Exist(cmd) THEN BEGIN
cmd := Dir + Name + '.BAT';
IF NOT Exist(cmd) THEN
cmd := '';
END;
END;
END;
UNTIL (cmd <> '') OR (path = '');
FindInPath := cmd;
END;
PROCEDURE ExecInPath(line : STRING);
VAR
command : PathStr;
space : WORD;
BEGIN
WHILE (Length(line) > 0) AND (line[1] <= ' ') DO Delete(line,1,1);
IF Length(line) = 0 THEN Exit;
space := Pos(' ',line);
IF space = 0 THEN BEGIN
command := line;
line := '';
END
ELSE BEGIN
command := Copy(line,1,space-1);
Delete(line,1,space-1);
END;
command := FindInPath(command);
IF command = '' THEN
DosError := 123
ELSE IF Copy(command,Length(command)-3,4) = '.BAT' THEN BEGIN
SwapVectors;
Exec(GetEnv('COMSPEC'),'/C '+command+line);
SwapVectors;
END
ELSE BEGIN
SwapVectors;
Exec(command,line);
SwapVectors;
END;
END;
END.
[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]