home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / toolbox / doall.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-01-21  |  5.8 KB  |  190 lines

  1. (* ------------------------------------------------- *)
  2. (*                 DOALL.PAS                         *)
  3. (* Befehl auf bestimmte oder alle Dateien in einem   *)
  4. (* Verzeichnis ausführen.                            *)
  5. (*         (c) 1991, 1992 Olaf Heß & DMV-Verlag      *)
  6. (* ------------------------------------------------- *)
  7. PROGRAM DoAll;
  8.  
  9. {$M 10000, 0, 0}
  10.  
  11. USES Crt, Dos;
  12.  
  13. TYPE
  14.   string12 = STRING [12];
  15.  
  16. CONST
  17.   punkt               = '.';
  18.   space               = ' ';
  19.   datei_name : STRING = '';
  20.   prog_str_1 : STRING = '';
  21.   prog_str_2 : STRING = '';
  22.   count      : BYTE   = 1;
  23.  
  24. VAR
  25.   i                : BYTE;
  26.   datei_rec        : SearchRec;
  27.   pfad             : PathStr;
  28.   name             : NameStr;
  29.   erweiterung      : ExtStr;
  30.   programm_name,
  31.   eingabe_zeile    : STRING;
  32.   ohne_erweiterung : BOOLEAN;
  33.   erste_datei      : string12;
  34.   taste            : CHAR;
  35.  
  36.  
  37.   PROCEDURE Exec_Prog(parameter : STRING);
  38.   BEGIN
  39.     WriteLn(#13#10'Bearbeite Datei ', datei_rec.name,
  40.                   '  ==>  ', parameter, #13#10);
  41.     SwapVectors;
  42.     Exec(GetEnv('COMSPEC'), ' /C' + parameter);
  43.     SwapVectors;
  44.     IF DosError <> 0 THEN BEGIN
  45.       Write(^G, 'Fehler bei Exec-Prozedur: ');
  46.       CASE DosError OF
  47.          2 : WriteLn('File not found');
  48.          3 : WriteLn('Path not found');
  49.          5 : WriteLn('Access denied');
  50.          6 : WriteLn('Invalid handle');
  51.          8 : WriteLn('Not enough memory');
  52.         10 : WriteLn('Invalid environment');
  53.         11 : WriteLn('Invalid format');
  54.         18 : WriteLn('No more files');
  55.       END;
  56.     END;
  57.     IF DosExitCode <> 0 THEN BEGIN
  58.       Write(^G, 'Unnormales Programmende: ');
  59.       CASE DosExitCode OF
  60.          0 : ; { fehlerfreie Ausführung }
  61.          1 : WriteLn('Abbruch mit Ctrl-Break');
  62.          2 : WriteLn('Abbruch durch Gerätefehler');
  63.          3 : WriteLn('Ende über die Prozedur KEEP');
  64.       END;
  65.       WriteLn;
  66.       WriteLn('Soll DOALL abgebrochen werden? (j/n)');
  67.       REPEAT
  68.         taste := ReadKey;
  69.       UNTIL UpCase (taste) IN ['J', 'N'];
  70.       IF UpCase(taste) = 'J' THEN BEGIN
  71.         WriteLn; WriteLn('Programmabbruch!');
  72.         WriteLn;
  73.         WriteLn('DOALL hat ', count,
  74.                 ' Dateien bearbeitet.');
  75.         Halt(255);
  76.       END;
  77.     END;
  78.   END;
  79.  
  80.   PROCEDURE Loesche_Erweitung(VAR datei : string12);
  81.   VAR
  82.     punkt : BYTE;
  83.   BEGIN
  84.     punkt := Pos('.', datei);
  85.     IF punkt <> 0 THEN
  86.       Delete(datei, punkt, Length(datei) + 1);
  87.   END;
  88.  
  89. BEGIN
  90.   IF ParamStr (1) = '' THEN  BEGIN
  91.     WriteLn('DOALL: Einen Befehl auf alle oder ',
  92.             'bestimmte Dateien ausführen.');
  93.     WriteLn;
  94.     WriteLn('Beispiel: Alle Dateien mit der Endung ',
  95.             'PAS kompilieren:');
  96.     WriteLn('DOALL TPC *.PAS');
  97.     WriteLn;
  98.    WriteLn('Wird DOALL in der Form DOALL /E [Befehle]',
  99.            'aufgerufen, so wird [Befehle] auf');
  100.     WriteLn('Dateien ausgeführt, ohne daß dabei die ',
  101.             'Erweiterung der Dateien angegeben wird.');
  102.     Halt(1);
  103.   END ELSE BEGIN
  104.     programm_name := ParamStr(1);
  105.     IF UpCase(programm_name[2]) <> 'E' THEN BEGIN
  106.       ohne_erweiterung := FALSE;
  107.       FOR i := 2 TO ParamCount DO
  108.         IF (Pos(punkt, ParamStr(i)) <> 0) AND
  109.            (datei_name = '') THEN
  110.           datei_name := ParamStr(i)
  111.         ELSE BEGIN
  112.           IF datei_name = '' THEN
  113.             prog_str_1 := prog_str_1 + space +
  114.                           ParamStr(i)
  115.           ELSE
  116.             prog_str_2 := prog_str_2 + space +
  117.                           ParamStr(i);
  118.         END;
  119.     END ELSE BEGIN
  120.       ohne_erweiterung := TRUE;
  121.       programm_name := ParamStr(2);
  122.       FOR i := 3 TO ParamCount DO
  123.         IF (Pos(punkt, ParamStr(i)) <> 0) AND
  124.            (datei_name = '') THEN
  125.           datei_name := ParamStr(i)
  126.         ELSE BEGIN
  127.           IF datei_name = '' THEN
  128.             prog_str_1 := prog_str_1 + space +
  129.                           ParamStr(i)
  130.           ELSE
  131.             prog_str_2 := prog_str_2 + space +
  132.                           ParamStr(i);
  133.         END;
  134.       END;
  135.     END;
  136.     FSplit(datei_name, pfad, name, erweiterung);
  137.     FindFirst(datei_name, anyfile, datei_rec);
  138.     erste_datei := datei_rec.name;
  139.     IF ohne_erweiterung THEN
  140.       Loesche_Erweitung(datei_rec.name);
  141.     eingabe_zeile := programm_name + space +
  142.                      prog_str_1 +
  143.                      space + pfad + datei_rec.name +
  144.                      space + prog_str_2;
  145.  
  146.     IF DosError = 0 THEN
  147.       Exec_Prog(eingabe_zeile)
  148.     ELSE BEGIN
  149.       WriteLn('Keine Datei gefunden ' +
  150.               ' => Programmabbruch!');
  151.       Halt(1);
  152.     END;
  153.  
  154.     WHILE DosError = 0 DO BEGIN
  155.       FindNext(datei_rec);
  156.       IF erste_datei = datei_rec.name THEN BEGIN
  157.         WriteLn(^G,#13#10'DOALL versucht, die Datei »',
  158.                 erste_datei, +
  159.                 '« zum zweiten Mal zu bearbeiten!');
  160.        WriteLn('Soll DOALL abgebrochen werden? (j/n)');
  161.         REPEAT
  162.           taste := ReadKey;
  163.         UNTIL UpCase(taste) IN ['J', 'N'];
  164.         IF UpCase(taste) = 'J' THEN BEGIN
  165.           WriteLn; WriteLn('Programmabbruch!');
  166.           WriteLn;
  167.           WriteLn('DOALL hat ', count,
  168.                   ' Dateien bearbeitet.');
  169.           Halt(255);
  170.         END;
  171.       END;
  172.  
  173.       IF ohne_erweiterung THEN
  174.         Loesche_Erweitung(datei_rec.name);
  175.       eingabe_zeile := programm_name + space +
  176.                        prog_str_1 +
  177.                        space + pfad + datei_rec.name +
  178.                        space + prog_str_2;
  179.  
  180.       IF DosError = 0 THEN BEGIN
  181.         Exec_Prog(eingabe_zeile);
  182.         Inc(count);
  183.       END ELSE
  184.         WriteLn(#13#10'DOALL hat ', count,
  185.                 ' Dateien bearbeitet.');
  186.     END;
  187. END.
  188. (* ------------------------------------------------- *)
  189. (*               Ende von DOALL.PAS                  *)
  190.