home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 07 / tricks / except.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-05-07  |  2.4 KB  |  89 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     EXCEPT.PAS                         *)
  3. (*  Ausführen von DOS-Befehlen "ohne" bestimmte Dateien   *)
  4. (*       (c) 1990 Peter W. Schweickard & TOOLBOX          *)
  5. (* ------------------------------------------------------ *)
  6. PROGRAM Except;
  7. {$M 4000,0,0}
  8.  
  9. USES Dos;
  10.  
  11. VAR
  12.   fNr      : File;
  13.   f        : SearchRec;
  14.   Call,
  15.   Dummy,
  16.   NextAttr : WORD;
  17.   SaveAttr : ARRAY [1..500] OF WORD;
  18.   Search,
  19.   ExecPar  : STRING;
  20.  
  21.   FUNCTION Upper(Input : STRING) : STRING;
  22.   VAR
  23.     i : INTEGER;
  24.   BEGIN
  25.     FOR i := 1 TO Length(Input) DO
  26.       Input[i] := UpCase(Input[i]);
  27.     Upper := Input;
  28.   END {Upper};
  29.  
  30. BEGIN
  31.   { Fehlerüberprüfung: Mindestens drei Parameter }
  32.   IF ParamCount < 3 THEN BEGIN
  33.     WriteLn('Zu wenige Parameter!');
  34.     Halt(1);
  35.   END;
  36.   { Überprüfung auf DO und DOS-Befehl }
  37.   Dummy := 1;
  38.   REPEAT
  39.     Inc(Dummy);
  40.     IF Dummy = ParamCount THEN BEGIN
  41.       WriteLn(' DO fehlt oder kein Befehl angegeben!');
  42.       Halt(1);
  43.     END;
  44.   UNTIL Upper(ParamStr(Dummy)) = 'DO';
  45.   { Alle angegebenen Dateien auf "hidden" setzen }
  46.   NextAttr := 1;
  47.   Dummy    := 1;
  48.   Search := ParamStr(Dummy);
  49.   REPEAT
  50.     FindFirst(Search, AnyFile, f);
  51.     WHILE DosError = 0 DO BEGIN
  52.       Assign(fNr, f.Name);
  53.       GetFAttr(fNr, SaveAttr[NextAttr]);
  54.       SetFAttr(fNr, Hidden);
  55.       FindNext(f);
  56.       Inc(NextAttr);
  57.     END;
  58.     Inc(Dummy);
  59.     Search := ParamStr(Dummy);
  60.   UNTIL Upper(Search) = 'DO';
  61.   Call := Dummy + 1;
  62.   { Parameter für den Befehl herausfiltern }
  63.   ExecPar := '';
  64.   IF Call <> ParamCount THEN
  65.     FOR Dummy := Call + 1 TO ParamCount DO
  66.       ExecPar := ExecPar + ' ' + ParamStr(Dummy);
  67.   { Turbo-Interrupts tauschen und Befehl weitergeben }
  68.   SwapVectors;
  69.   Exec('\COMMAND.COM', '/C ' + ParamStr(Call) + ' ' +
  70.                                ExecPar);
  71.   { Interrupts "zurückbiegen" ... }
  72.   SwapVectors;
  73.   { ... und alte Attribute wieder herstellen }
  74.   NextAttr := 1;
  75.   FOR Dummy := 1 TO ParamCount - 1 DO BEGIN
  76.     Search := ParamStr(Dummy);
  77.     IF Upper(Search) = 'DO' THEN Exit;
  78.     FindFirst(Search, AnyFile, f);
  79.     WHILE DosError = 0 DO BEGIN
  80.       Assign(fNr, f.Name);
  81.       SetFattr(fNr, SaveAttr[NextAttr]);
  82.       FindNext(f);
  83.       Inc(NextAttr);
  84.     END;
  85.   END;
  86. END {Except}.
  87. (* ------------------------------------------------------ *)
  88. (*               Ende von EXCEPT.PAS                      *)
  89.