home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1988
/
02
/
texe.pas
< prev
Wrap
Pascal/Delphi Source File
|
1987-11-22
|
4KB
|
89 lines
(* ----------------------------------------------------- *)
(* TEXE.PAS *)
(* Das Programm ruft ein weiteres Turbo Pascal-Programm *)
(* auf, welches auch mit der Chain-Option kompiliert *)
(* worden sein kann. Durch diese Compiler-Option wer- *)
(* den die Programmdateien wesentlich kuerzer, da das *)
(* Laufzeitsystem nur einmal im Programm TEXE.COM vor- *)
(* handen ist. Das auszufuehrende Programm kann beim *)
(* Aufruf von TEXE in der Kommandozeile angegeben wer- *)
(* den (Bsp.: TEXE turboprog). Ebenso koennen dem auszu- *)
(* fuehrenden Programm Kommandozeilen-Parameter ueber- *)
(* geben werden (Bsp.: TEXE turboprog parameter). *)
(* Achtung: *)
(* Beim compilieren dieses Programms ist darauf zu *)
(* achten, dass die Groesse des Code- und Datensegments *)
(* auf den maximalen Wert gesetzt wird. Fuer beide *)
(* Betriebssystem wurde Turbo Pascal 3.0 verwendet. *)
PROGRAM TurboExe;
(*$I ENVIRON.INC *) (* faellt bei CP/M weg !!!! *)
TYPE strng = STRING[255];
VAR ProgName,
Param,
Path,
SearchPath: strng;
ProgFile : FILE;
i : INTEGER;
ComLine : STRING[128] ABSOLUTE cseg:$80;
(* fuer CP/M-80: dies da ^^^^^ entfernen !! *)
(* entfernt fuehrende Leerzeichen aus Zeichenkette: *)
FUNCTION LTrimStr (s: strng): strng;
BEGIN
WHILE (Length(s) > 0) AND (s[1] = ' ') DO
s := Copy(s,2,Length(s));
LTrimStr := s;
END;
BEGIN
WriteLn; WriteLn;
WriteLn('TurboEXE',
' (C)1987 B.Born, M.Ceol & PASCAL INT.');
WriteLn; ProgName := ''; Param := ''; Path := '';
IF ParamCount = 0 THEN BEGIN (* nichts in Kommandoz. ! *)
WriteLn('Programm-Name [Parameter]: ');
Write('>'); ReadLn(Param);
END
ELSE (* aus Kommandozeile uebernehmen *)
FOR i := 1 TO ParamCount DO
Param := Param + ' ' + ParamStr(i);
Param := LTrimStr(Param);
(* Name des auszufuehrenden Turbo-Programms von *)
(* den diesem zu uebergebenden Parametern trennen: *)
ProgName := Copy(Param,1,Pred(Pos(' ',Param)));
(* keine Parameter zu uebergeben, also nur Prog.-Name: *)
IF ProgName = '' THEN ProgName := Param;
(* akt. Parameter wieder in Kommandozeile ablegen: *)
comline := Copy(Param,Length(ProgName)+2,Length(Param));
i := Pred(Pos('.',ProgName)); (* Extension abspalten *)
IF i < 0 THEN i := Length(ProgName);
ProgName := Copy(ProgName,1,i);
Path := EnvironStr('PATH'); (* faellt bei CP/M weg !!! *)
SearchPath := ProgName;
REPEAT (* zuerst wird versucht, ein *)
(*$I-*) (* CHAIN-File zu starten: *)
Assign(ProgFile,SearchPath+'.CHN');
Chain(ProgFile);
(* ging nicht, versuchen wir es mit einem COM-File: *)
IF IOResult <> 0 THEN BEGIN
Assign(ProgFile,SearchPath+'.COM');
Execute(ProgFile);
END; (* konnte im aktuellen Verzeichnis nicht ge- *)
(* funden werden, also Suchpfade durchklappern: *)
IF IOResult <> 0 THEN BEGIN
(* naechsten Pfad aus Suchpfade abspalten: *)
i := Pred(Pos(';',Path));
IF i < 0 THEN i := Length(Path); (* der letzte ! *)
SearchPath := Copy(Path,1,i);
Delete(Path,1,Succ(i));
IF Length(SearchPath) > 0 THEN BEGIN
IF SearchPath[Length(SearchPath)] <> '\' THEN
SearchPath := SearchPath + '\';
SearchPath := SearchPath + ProgName;
END;
END;
UNTIL SearchPath = ''; (* alle Pfade durchsucht, also: *)
WriteLn('*** Fehler: "',ProgName,
'" konnte nicht gestartet werden !');
END.