home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* 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.
-