home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DATWAHL.PAS *)
- (* Dateiwahl mit Cursortasten unter Turbo Pascal 4.0/5.x *)
- (* (c) 1988, 1989 M.Köthe, R.Geier & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM Dateiwahl;
-
- USES Crt, Dos;
-
- CONST Blau = 1; Weiss = 15; Gelb = 14;
-
- TYPE DosName = STRING[64];
- DatName = STRING[12];
-
- VAR Eingabe : DosName;
- Ausgabe : DatName;
- ErrCode : INTEGER;
-
- (* ------------------------------------------------------ *)
- PROCEDURE DateiAuswahl(Maske : DosName;
- VAR AusDatei : DatName; Fehler : INTEGER);
- VAR
- D : SearchRec;
- Chw, i : INTEGER;
- Ch : CHAR;
- Datei : ARRAY [1..100] OF STRING[12];
- Anzahl, Wahl,
- Waag, Senk,
- LastWaag, MaxSenk : INTEGER;
-
- PROCEDURE CursorOff;
- BEGIN
- GotoXY(1,4);
- Mem[$b800:$01e0] := 32; Mem[$b800:$01e1] := 0;
- END;
-
- PROCEDURE Invers;
- BEGIN
- TextColor(Blau); TextBackGround(Weiss);
- GotoXY(Waag, Senk); Write(Datei[Wahl]); CursorOff;
- TextColor(Gelb); TextBackGround(Blau);
- END;
-
- PROCEDURE Normal;
- BEGIN
- GotoXY(Waag, Senk); Write(Datei[Wahl]); CursorOff;
- END;
-
- PROCEDURE Cursor_Rechts;
- BEGIN
- Normal;
- IF Succ(Wahl) <= Anzahl THEN BEGIN
- Inc(Wahl);
- Inc(Waag, 15);
- { nächster Eintrag in gleicher Zeile }
- IF (Waag > 64) THEN BEGIN
- Waag := 4;
- Inc(Senk); { erster Eintrag in nächster Zeile }
- END;
- END ELSE BEGIN
- Wahl := 1; Waag := 4;
- Senk := 5; { erster Eintrag in erster Zeile }
- END;
- Invers;
- END;
-
- PROCEDURE Cursor_Links;
- BEGIN
- Normal;
- IF Pred(Wahl) > 0 THEN BEGIN
- Dec(Wahl);
- Dec(Waag, 15); { voriger Eintrag in gleicher Zeile }
- IF (Waag < 4) THEN BEGIN
- Waag := 64;
- Dec(Senk); { letzter Eintrag in voriger Zeile }
- END;
- END ELSE BEGIN
- Wahl := Anzahl; Waag := LastWaag;
- Senk := MaxSenk;
- { letzter Eintrag in letzter Zeile }
- END;
- Invers;
- END;
-
- PROCEDURE Cursor_auf;
- BEGIN
- Normal;
- IF (Wahl-5) >= 1 THEN BEGIN
- Dec(Wahl, 5);
- Dec(Senk); { Eintrag in der vorigen Zeile }
- END ELSE BEGIN
- IF LastWaag < Waag THEN BEGIN
- Wahl := Anzahl; Waag := LastWaag;
- Senk := MaxSenk;
- { letzter Eintrag in letzter Zeile }
- END ELSE BEGIN
- Wahl := Wahl + (MaxSenk - Senk) * 5;
- Senk := MaxSenk;
- { gleicher Eintrag in letzter Zeile }
- END;
- END;
- Invers;
- END;
-
- PROCEDURE Cursor_ab;
- BEGIN
- Normal;
- IF (Wahl+5) <= Anzahl THEN BEGIN
- Inc(Wahl, 5);
- Inc(Senk); { gleicher Eintrag in nächster Zeile }
- END ELSE BEGIN
- Wahl := Wahl - (Senk - 5) * 5;
- Senk := 5; { gleicher Eintrag in erster Zeile }
- END;
- Invers;
- END;
-
- BEGIN
- ClrScr;
- Anzahl := 0;
- Waag := 4; Senk := 5;
- FindFirst(Maske, Archive, D);
- IF (DosError <> 0) THEN BEGIN { Fehler beim Laden }
- GotoXY(20,12);
- Write(Chr(7), 'Directory oder Datei nicht gefunden');
- CursorOff; Delay(2000); ClrScr;
- Wahl := 0;
- Exit;
- END;
- WHILE (DosError = 0) AND (Anzahl < 100) DO BEGIN
- Inc(Anzahl);
- Datei[Anzahl] := D.Name;
- FindNext(D);
- END;
-
- Window(1, 1, 80, 3);
- TextBackground(Blau); TextColor(Gelb); ClrScr;
- GotoXY(33,2); Write('Dateiauswahl');
- Window(1, 1, 80, 25);
- FOR i := 1 TO Anzahl DO BEGIN
- GotoXY(Waag, Senk);
- Write(Datei[i]);
- Inc(Waag, 15);
- IF (Waag > 66) THEN BEGIN
- Waag := 4; Inc(Senk);
- END;
- MaxSenk := Senk; LastWaag := Waag - 15;
- END;
- Waag := 4; Senk := 5; Wahl := 1; Invers;
-
- REPEAT
- Ch := ReadKey;
- IF (Ch = #0) THEN BEGIN
- Ch := ReadKey; Chw := Ord(Ch);
- CASE Chw OF
- 77 : Cursor_rechts;
- 75 : Cursor_links;
- 80 : Cursor_ab;
- 72 : Cursor_auf;
- END;
- END;
- UNTIL (Ch = #13) OR (Ch = #27);
- IF (Ch = #13) THEN AusDatei := Datei[Wahl]
- ELSE AusDatei := 'Auswahl abgebrochen';
- Fehler := DosError;
- ClrScr;
- END;
-
- BEGIN
- TextBackGround(Blau); TextColor(Gelb); ClrScr;
- WriteLn('Bitte die Suchmaske eingeben: ');
- ReadLn(Eingabe);
- DateiAuswahl(Eingabe, Ausgabe, ErrCode);
- TextBackGround(Weiss); TextColor(Blau); ClrScr;
- Write('Die gewählte Datei ist: ');
- WriteLn(Ausgabe);
- Write('DOS-Fehlercode: ');
- WriteLn(ErrCode);
- TextBackGround(Blau); TextColor(Gelb);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DATWAHL.PAS *)