home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* DOPPELT.PAS *)
- (* (C) 1991 Frank Verwohl & DMV-Verlag *)
- (* Funktion: Ermittelt Dateien, die mehrfach auf dem *)
- (* Laufwerk sind. *)
- (* Sprache: Turbo Pascal 6.0 *)
- (* ------------------------------------------------- *)
- {$A+,B-,D-,E-,F-,G-,I+,L-,N-,O-,R-,S-,V-,X-}
- {$M 16384,0,655360}
-
- PROGRAM Doppelte_Files;
-
- USES
- Crt, Dos;
-
- TYPE
- tDatZeiger = ^tDat;
- tDirZeiger = ^tDir;
- tDopZeiger = ^tDop;
- tDatei = RECORD
- Pfad: PathStr;
- Name: STRING[12];
- Dops: tDopZeiger;
- END;
- tDat = RECORD
- Pfad: tDirZeiger;
- sr: SearchRec;
- Dats: tDatZeiger;
- END;
- tDir = RECORD
- Pfad: PathStr;
- Dirs: tDirZeiger;
- END;
- tDop = RECORD
- Pfad: PathStr;
- sr: SearchRec;
- Dops: tDopZeiger;
- END;
-
- VAR
- i, Anzahl,
- DateiAnzahl: INTEGER;
- Pfad: PathStr;
- Filter: STRING;
- Dat: ARRAY[1..300] OF tDatei;
- DatKopf: tDatZeiger;
- DirKopf: tDirZeiger;
- BildAddr: WORD;
- Screen: ARRAY[0..7999] OF BYTE;
- MarkHeap: POINTER;
- Esc, Neu: BOOLEAN;
- DoppelMode: BOOLEAN;
- AktLW, MaxLW: BYTE;
-
- CONST
- LeerZeile = ' ' +
- ' ' +
- ' '; (* 80 Leerzeichen *)
- LeerDat = ' ' +
- ' '; (* 60 LZ *)
-
- PROCEDURE Init;
- BEGIN
- FOR i := 1 TO 300 DO
- WITH Dat[i] DO BEGIN
- Pfad := '';
- Name := '';
- Dops := NIL;
- END;
- END;
-
- PROCEDURE Cursor(Flag: BOOLEAN);
- VAR
- Regs: Registers;
- BEGIN
- Regs.AH := 3;
- Intr($10, Regs);
- IF Flag THEN Regs.CH := Regs.CH AND NOT 32
- ELSE Regs.CH := Regs.CH OR 32;
- Regs.AH := 1;
- Intr($10, Regs);
- END;
-
- PROCEDURE LaufwerkBest;
- VAR
- Regs: Registers;
- BEGIN
- WITH Regs DO BEGIN
- AH := $19;
- Intr($21, Regs);
- AktLW := AL;
- AH := $0E;
- DL := AktLW;
- Intr($21, Regs);
- MaxLW := AL;
- END;
- END;
-
- FUNCTION St(Zahl: INTEGER): STRING;
- VAR
- s: STRING;
- BEGIN
- Str(Zahl, s);
- St := s;
- END;
-
- PROCEDURE WriteXY(x, y: BYTE; St: STRING);
- BEGIN
- GotoXY(x,y);
- Write(St);
- END;
-
- PROCEDURE Normal;
- BEGIN
- TextColor(LightGray);
- TextBackground(Black);
- END;
-
- PROCEDURE Invers;
- BEGIN
- TextColor(Black);
- TextBackground(LightGray);
- END;
-
- PROCEDURE Hell;
- BEGIN
- TextColor(Yellow);
- TextBackground(Blue);
- END;
-
- PROCEDURE Fenster(x1, y1, x2, y2: BYTE; Titel: STRING);
- VAR
- i, j: BYTE;
- BEGIN
- Normal;
- WriteXY(x1, y1, '╔');
- WriteXY(x2, y1, '╗');
- WriteXY(x1, y2, '╚');
- WriteXY(x2, y2, '╝');
- FOR i := x1 + 1 TO x2 - 1 DO BEGIN
- WriteXY(i, y1, '═');
- WriteXY(i, y2, '═');
- END;
- FOR i := y1 + 1 TO y2 - 1 DO BEGIN
- WriteXY(x1, i, '║');
- WriteXY(x2, i, '║');
- END;
- FOR i := x1 + 1 TO x2 - 1 DO
- FOR j := y1 + 1 TO y2 - 1 DO WriteXY(i, j, ' ');
- WriteXY(x1 + 2, y1, Titel);
- GotoXY(x1 + 1, y1 + 1);
- END;
-
- PROCEDURE SaveScreen;
- BEGIN
- FOR i := 0 TO 7999 DO
- Screen[i] := Mem[BildAddr:i];
- END;
-
- PROCEDURE RestoreScreen;
- BEGIN
- FOR i := 0 TO 7999 DO Mem[BildAddr:i] := Screen[i];
- END;
-
- PROCEDURE LaufwerkFilterAusgeben;
- BEGIN
- LaufwerkBest;
- Pfad := Chr(65 + AktLW) + ':\';
- WriteXY(50, 25, ' ');
- WriteXY(50, 25, 'LW: ' + Chr(65 + AktLW) + ':\'
- + Filter);
- END;
-
- PROCEDURE Hauptbild;
- BEGIN
- IF Mem[$40:$49] = 7 THEN
- BildAddr := $B000 (* Bildschirmsegment bei Mono *)
- ELSE
- BildAddr := $B800; (* ... bei Color *)
- Cursor(FALSE);
- Invers;
- WriteXY(1, 1, LeerZeile);
- WriteXY(11, 1, 'DOPPELT Version 2.0');
- Write(' - Copyright 1991 F. Verwohl & DMV-Verlag ');
- Normal;
- Fenster( 1, 2, 80, 4, ' Aktuelle Datei ');
- Fenster( 1, 5, 16, 24, ' Datei... ');
- Fenster(17, 5, 80, 24, ' ...steht in den ' +
- 'Verzeichnissen... ');
- Hell;
- WriteXY( 1,25, 'F1');
- Normal;
- Write(' Hilfe');
- Hell;
- WriteXY(10,25, 'F2');
- Normal;
- Write(' Neu');
- Hell;
- WriteXY(18,25, 'F3');
- Normal;
- Write(' Laufwerk');
- Hell;
- WriteXY(72,25, 'F10');
- Normal;
- Write(' Ende');
- LaufwerkFilterAusgeben;
- END;
-
- PROCEDURE Hilfe;
- BEGIN
- SaveScreen;
- Fenster(1, 2, 80,24, ' Hilfe ');
- Hell;
- WriteXY(19, 4, 'DOPPELT, (C) 1991 F. Verwohl & ' +
- 'DMV-Verlag');
- Normal;
- WriteXY(5, 9, 'TAB - Switch: ' +
- 'Umschalten zwischen den Fenstern');
- WriteXY(5, 12, 'F1 - Hilfe: ' +
- 'Diese Hilfefunktion');
- WriteXY(5, 14, 'F2 - Neu: ' +
- 'Nach Eingabe eines Datei' +
- 'filters (z.B. "*.*") werden alle');
- WriteXY(5, 15, ' ' +
- 'Dateien, die sich mehrfach' +
- ' auf dem Laufwerk befinden und');
- WriteXY(5, 16, ' ' +
- 'auf die der Filter "paßt", angezeigt.');
- WriteXY(5, 18, 'F3 - Laufwerk: ' +
- 'Aktuelles Laufwerk ändern');
- WriteXY(5, 20, 'F4 - Löschen: ' +
- 'Aktuelle Datei löschen (nur im ' +
- 'Verzeichnisfenster !)');
- WriteXY(5, 22, 'F10 - Ende: ' +
- 'Programm beenden');
- REPEAT UNTIL KeyPressed;
- RestoreScreen;
- END;
-
- PROCEDURE LaufwerkEingeben;
- VAR
- Path: PathStr;
- Lw: BYTE;
-
- PROCEDURE LaufwerkAendern;
- VAR
- Regs: Registers;
- BEGIN
- Regs.AH := $0E;
- Regs.DL := Lw;
- Intr($21, Regs);
- END;
-
- BEGIN (* LaufwerkEingeben *)
- REPEAT
- SaveScreen;
- Fenster(28, 7, 53, 10, ' Laufwerk eingeben ');
- LaufwerkBest;
- WriteXY(30, 8, 'Aktuell: ' +
- Chr(65 + AktLW) + ':\');
- WriteXY(30, 9, ' Neu: ');
- Cursor(TRUE);
- ReadLn(Path);
- Cursor(FALSE);
- IF Path = '' THEN Lw := AktLW
- ELSE Lw := Ord(UpCase(Path[1])) - 65;
- Path := Chr(Lw + 65) + ':\';
- {$I-}
- ChDir(Path);
- {$I+}
- RestoreScreen;
- UNTIL (IOResult = 0);
- IF IOResult = 0 THEN LaufwerkAendern;
- LaufwerkFilterAusgeben;
- END;
-
- PROCEDURE FilterEingeben;
- VAR
- s: STRING;
- BEGIN
- SaveScreen;
- Fenster(28, 7, 53, 9, ' Dateifilter eingeben ');
- Cursor(TRUE);
- ReadLn(s);
- Cursor(FALSE);
- IF s <> '' THEN Filter := s;
- RestoreScreen;
- LaufwerkFilterAusgeben;
- END;
-
- PROCEDURE BaumEinlesen;
- VAR
- Attr: BYTE;
- AltDir: tDirZeiger;
- AltDat: tDatZeiger;
-
- PROCEDURE DatSuchen(AktDir: tDirZeiger);
- VAR
- Datei: SearchRec;
- Blatt: tDatZeiger;
- BEGIN
- FindFirst(AktDir^.Pfad + Filter, Attr, Datei);
- WHILE DosError = 0 DO
- BEGIN
- IF (Datei.Attr AND VolumeID <> VolumeID) AND
- (Datei.Name[1] <> '.') AND (Datei.Attr AND
- Directory <> Directory) THEN BEGIN
- New(Blatt);
- AltDat^.Pfad := AktDir;
- AltDat^.Dats := Blatt;
- AltDat^.sr := Datei;
- Blatt^.Dats := NIL;
- AltDat := Blatt;
- Inc(DateiAnzahl);
- END;
- FindNext(Datei);
- END;
- END;
-
- PROCEDURE DirSuchen(Pfad: PathStr);
- VAR
- Datei: SearchRec;
- Blatt: tDirZeiger;
- BEGIN
- FindFirst(Pfad + '*.*', Attr, Datei);
- WHILE DosError = 0 DO BEGIN
- IF (Datei.Attr AND VolumeID <> VolumeID) AND
- (Datei.Name[1] <> '.') AND (Datei.Attr AND
- Directory = Directory) THEN BEGIN
- New(Blatt);
- Blatt^.Pfad := Pfad + Datei.Name + '\';
- Blatt^.Dirs := NIL;
- AltDir^.Dirs := Blatt;
- DatSuchen(Blatt);
- AltDir := Blatt;
- DirSuchen(Pfad + Datei.Name + '\');
- END;
- FindNext(Datei);
- END;
- END;
-
- BEGIN (* BaumEinlesen *)
- Release(MarkHeap);
- SaveScreen;
- Fenster(29, 10, 52, 12, '');
- WriteXY(31, 11, 'Lese Baumstruktur...');
- Attr := $FF; (* Alle Dateien suchen *)
- DateiAnzahl := 0;
- GetDir(0, Pfad);
- Pfad := Pfad[1] + ':\';
- New(DirKopf);
- New(DatKopf);
- DirKopf^.Pfad := Pfad;
- DirKopf^.Dirs := NIL;
- DatKopf^.Pfad := NIL;
- DatKopf^.Dats := NIL;
- AltDat := DatKopf;
- AltDir := DirKopf;
- DatSuchen(DirKopf);
- DirSuchen(Pfad);
- RestoreScreen;
- END;
-
- FUNCTION SchonDa(Name: PathStr): BOOLEAN;
- VAR
- i: INTEGER;
- BEGIN
- SchonDa := FALSE;
- IF Anzahl > 0 THEN
- FOR i := 1 TO Anzahl DO
- IF Dat[i].Name = Name THEN SchonDa := TRUE;
- END;
-
- FUNCTION Doppelt(Path, Name: PathStr;
- Anzahl: INTEGER): BOOLEAN;
- VAR
- Akt: tDatZeiger;
- DopDir,
- DirMerk: tDopZeiger;
- BEGIN
- Doppelt := FALSE;
- Akt := DatKopf;
- DirMerk := NIL;
- WHILE (Akt <> NIL) AND (Akt^.Dats <> NIL) DO BEGIN
- IF (Akt^.sr.Name = Name) AND
- (Akt^.Pfad^.Pfad <> Path) THEN BEGIN
- Doppelt:=TRUE;
- IF Dat[Anzahl].Dops = NIL THEN BEGIN
- New(DopDir);
- DopDir^.Pfad := Dat[Anzahl].Pfad;
- DopDir^.sr := Akt^.sr;
- Dat[Anzahl].Dops := DopDir;
- DirMerk := DopDir;
- New(DopDir);
- DopDir^.Pfad := Akt^.Pfad^.Pfad;
- DopDir^.sr := Akt^.sr;
- DopDir^.Dops := NIL;
- DirMerk^.Dops := DopDir;
- END ELSE BEGIN
- New(DopDir);
- DopDir^.Pfad := Akt^.Pfad^.Pfad;
- DopDir^.sr := Akt^.sr;
- DopDir^.Dops := NIL;
- DirMerk^.Dops := DopDir;
- END;
- DirMerk := DopDir;
- END;
- Akt := Akt^.Dats;
- END;
- END;
-
- PROCEDURE DateienSuchen;
- VAR
- Posi: INTEGER;
- Prozent: BYTE;
-
- PROCEDURE ProzentAnzeige;
- VAR
- NeuProzent: BYTE;
- BEGIN
- NeuProzent := Round((Posi / DateiAnzahl) * 100);
- IF (Prozent <> NeuProzent) AND
- (NeuProzent > 0) THEN BEGIN
- GotoXY(3, 12);
- FOR i := 1 TO Round(NeuProzent / 100 * 72) DO
- Write('█');
- END;
- GotoXY(75, 12);
- Write(NeuProzent: 3, '%');
- END;
-
- PROCEDURE Suchen(Akt: tDatZeiger);
- VAR
- i: BYTE;
- Pfad: PathStr;
- BEGIN
- WHILE (Akt <> NIL) AND (Akt^.Dats <> NIL) DO BEGIN
- Pfad := Akt^.Pfad^.Pfad;
- FOR i := 2 TO 79 DO WriteXY(i, 11, ' ');
- WriteXY(2,11, Pfad + Akt^.sr.Name);
- Inc(Posi);
- ProzentAnzeige;
- IF NOT(SchonDa(Akt^.sr.Name)) AND Doppelt(Pfad,
- Akt^.sr.Name, Anzahl + 1) THEN BEGIN
- Inc(Anzahl);
- Dat[Anzahl].Pfad := Pfad;
- Dat[Anzahl].Name := Akt^.sr.Name;
- Dat[Anzahl].Dops^.Pfad := Pfad;
- Dat[Anzahl].Dops^.sr := Akt^.sr;
- END;
- Akt := Akt^.Dats;
- END;
- END;
-
- BEGIN (* DateienSuchen *)
- SaveScreen;
- Init;
- Fenster(1, 10, 80, 13, ' Teste... ');
- FOR i := 3 TO 73 DO WriteXY(i, 12, '▒');
- Posi := 0;
- Prozent := 100;
- ProzentAnzeige;
- Anzahl := 0;
- Suchen(DatKopf);
- RestoreScreen;
- END;
-
- FUNCTION SRecToStr(sr: SearchRec): STRING;
- VAR
- s: STRING;
- BEGIN
- Str(sr.Size:8, s);
- s := s + ' ';
- IF (sr.Attr AND ReadOnly) = ReadOnly THEN
- s := s + 'R'
- ELSE
- s := s + '.';
- IF (sr.Attr AND Hidden) = ReadOnly THEN
- s := s + 'H'
- ELSE s := s + '.';
- IF (sr.Attr AND SysFile) = SysFile THEN
- s := s + 'S'
- ELSE
- s := s + '.';
- IF (sr.Attr AND Archive) = Archive THEN
- s := s + 'A'
- ELSE
- s := s + '.';
- SRecToStr := s;
- END;
-
- FUNCTION Kuerze(s: PathStr; Le: BYTE): STRING;
- BEGIN
- IF Length(s) > Le THEN BEGIN
- s[4] := '.';
- s[5] := '.';
- s[6] := '.';
- WHILE Length(s) > Le DO Delete(s, 7, 1);
- END;
- Kuerze := s;
- END;
-
- FUNCTION LeadZero(w: WORD): STRING;
- VAR
- s: STRING;
- BEGIN
- Str(w, s);
- IF w < 10 THEN s := '0' + s;
- LeadZero := s;
- END;
-
- FUNCTION AnzahlBestimmen(Akt: tDopZeiger): INTEGER;
- VAR
- i: INTEGER;
- BEGIN
- i := 0;
- WHILE (Akt <> NIL) DO BEGIN
- Akt := Akt^.Dops;
- Inc(i);
- END;
- AnzahlBestimmen := i;
- END;
-
- PROCEDURE AktuellAnzeige(s: PathStr; sr: SearchRec);
- VAR
- i: BYTE;
- dt: DateTime;
- BEGIN
- Normal;
- FOR i := 2 TO 79 DO WriteXY(i, 3, ' ');
- Hell;
- WriteXY(2, 3, Kuerze(s, 46));
- Normal;
- UnPackTime(sr.Time, dt);
- GotoXY(49, 3);
- WITH dt DO
- Write(LeadZero(Day), '.', LeadZero(Month), '.',
- Year, ' ', LeadZero(Hour), ':', LeadZero(Min));
- WriteXY(66, 3, SRecToStr(sr));
- END;
-
- PROCEDURE MehrfachAnzeige(s: PathStr;
- DatNr, An, En, Inv: INTEGER);
- VAR
- i, j,
- x, y : BYTE;
- Akt : tDopZeiger;
- BEGIN
- Akt := Dat[DatNr].Dops;
- IF DoppelMode = FALSE THEN
- AktuellAnzeige(s, Akt^.sr);
- FOR y := 6 TO 23 DO WriteXY(18, y, LeerDat);
- i := 6;
- j := 1;
- WHILE (Akt <> NIL) DO WITH Akt^ DO BEGIN
- IF (j >= An) AND (j <= En) THEN BEGIN
- IF j = Inv THEN IF DoppelMode = TRUE THEN BEGIN
- AktuellAnzeige(Pfad + sr.Name, sr);
- Invers;
- END ELSE Hell
- ELSE Normal;
- WriteXY(18, i, ' ' + Kuerze(Pfad, 46));
- FOR x := 1 TO 47 - Length(Kuerze(Pfad, 46)) DO
- Write(' ');
- GotoXY(66, i);
- Write(SRecToStr(sr), ' ');
- Normal;
- Inc(i);
- END;
- Akt := Dops;
- Inc(j);
- END;
- Hell;
- GotoXY(19, 23);
- Write('Anzahl: ', AnzahlBestimmen(Dat[DatNr].Dops));
- Normal;
- END;
-
- PROCEDURE Anzeigen(EinAn, EinEn, EinAkt,
- DopAn, DopEn, DopAkt: INTEGER);
- VAR
- i, x, y: BYTE;
- d : DirStr;
- n : NameStr;
- e : ExtStr;
- Anz : INTEGER;
- BEGIN
- i := EinAn;
- y := 6;
- WHILE i <= EinEn DO BEGIN
- FSplit(Dat[i].Pfad + Dat[i].Name, d, n, e);
- IF i = EinAkt THEN BEGIN
- MehrfachAnzeige(d + n + e, i, DopAn,
- DopEn, DopAkt);
- IF DoppelMode = TRUE THEN Hell ELSE Invers;
- END ELSE Normal;
- WriteXY(2, y, ' ');
- Write(n);
- IF Length(n) < 8 THEN
- FOR x := 1 TO 8 - Length(n) DO Write(' ');
- Write(e);
- FOR x := 1 TO 5 - Length(e) DO Write(' ');
- Inc(i);
- Inc(y);
- END;
- END;
-
- PROCEDURE Era(VAR EinAkt, DopAkt,
- EinAnzahl, DopAnzahl: INTEGER);
- VAR
- f : FILE;
- FPfad : PathStr;
- FName : STRING[12];
- Vor, Akt : tDopZeiger;
- i : INTEGER;
- BEGIN
- Akt := Dat[EinAkt].Dops;
- Vor := Akt;
- i := 0;
- FName := '';
- WHILE (Akt <> NIL) AND (i <> DopAkt) DO BEGIN
- FPfad := Akt^.Pfad;
- FName := Akt^.sr.Name;
- IF i > 1 THEN Vor := Vor^.Dops;
- Akt := Akt^.Dops;
- Inc(i);
- END;
- IF FPfad + FName <> '' THEN BEGIN
- Assign(f, FPfad + FName);
- Erase(f);
- IF DopAnzahl = 1 THEN BEGIN
- IF EinAnzahl > 1 THEN
- FOR i := EinAkt TO EinAnzahl - 1 DO
- Dat[i] := Dat[i + 1];
- Dec(EinAnzahl);
- END ELSE IF DopAkt = 1 THEN BEGIN
- Dat[EinAkt].Pfad := Akt^.Pfad;
- Dat[EinAkt].Dops := Akt;
- END ELSE BEGIN
- Vor^.Dops := Akt;
- Dec(DopAkt);
- END;
- Dec(DopAnzahl);
- END;
- END;
-
- PROCEDURE Loeschen(VAR EinAkt, DopAkt,
- EinAnzahl, DopAnzahl: INTEGER);
- VAR
- ch: CHAR;
- t: BYTE;
- Loesch,
- Ret,
- Esc: BOOLEAN;
- BEGIN
- SaveScreen;
- Fenster(1, 4, 51, 6, ' ' + Chr(24)
- + ' Wollen Sie diese Datei wirklich löschen ? '
- + Chr(24) + ' ');
- Loesch := FALSE;
- Ret := FALSE;
- Esc := FALSE;
- REPEAT
- IF Loesch = TRUE THEN Invers
- ELSE Normal;
- WriteXY(14, 5, ' Ok ');
- IF Loesch = TRUE THEN Normal
- ELSE Invers;
- WriteXY(30, 5, ' Abbruch ');
- Normal;
- REPEAT UNTIL KeyPressed;
- ch := ReadKey;
- t := Ord(ch);
- IF t = 0 THEN BEGIN
- REPEAT UNTIL KeyPressed;
- ch := ReadKey;
- t := Ord(ch);
- IF (t = 75) OR (t = 77) THEN
- Loesch := NOT(Loesch);
- END ELSE
- CASE t OF
- 13 : Ret := TRUE;
- 27 : Esc := TRUE;
- 32, 52, 54 : Loesch := NOT(Loesch);
- END;
- UNTIL (Ret = TRUE) OR (Esc = TRUE);
- IF (Ret = TRUE) AND (Loesch = TRUE) THEN
- Era(EinAkt, DopAkt, EinAnzahl, DopAnzahl);
- RestoreScreen;
- END;
-
- PROCEDURE DateiFenster;
- VAR
- t, y : BYTE;
- EinAnzahl,
- DopAnzahl,
- An, En, Akt,
- EinAn, EinEn,
- EinAkt, DopAn,
- DopEn, DopAkt: INTEGER;
- BEGIN
- DoppelMode := FALSE;
- Esc := FALSE;
- Neu := FALSE;
- EinAn := 1;
- EinEn := 17;
- EinAkt := 1;
- EinAnzahl := Anzahl;
- DopAn := 1;
- DopEn := 17;
- DopAkt := 1;
- Anzahl := EinAnzahl;
- An := EinAn;
- En := EinEn;
- Akt := EinAkt;
- IF Anzahl < 17 THEN EinEn := Anzahl;
- REPEAT
- IF EinAnzahl = 0 THEN BEGIN
- Hell;
- WriteXY(3, 7, 'Keine');
- WriteXY(4, 9, 'Datei');
- WriteXY(5, 11, 'gefunden !');
- Normal;
- END ELSE BEGIN
- Hell;
- WriteXY(3, 23, 'Anzahl: ' + St(EinAnzahl));
- Normal;
- END;
- IF Anzahl > 0 THEN BEGIN
- IF DoppelMode = FALSE THEN DopEn := 17;
- DopAnzahl := AnzahlBestimmen(Dat[EinAkt].Dops);
- IF DopAnzahl < 17 THEN DopEn := DopAnzahl;
- Anzeigen(EinAn, EinEn, EinAkt,
- DopAn, DopEn, DopAkt);
- END;
- REPEAT UNTIL KeyPressed;
- t := Ord(ReadKey);
- IF t = 0 THEN BEGIN
- t := Ord(ReadKey);
- CASE t OF
- 71: Akt := 1;
- 79: Akt := Anzahl;
- 72: Dec(Akt);
- 80: Inc(Akt);
- 73: Akt := Akt - 17;
- 81: Akt := Akt + 17;
- 59: Hilfe;
- 60: Neu := TRUE;
- 61: LaufwerkEingeben;
- 62: IF (DoppelMode = TRUE) AND
- (DopAnzahl > 0) THEN BEGIN
- Loeschen(EinAkt, DopAkt,
- EinAnzahl, DopAnzahl);
- IF DopAnzahl = 0 THEN BEGIN
- Normal;
- WriteXY(31, 25, ' ');
- FOR y:=6 TO 23 DO
- WriteXY(2, y, ' ');
- DopAn := 1;
- DopEn := 17;
- DopAkt := 1;
- An := EinAn;
- En := EinEn;
- Akt := EinAkt;
- Anzahl := EinAnzahl;
- DoppelMode := NOT(DoppelMode);
- END ELSE Akt := DopAkt;
- END;
- 68: Esc:=TRUE;
- END{CASE};
- END ELSE
- CASE t OF
- 55: Akt:=1;
- 49: Akt:=Anzahl;
- 56: Dec(Akt);
- 50: Inc(Akt);
- 57: Akt:=Akt-17;
- 51: Akt:=Akt+17;
- 9: IF Anzahl>0 THEN BEGIN
- IF DoppelMode = TRUE THEN BEGIN
- Normal;
- WriteXY(31, 25, ' ');
- DopAn := 1;
- DopEn := 17;
- DopAkt := 1;
- An := EinAn;
- En := EinEn;
- Akt := EinAkt;
- Anzahl := EinAnzahl;
- END ELSE BEGIN
- Hell;
- WriteXY(31, 25, 'F4');
- Normal;
- Write(' Löschen');
- EinAn := An;
- EinEn := En;
- EinAkt := Akt;
- An := DopAn;
- En := DopEn;
- Akt := DopAkt;
- DopAnzahl := AnzahlBestimmen(
- Dat[EinAkt].Dops);
- IF DopAnzahl < 17 THEN
- DopEn:=DopAnzahl;
- Anzahl := DopAnzahl;
- END;
- DoppelMode := NOT(DoppelMode);
- END;
- END{CASE};
- IF Akt < 1 THEN Akt := 1;
- IF Akt < An THEN An := Akt;
- IF Akt > Anzahl THEN Akt := Anzahl;
- IF Akt > En THEN An := Akt - 16;
- En := An + 16;
- IF En > Anzahl THEN En := Anzahl;
- IF DoppelMode = TRUE THEN BEGIN
- Anzahl := DopAnzahl;
- DopAn := An;
- DopEn := En;
- DopAkt := Akt;
- END ELSE BEGIN
- Anzahl := EinAnzahl;
- EinAn := An;
- EinEn := En;
- EinAkt := Akt;
- END;
- UNTIL (Esc = TRUE) OR (Neu = TRUE);
- END;
-
- BEGIN
- Mark(MarkHeap);
- Filter := '*.*';
- DateiAnzahl := 0;
- Anzahl := 0;
- Normal;
- ClrScr;
- Hauptbild;
- LaufwerkEingeben;
- REPEAT
- FilterEingeben;
- BaumEinlesen;
- IF DateiAnzahl > 0 THEN DateienSuchen;
- DateiFenster;
- Hauptbild;
- UNTIL Esc = TRUE;
- Cursor(TRUE);
- ClrScr;
- WriteLn('Vielen Dank für den Einsatz von DOPPELT!');
- WriteLn;
- END.
-
- (* ------------------------------------------------- *)
- (* Ende von DOPPELT.PAS *)
-
-