home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 04 / tricks / doall.pas < prev    next >
Pascal/Delphi Source File  |  1991-01-08  |  6KB  |  183 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      DOALL.PAS                         *)
  3. (* Befehl auf bestimmte oder alle Dateien in einem Ver-   *)
  4. (* zeichnis ausführen.                                    *)
  5. (*            (c) 1991 Olaf Heß & TOOLBOX                 *)
  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-C bzw. 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, ' Dateien bearbeitet.');
  74.         Halt(255);
  75.       END;
  76.     END;
  77.   END;
  78.  
  79.   PROCEDURE Loesche_Erweitung(VAR datei : string12);
  80.   VAR
  81.     punkt : BYTE;
  82.   BEGIN
  83.     punkt := Pos('.', datei);
  84.     IF punkt <> 0 THEN
  85.       Delete(datei, punkt, Length(datei) + 1);
  86.   END;
  87.  
  88. BEGIN
  89.   IF ParamStr (1) = '' THEN  BEGIN
  90.     WriteLn('DOALL: Einen Befehl auf alle oder ',
  91.             'bestimmte Dateien ausführen.');
  92.     WriteLn;
  93.     WriteLn('Beispiel: Alle Dateien mit der Endung ',
  94.             'PAS kompilieren:');
  95.     WriteLn('DOALL TPC *.PAS');
  96.     WriteLn;
  97.     WriteLn('Wird DOALL in der Form DOALL /E [Befehle] ',
  98.             'aufgerufen, so wird [Befehle] auf');
  99.     WriteLn('Dateien ausgeführt, ohne daß dabei die ',
  100.             'Erweiterung der Dateien angegeben wird.');
  101.     Halt(1);
  102.   END ELSE BEGIN
  103.     programm_name := ParamStr(1);
  104.     IF UpCase(programm_name[2]) <> 'E' THEN BEGIN
  105.       ohne_erweiterung := FALSE;
  106.       FOR i := 2 TO ParamCount DO
  107.         IF (Pos(punkt, ParamStr(i)) <> 0) AND
  108.            (datei_name = '') THEN
  109.           datei_name := ParamStr(i)
  110.         ELSE BEGIN
  111.           IF datei_name = '' THEN
  112.             prog_str_1 := prog_str_1 + space + ParamStr(i)
  113.           ELSE
  114.             prog_str_2 := prog_str_2 + space + ParamStr(i);
  115.         END;
  116.     END ELSE BEGIN
  117.       ohne_erweiterung := TRUE;
  118.       programm_name := ParamStr(2);
  119.       FOR i := 3 TO ParamCount DO
  120.         IF (Pos(punkt, ParamStr(i)) <> 0) AND
  121.            (datei_name = '') THEN
  122.           datei_name := ParamStr(i)
  123.         ELSE BEGIN
  124.           IF datei_name = '' THEN
  125.             prog_str_1 := prog_str_1 + space + ParamStr(i)
  126.           ELSE
  127.             prog_str_2 := prog_str_2 + space + ParamStr(i);
  128.         END;
  129.       END;
  130.     END;
  131.     FSplit(datei_name, pfad, name, erweiterung);
  132.     FindFirst(datei_name, anyfile, datei_rec);
  133.     erste_datei := datei_rec.name;
  134.     IF ohne_erweiterung THEN
  135.       Loesche_Erweitung(datei_rec.name);
  136.     eingabe_zeile := programm_name + space + prog_str_1 +
  137.                      space + pfad + datei_rec.name +
  138.                      space + prog_str_2;
  139.  
  140.     IF DosError = 0 THEN
  141.       Exec_Prog(eingabe_zeile)
  142.     ELSE BEGIN
  143.       WriteLn('Keine Datei gefunden => Programmabbruch!');
  144.       Halt(1);
  145.     END;
  146.  
  147.     WHILE DosError = 0 DO BEGIN
  148.       FindNext(datei_rec);
  149.       IF erste_datei = datei_rec.name THEN BEGIN
  150.         WriteLn(^G, #13#10'DOALL versucht, die Datei »',
  151.                 erste_datei, +
  152.                 '« zum zweiten Mal zu bearbeiten!');
  153.         WriteLn('Soll DOALL abgebrochen werden? (j/n)');
  154.         REPEAT
  155.           taste := ReadKey;
  156.         UNTIL UpCase(taste) IN ['J', 'N'];
  157.         IF UpCase(taste) = 'J' THEN BEGIN
  158.           WriteLn; WriteLn('Programmabbruch!');
  159.           WriteLn;
  160.           WriteLn('DOALL hat ', count,
  161.                   ' Dateien bearbeitet.');
  162.           Halt(255);
  163.         END;
  164.       END;
  165.  
  166.       IF ohne_erweiterung THEN
  167.         Loesche_Erweitung(datei_rec.name);
  168.       eingabe_zeile := programm_name + space + prog_str_1 +
  169.                        space + pfad + datei_rec.name +
  170.                        space + prog_str_2;
  171.  
  172.       IF DosError = 0 THEN BEGIN
  173.         Exec_Prog(eingabe_zeile);
  174.         Inc(count);
  175.       END ELSE
  176.         WriteLn(#13#10'DOALL hat ', count,
  177.                 ' Dateien bearbeitet.');
  178.     END;
  179. END.
  180. (* ------------------------------------------------------ *)
  181. (*                  Ende von DOALL.PAS                    *)
  182.  
  183.