home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* DOALL.PAS *)
- (* Befehl auf bestimmte oder alle Dateien in einem *)
- (* Verzeichnis ausführen. *)
- (* (c) 1991, 1992 Olaf Heß & DMV-Verlag *)
- (* ------------------------------------------------- *)
- 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-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 *)
-