home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* ERASER.PAS *)
- {$D+}
- PROGRAM Eraser;
-
- TYPE strmax = string[255];
- str20 = string[20];
-
- VAR datnam :array[1..64] of string[13];
- eingmaske :strmax;
- ende,selekt :char;
- anzdat :integer;
-
- {$I WILDCARD.INC }
-
- FUNCTION StrUp(s :strmax) :strmax;
-
- VAR ch :char;
- sh :strmax;
- i :byte;
-
- BEGIN
- sh:='';
- FOR i:=1 TO length(s) DO BEGIN
- ch:=upcase(s[i]);
- sh:=sh+ch;
- END;
- StrUp:=sh;
- END;
-
-
- PROCEDURE Dir(maske :str20; breite :integer);
-
- VAR fcb :array[0..25] of byte absolute $005C;
- dma :array[0..255] of byte;
- anf,fehler,anzausgdat,i,j :integer;
- str :string[13];
-
- PROCEDURE CharOver(index,pos :integer; ch :char);
-
- BEGIN
- insert(ch,datnam[index],pos);
- delete(datnam[index],pos+1,1);
- END;
-
- BEGIN
- { ** Directory einlesen ** }
- FOR i:=1 TO 64 DO
- datnam[i]:=' . ';
- anzdat:=1;
- fehler:=bdos($1A,addr(dma));
- fcb[0]:=0;
- FOR i:=1 TO 11 DO
- fcb[i]:=ord('?');
- fehler:=bdos($11,addr(fcb));
- IF fehler<>255 THEN BEGIN
- anf:=fehler*32;
- FOR i:=anf TO anf+8 DO
- CharOver(anzdat,i-anf+1,chr(mem[addr(dma)+i]));
- FOR i:=anf+9 TO anf+12 DO
- CharOver(anzdat,i-anf+2,chr(mem[addr(dma)+i]));
- END;
- REPEAT
- anzdat:=anzdat+1;
- fehler:=bdos($12);
- anf:=fehler*32;
- IF fehler<>255 THEN BEGIN
- FOR i:=anf TO anf+8 DO
- CharOver(anzdat,i-anf+1,chr(mem[addr(dma)+i]));
- FOR i:=anf+9 TO anf+12 DO
- CharOver(anzdat,i-anf+2,chr(mem[addr(dma)+i]));
- END;
- UNTIL fehler=255;
- anzdat:=anzdat-1;
-
- { ** Dateinamen sortieren ** }
- FOR i:=1 TO anzdat-1 DO
- FOR j:=i+1 TO anzdat DO
- IF datnam[i]>datnam[j] THEN BEGIN
- str:=datnam[i];
- datnam[i]:=datnam[j];
- datnam[j]:=str;
- END;
-
- { ** Dateinamen ausgeben ** }
- anzausgdat:=0;
- IF maske='*.*' THEN BEGIN
- FOR i:=1 TO anzdat DO BEGIN
- write(datnam[i],' ');
- IF (i mod breite)=0 THEN writeln;
- END;
- anzausgdat:=i; END
- ELSE BEGIN
- FOR i:=1 TO anzdat DO BEGIN
- str:=datnam[i];
- j:=pos(' ',str);
- IF j>0 THEN delete(str,j,10-j);
- delete(str,1,1);
- IF Wildcard(maske,str,'*','?')=true THEN BEGIN
- write(datnam[i],' ');
- anzausgdat:=anzausgdat+1;
- IF (anzausgdat mod breite)=0 THEN writeln;
- END;
- END;
- END;
- IF (anzausgdat mod breite)>0 THEN writeln;
- writeln;
- writeln(anzausgdat,' Dateien von ',anzdat,' Dateien');
- END;
-
-
- PROCEDURE EraseDat(maske :str20);
-
- VAR str :string[13];
- loeschen :char;
- i,j,anzeradat :integer;
- dat :file of byte;
-
- BEGIN
- anzeradat:=0;
- FOR i:=1 TO anzdat DO BEGIN
- str:=datnam[i];
- j:=pos(' ',str);
- IF j>0 THEN delete(str,j,10-j);
- delete(str,1,1);
- IF Wildcard(maske,str,'*','?')=true THEN BEGIN
- write(datnam[i],' ');
- IF selekt='J' THEN BEGIN
- write(' J/N ? ');
- read(kbd,loeschen);
- loeschen:=upcase(loeschen);
- write(#8,#8,#8,#8,#8,#8);
- IF loeschen='J' THEN writeln('J ***')
- ELSE writeln('N '); END
- ELSE
- writeln;
- IF ((selekt='J') and (loeschen='J'))
- or (selekt='N') THEN BEGIN
- assign(dat,str);
- erase(dat);
- anzeradat:=anzeradat+1;
- END;
- END;
- END;
- writeln;
- writeln(anzeradat,' Dateien von ',anzdat,
- ' Dateien geloescht');
- END;
-
-
- BEGIN
- writeln('===================== ERASER ============',
- '==========');
- REPEAT
- writeln;
- writeln('nur ENTER: alle Dateien');
- write('Dir-Maske: ');
- readln(eingmaske);
- eingmaske:=StrUp(eingmaske);
- IF eingmaske='' THEN eingmaske:='*.*';
- Dir(eingmaske,5);
- writeln;
- writeln('nur ENTER: keine Datei');
- write('Erase-Maske: ');
- readln(eingmaske);
- eingmaske:=StrUp(eingmaske);
- IF eingmaske<>'' THEN BEGIN
- write('selektiertes Loeschen (J/N)? ');
- read(kbd,selekt);
- writeln;
- selekt:=upcase(selekt);
- EraseDat(eingmaske);
- END;
- writeln;
- write('ERASER beenden (J/N)? ');
- read(kbd,ende);
- writeln;
- UNTIL upcase(ende)='J';
- END.
- (* ------------------------------------------------- *)
- (* Ende von ERASER.PAS *)