home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1991
/
04
/
tricks
/
doall.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-01-08
|
6KB
|
183 lines
(* ------------------------------------------------------ *)
(* DOALL.PAS *)
(* Befehl auf bestimmte oder alle Dateien in einem Ver- *)
(* zeichnis ausführen. *)
(* (c) 1991 Olaf Heß & TOOLBOX *)
(* ------------------------------------------------------ *)
PROGRAM DoAll;
{$M 10000, 0, 0}
USES Crt, Dos;
TYPE
string12 = STRING [12];
CONST
punkt = '.';
space = ' ';
datei_name : STRING = '';
prog_str_1 : STRING = '';
prog_str_2 : STRING = '';
count : BYTE = 1;
VAR
i : BYTE;
datei_rec : SearchRec;
pfad : PathStr;
name : NameStr;
erweiterung : ExtStr;
programm_name,
eingabe_zeile : STRING;
ohne_erweiterung : BOOLEAN;
erste_datei : string12;
taste : CHAR;
PROCEDURE Exec_Prog(parameter : STRING);
BEGIN
WriteLn(#13#10'Bearbeite Datei ', datei_rec.name,
' ==> ', parameter, #13#10);
SwapVectors;
Exec(GetEnv('COMSPEC'), ' /C' + parameter);
SwapVectors;
IF DosError <> 0 THEN BEGIN
Write(^G, 'Fehler bei Exec-Prozedur: ');
CASE DosError OF
2 : WriteLn('File not found');
3 : WriteLn('Path not found');
5 : WriteLn('Access denied');
6 : WriteLn('Invalid handle');
8 : WriteLn('Not enough memory');
10 : WriteLn('Invalid environment');
11 : WriteLn('Invalid format');
18 : WriteLn('No more files');
END;
END;
IF DosExitCode <> 0 THEN BEGIN
Write(^G, 'Unnormales Programmende: ');
CASE DosExitCode OF
0 : ; { fehlerfreie Ausführung }
1 : WriteLn('Abbruch mit Ctrl-C bzw. Ctrl-Break');
2 : WriteLn('Abbruch durch Gerätefehler');
3 : WriteLn('Ende über die Prozedur KEEP');
END;
WriteLn;
WriteLn('Soll DOALL abgebrochen werden? (j/n)');
REPEAT
taste := ReadKey;
UNTIL UpCase (taste) IN ['J', 'N'];
IF UpCase(taste) = 'J' THEN BEGIN
WriteLn; WriteLn('Programmabbruch!');
WriteLn;
WriteLn('DOALL hat ', count, ' Dateien bearbeitet.');
Halt(255);
END;
END;
END;
PROCEDURE Loesche_Erweitung(VAR datei : string12);
VAR
punkt : BYTE;
BEGIN
punkt := Pos('.', datei);
IF punkt <> 0 THEN
Delete(datei, punkt, Length(datei) + 1);
END;
BEGIN
IF ParamStr (1) = '' THEN BEGIN
WriteLn('DOALL: Einen Befehl auf alle oder ',
'bestimmte Dateien ausführen.');
WriteLn;
WriteLn('Beispiel: Alle Dateien mit der Endung ',
'PAS kompilieren:');
WriteLn('DOALL TPC *.PAS');
WriteLn;
WriteLn('Wird DOALL in der Form DOALL /E [Befehle] ',
'aufgerufen, so wird [Befehle] auf');
WriteLn('Dateien ausgeführt, ohne daß dabei die ',
'Erweiterung der Dateien angegeben wird.');
Halt(1);
END ELSE BEGIN
programm_name := ParamStr(1);
IF UpCase(programm_name[2]) <> 'E' THEN BEGIN
ohne_erweiterung := FALSE;
FOR i := 2 TO ParamCount DO
IF (Pos(punkt, ParamStr(i)) <> 0) AND
(datei_name = '') THEN
datei_name := ParamStr(i)
ELSE BEGIN
IF datei_name = '' THEN
prog_str_1 := prog_str_1 + space + ParamStr(i)
ELSE
prog_str_2 := prog_str_2 + space + ParamStr(i);
END;
END ELSE BEGIN
ohne_erweiterung := TRUE;
programm_name := ParamStr(2);
FOR i := 3 TO ParamCount DO
IF (Pos(punkt, ParamStr(i)) <> 0) AND
(datei_name = '') THEN
datei_name := ParamStr(i)
ELSE BEGIN
IF datei_name = '' THEN
prog_str_1 := prog_str_1 + space + ParamStr(i)
ELSE
prog_str_2 := prog_str_2 + space + ParamStr(i);
END;
END;
END;
FSplit(datei_name, pfad, name, erweiterung);
FindFirst(datei_name, anyfile, datei_rec);
erste_datei := datei_rec.name;
IF ohne_erweiterung THEN
Loesche_Erweitung(datei_rec.name);
eingabe_zeile := programm_name + space + prog_str_1 +
space + pfad + datei_rec.name +
space + prog_str_2;
IF DosError = 0 THEN
Exec_Prog(eingabe_zeile)
ELSE BEGIN
WriteLn('Keine Datei gefunden => Programmabbruch!');
Halt(1);
END;
WHILE DosError = 0 DO BEGIN
FindNext(datei_rec);
IF erste_datei = datei_rec.name THEN BEGIN
WriteLn(^G, #13#10'DOALL versucht, die Datei »',
erste_datei, +
'« zum zweiten Mal zu bearbeiten!');
WriteLn('Soll DOALL abgebrochen werden? (j/n)');
REPEAT
taste := ReadKey;
UNTIL UpCase(taste) IN ['J', 'N'];
IF UpCase(taste) = 'J' THEN BEGIN
WriteLn; WriteLn('Programmabbruch!');
WriteLn;
WriteLn('DOALL hat ', count,
' Dateien bearbeitet.');
Halt(255);
END;
END;
IF ohne_erweiterung THEN
Loesche_Erweitung(datei_rec.name);
eingabe_zeile := programm_name + space + prog_str_1 +
space + pfad + datei_rec.name +
space + prog_str_2;
IF DosError = 0 THEN BEGIN
Exec_Prog(eingabe_zeile);
Inc(count);
END ELSE
WriteLn(#13#10'DOALL hat ', count,
' Dateien bearbeitet.');
END;
END.
(* ------------------------------------------------------ *)
(* Ende von DOALL.PAS *)