home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* NDEL.PAS *)
- (* Löschen mit Ausnahmen *)
- (* (c) 1990 Thomas Seban & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM NDel;
-
- {$M 8192,0,0}
- {$V-}
-
- USES
- Dos, Crt;
-
- VAR
- Regs : Registers;
- Ausn : ARRAY [1..10] OF STRING [12];
- Pfad : PathStr;
- Dirpfad : DirStr;
- Name : NameStr;
- Ext : ExtStr;
- DeleteStr : STRING;
- AnzahlAusn,
- Id : BYTE;
- Abfrage : BOOLEAN;
-
- PROCEDURE UpString(VAR UpName : STRING);
- VAR
- Index : BYTE;
- BEGIN
- FOR Index := 1 TO Length(UpName) DO
- UpName[Index] := UpCase(UpName[Index]);
- END;
-
- FUNCTION Search(Name : STRING; Zeichen : CHAR) : BOOLEAN;
- VAR
- Index : BYTE;
- BEGIN
- Search := FALSE;
- FOR Index := 1 TO Length(Name) DO
- IF Name[Index] = Zeichen THEN
- Search := TRUE;
- END;
-
- FUNCTION SameChar(Zeichen1, Zeichen2 : CHAR) : BOOLEAN;
- BEGIN
- IF Zeichen1 = Zeichen2 THEN
- SameChar := TRUE
- ELSE IF Zeichen2 = '?' THEN
- IF Zeichen1 <> '.' THEN
- SameChar := TRUE
- ELSE
- SameChar := FALSE
- ELSE
- SameChar := FALSE;
- END;
-
- FUNCTION Equal(Name1, Name2 : STRING) : BOOLEAN;
- VAR
- Id1, Id2 : BYTE;
- BEGIN
- Equal := TRUE;
- IF Name2 <> '*.*' THEN BEGIN
- IF NOT Search(Name2, '*') THEN BEGIN
- IF Length(Name1) = Length(Name2) THEN BEGIN
- FOR Id2 := 1 TO Length(Name2) DO
- IF (NOT SameChar(Name1[Id2], Name2[Id2])) THEN
- Equal := FALSE;
- END ELSE
- Equal := FALSE;
- END ELSE BEGIN
- Id1 := 1;
- Id2 := 1;
- WHILE Id2 <= Length(Name2) DO BEGIN
- IF SameChar(Name1[Id1], Name2[Id2]) THEN BEGIN
- Inc(Id1);
- Inc(Id2);
- END ELSE BEGIN
- IF Name2[Id2] = '*' THEN BEGIN
- WHILE (Name2[Id2] <> '.') AND
- (Id2 <= Length(Name2)) DO Inc(Id2);
- WHILE (Name1[Id1] <> '.') AND
- (Id1 <= Length(Name1)) DO Inc(Id1);
- END ELSE BEGIN
- Equal := FALSE;
- Inc(Id1);
- Inc(Id2);
- END;
- END;
- END;
- END;
- END;
- END;
-
- PROCEDURE DeleteDatei(Name : STRING);
- BEGIN
- Name := Name + #0;
- Regs.ah := $41;
- Regs.ds := Seg(Name);
- Regs.dx := Ofs(Name) + 1;
- MsDos(Regs);
- IF (Regs.flags AND 1) = 1 THEN
- Write('Datei ', Name,' konnte nicht gelöscht werden');
- END;
-
- FUNCTION OkDel(Name : STRING) : BOOLEAN;
- VAR
- Taste : CHAR;
- Ok : BOOLEAN;
- BEGIN
- Ok := TRUE;
- IF Equal(Name, DeleteStr) THEN BEGIN
- FOR Id := 1 TO AnzahlAusn DO
- IF Equal(Name, Ausn[Id]) THEN
- Ok := FALSE;
- END ELSE
- Ok := FALSE;
- IF Abfrage AND Ok THEN BEGIN
- Write('Soll ', Name, ' gelöscht werden (j/n) ? ');
- REPEAT
- Taste := ReadKey;
- UNTIL (Taste = 'j') OR (Taste = 'n');
- IF Taste = 'n' THEN Ok := FALSE;
- WriteLn(Taste);
- END;
- OkDel := Ok;
- END;
-
- PROCEDURE Dir(Pfad : STRING);
- VAR
- S : SearchRec;
- BEGIN
- FindFirst(Pfad + '\*.*', AnyFile, S);
- WHILE (DosError <> 18) DO BEGIN
- IF S.Attr <> $10 THEN
- IF OkDel(S.Name) THEN
- DeleteDatei(Pfad + '\' + S.Name);
- FindNext(S);
- END;
- END;
-
- BEGIN
- IF paramcount = 0 THEN BEGIN
- WriteLn;
- WriteLn(' NDEL - löschen von Dateien mit Ausnahmen');
- WriteLn(' (c) 1990 Thomas Seban & TOOLBOX');
- WriteLn;
- WriteLn(' Syntax:');
- WriteLn(' NDEL <Name> [/P] <Ausnahme1..Ausnahme10>');
- Writeln;
- writeln(' Wildcards werden akzeptiert.');
- END ELSE BEGIN
- Pfad := ParamStr(1);
- UpString(Pfad);
- Abfrage := TRUE;
- IF Copy(Pfad, Length(Pfad) - 1, 2) = '/P' THEN
- Pfad := Copy(Pfad, 1, Length(Pfad) - 2)
- ELSE
- Abfrage := FALSE;
- FSplit(Pfad, DirPfad, Name, Ext); { TP 5.x, UNIT Dos }
- DeleteStr := Name + Ext;
- IF DirPfad = '' THEN
- GetDir(0, DirPfad); { 0 => akt. Laufwerk }
- FOR Id := 1 TO ParamCount - 1 DO BEGIN
- Ausn[Id] := ParamStr(Id + 1);
- UpString(Ausn[Id]);
- END;
- AnzahlAusn := Id;
- IF Id > 10 THEN AnzahlAusn := 10;
- IF ParamCount = 1 THEN BEGIN
- Ausn[Id] := '';
- AnzahlAusn := 1;
- END;
- IF DirPfad[Length(DirPfad)] = '\' THEN
- DirPfad := Copy(DirPfad, 1, Length(DirPfad) - 1);
- Dir(DirPfad);
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von NDEL.PAS *)