home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* READUNIT.PAS *)
- (* Definiert die Prozedur ExtraRead zum Lesen einer *)
- (* Zeichenkette mit Editiermöglichkeit und Speicherung *)
- (* der zuletzt gedrückten Taste. *)
- (* (c) 1990 Serge Schiltz & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT ReadUnit;
-
- INTERFACE
-
- TYPE
- AllChar = 0..511;
-
- { Typ der zuletzt gedrueckten Taste - ASCII-Code bzw. }
- { ASCII-Code + 256 bei "erweiterten" Tasten (siehe }
- { Tabelle C.2 im Referenzbuch von Turbo-Pascal 5.0) }
-
- PROCEDURE ExtraRead (VAR Entry : STRING;
- EntryLength : BYTE;
- VAR LastChar : AllChar);
-
- { Entry : zu lesende Zeichenkette }
- { EntryLength : maximale Laenge der Zeichenkette }
- { LastChar : letzte gedrückte Taste }
-
- IMPLEMENTATION
-
- USES Crt;
- { Bei Turbo Pascal 4.0 muss die USES-Anweisung unter }
- { INTERFACE stehen. }
-
- PROCEDURE ExtraRead (VAR Entry : STRING;
- EntryLength : BYTE;
- VAR LastChar : AllChar);
- VAR
- Ch : CHAR;
- CurPoint : BYTE;
- Insert : BOOLEAN;
- x, y : BYTE;
- Exit : BOOLEAN;
- Counter : BYTE;
- BEGIN
- x := WhereX;
- y := WhereY;
- Entry := '';
- CurPoint := 0;
- Insert := TRUE;
- Exit := FALSE;
- REPEAT
- Ch := ReadKey;
- CASE Ch OF
- #1..
- #7,
- #9..
- #31 : BEGIN { Crtl- }
- LastChar := Ord(Ch); { Zeichen, }
- Exit := TRUE { Tab, Esc... }
- END;
- #32..
- #255 : BEGIN { Buchstabe }
- IF (Length(Entry) < EntryLength)
- OR NOT Insert THEN BEGIN
- IF CurPoint = Length(Entry) THEN BEGIN
- IF Length(Entry) < EntryLength
- THEN BEGIN
- Entry := Entry + Ch;
- GotoXY(x + CurPoint, y);
- Inc(CurPoint);
- Write(Ch)
- END;
- END ELSE BEGIN
- IF Insert THEN BEGIN
- Entry := Entry + #32;
- FOR Counter := Length(Entry)-1
- DOWNTO CurPoint+1 DO
- Entry[Counter+1] := Entry[Counter];
- END;
- Inc(CurPoint);
- Entry[CurPoint] := Ch;
- GotoXY(x,y);
- Write(Entry);
- GotoXY(x + CurPoint, y);
- END;
- END;
- END;
- #08 : BEGIN { Backspace }
- IF CurPoint <> 0 THEN BEGIN
- FOR Counter := CurPoint
- TO Length(Entry)-1 DO
- Entry[Counter] := Entry[Counter+1];
- Entry := Copy(Entry,1,Length(Entry)-1);
- Dec(CurPoint);
- GotoXY(x,y);
- Write(Entry,' ');
- GotoXY(x + CurPoint, y);
- END;
- END;
- #0 : BEGIN { erweiterte Taste }
- Ch := ReadKey;
- CASE Ch OF
- #0..
- #74,
- #76,
- #78..
- #81,
- #84..
- #255 : BEGIN
- LastChar := Ord(Ch) + 256;
- Exit := TRUE;
- END;
- #82 : Insert := NOT Insert;
- #83 : BEGIN
- IF CurPoint <> Length(Entry)
- THEN BEGIN
- FOR Counter := CurPoint+1 TO
- Length(Entry)-1 DO
- Entry[Counter] :=
- Entry[Counter+1];
- Entry := Copy(Entry,1,
- Length(Entry)-1);
- GotoXY(x,y);
- Write(Entry,' ');
- GotoXY(x+CurPoint,y);
- END;
- END;
- #75 : BEGIN { Links-Pfeil }
- IF CurPoint <> 0 THEN BEGIN
- Dec(CurPoint);
- GotoXY(x + CurPoint, y);
- END;
- END;
- #77 : BEGIN { Rechts-Pfeil }
- IF CurPoint <> Length(Entry)
- THEN BEGIN
- Inc(CurPoint);
- GotoXY(x + CurPoint, y);
- END;
- END;
- END;
- END;
- END;
- UNTIL Exit = TRUE;
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von READUNIT.PAS *)