home *** CD-ROM | disk | FTP | other *** search
- unit InOut;
-
- { Version 4.2
- (c) 1993 by
- Jochen Göttler
- Im Dellbrunnen 6
- D-66954 Pirmasens
- Tel: 06331/92788
- Fax: 06331/93620
- }
-
- {$A+,B-,D-,F-,I-,L-,O-,R-,S-,V-,X-}
-
-
- interface
-
-
- uses ASCII, Crt, Dos, Numeric;
-
- const TxtBkFarbe: Byte = Black;
- ShortCutFarbe: Byte = LightRed;
- IOFarbe: Byte = Yellow;
- IOBkFarbe: Byte = Blue;
- DisableFarbe: Byte = DarkGray;
- DisableBkFarbe: Byte = TxtBkFarbe;
- LinienFarbe: Byte = Blue;
- FileBkFarbe: Byte = Blue;
- FileFarbe: Byte = LightCyan;
- ButtonDelay: Word = 300;
- MotionDelay: Word = 270;
- DoubleDelay: Byte = 18;
- {
- Verzögerung für Doppelklick
- }
- MouseButtonKey: Array[1..3] of Char = (Enter,Esc,F10);
- MouseButtonSpc: Array[1..3] of Boolean = (false,false,false);
- {
- Sonderzeichen?
- }
- MouseDbButtonKey: Array[1..3] of Char = ('-','+','0');
- MouseDbButtonSpc: Array[1..3] of Boolean = (false,false,false);
- MouseMotionKey: Array[0..3,0..8] of Char =
- ((Pos1,Hoch,BildHoch,Links,#0,Rechts,Ende,Runter,BildRunter),
- ('7','8','9','4',#0,'6','1','2','3'),
- (AltPos1,AltHoch,AltBildHoch,AltLinks,#0,
- AltRechts,AltEnde,AltRunter,AltBildRunter),
- (#0,'/',#0,'-',#0,'+',#0,'*',#0));
- {
- [0,j]: keine Maustaste gedrückt
- [1,j]: linke Maustaste gedrückt
- [2,j]: mittlere Maustaste gedrückt
- [3,j]: rechte Maustaste gedrückt
- j=0..8: links hoch, hoch, rechts hoch, links,
- [unbenzutzt], rechts, links runter,
- runter, rechts runter
- }
- MouseMotionSpc: Array[0..3,0..8] of Boolean =
- ((true,true,true,true,false,true,true,true,true),
- (false,false,false,false,false,false,false,false,false),
- (true,true,true,true,false,true,true,true,true),
- (false,false,false,false,false,false,false,false,false));
- Quiet: Boolean = false;
- Disable: Boolean = false;
- EinfgStart: Boolean = false;
- FKey: Array[F1..F10] of Char = (#0,#0,#0,#0,#0,#0,#0,#0,#0,#0);
- FKeyPressed: Array[F1..F10] of Boolean = (false,false,false,false,
- false,false,false,false,false,false);
- MaxItemNr = 16;
- MaxItemLength = 20;
- Ground: Pointer = Nil;
- {
- Bei geöffnetem Fenster <>Nil
- }
-
- type RealTypes = (Rat,RatPos,Expon,Auto);
- ItemType = Array[1..MaxItemNr] of String[MaxItemLength];
-
- var Quit, Special: Boolean;
- Cursor, DOSFarbe, WinLastColor, WinLastX, WinLastY: Byte;
- VideoStart, LastWindMin, LastWindMax: Word;
- KlickTime: LongInt;
- Leer: String;
- {
- 255 Space
- }
-
- procedure IOF;
- {
- Setzt die InOut-Farbe
- }
- procedure DAF;
- {
- Setzt Menü-Disable-Farbe; Disable:=TRUE
- }
- procedure SetNormalCursor;
- procedure SetCursorOff;
- {
- (Default)
- Globale Variable Cursor:
- 0= Cursor aus
- 1= Normaler Cursor
- 2= Voller Cursor
- 3= Rahmencursor
- }
- procedure SetFullCursor;
- procedure SetBorderCursor;
- procedure SetCursor(Cursor: Byte);
- function MouseLeft: Boolean;
- function MouseRight: Boolean;
- function MouseUp: Boolean;
- function MouseDown: Boolean;
- function MouseKey: Char;
- {
- Liefert bei Mausbewegung die in MouseMotionKey, bei Drücken der
- Maustasten die in MouseButtonKey definierten Tasten. War der
- Mausstatus unverändert, wird Chr(0) zurückgegeben.
- }
- function MouseButton: Boolean;
- procedure Beep;
- procedure Beep2;
- {
- Bei Quiet=TRUE wird der Ton unterdrückt
- }
- function WindowX1: Byte;
- function WindowY1: Byte;
- function WindowX2: Byte;
- function WindowY2: Byte;
- function WindowWidth: Byte;
- function WindowHeight: Byte;
- {
- Liefert Einstellungen des momentanen Windows
- }
- procedure Centre (s: String);
- procedure CentreLn (s: String);
- procedure ClrEolLn;
- procedure WriteClr (s: String);
- {
- Löscht bis Zeilenende
- }
- procedure WriteClrLn (s: String);
- procedure WriteClrField (s: String; l: Byte);
- procedure WriteIO (s: String; l: Byte; f: Boolean);
- {
- Ausgabe in IO-Farben bzw. Disable-Farben (Disable=TRUE)
- l: Feldlänge
- f: TRUE: rechtsbündig, FALSE: linksbündig
- }
- procedure WriteAt (x, y: Byte; s: String);
- procedure GoToXYC (x, y: Byte);
- {
- Akzeptiert auch x>80 (Sprung in nächste Zeile
- }
- procedure PutXYChar (x, y: Byte; c: Char);
- procedure PutXYColor (x, y, v, h: Byte);
- procedure PutXY (x, y: Byte; c: Char; v, h: Byte);
- function GetXYChar (x, y: Byte): Char;
- function GetXYColor (x, y: Byte): Byte;
- procedure ColorBox (x1, y1, x2, y2, v, h: Byte);
- procedure LightBox (x1, y1, x2, y2: Byte);
- procedure DarkBox (x1, y1, x2, y2: Byte);
- procedure InvertBox (x1, y1, x2, y2: Byte);
- procedure CharBox (x1, y1, x2, y2: Byte; c: Char);
- procedure Box (x1, y1, x2, y2: Byte; c: Char; v, h: Byte);
- procedure ClrBox (x1, y1, x2, y2: Byte);
- function GetLine (y, x1, x2: Byte): String;
- {
- Liefert momentanen Zeileninhalt am Bildschirm
- }
- procedure TWrite (s: String);
- procedure TWriteLn (s: String);
- {
- Schreibt Text, ohne die Farben zu verändern
- }
- procedure CWrite (s: String; v, h: Byte);
- procedure CWriteLn (s: String; v, h: Byte);
- {
- Schreibt Text mit Farben v und h
- }
- procedure XLinie (y, x1, x2, v, h: Byte; Doppelt: Boolean);
- procedure YLinie (x, y1, y2, v, h: Byte; Doppelt: Boolean);
- procedure Linie;
- {
- waagrecht, 80 Zeichen lang, Linienfarbe
- }
- procedure LinieKurz;
- {
- waagrecht, 79 Zeichen lang, Linienfarbe
- }
- procedure GetWindow (x1, y1, x2, y2: Byte; var WinObj: Pointer);
- procedure PutWindow (var WinObj: Pointer);
- procedure DisposeWindow (var WinObj: Pointer);
- procedure OpenWindow (x1, y1, x2, y2, v, h: Byte; Doppelt, Schatten:
- Boolean; Titel: String; c: Byte);
- {
- x1: Spalte linke obere Ecke
- y1: Zeile linke obere Ecke
- x2: Spalte rechte untere Ecke
- y2: Zeile rechte untere Ecke
- v: Vordergrundfarbe
- h: Hintergrundfarbe
- Doppelt: Doppelter Rahmen?
- Schatten: Schattenwurf des Fensters?
- Titel: Überschrift in erster Zeile
- c: Farbe der Überschrift
-
- Der Text im Fenster kann max. x2-x1-2 Zeichen breit und y2-y1-2
- Zeichen hoch sein.
- }
- procedure CloseWindow(Restore: Boolean);
- {
- Restore: Hintergrund wiederherstellen?
- }
- function GetKey(CursorOn: Boolean): Char;
- {
- Die Funktion liest ein Zeichen vom Tastaturpuffer.
- Falls eine Spezialtaste gedrückt wurde, wird der Sekundärcode des
- Zeichens übergeben und die globale Variable "Special" auf TRUE ge-
- setzt. Berücksichtigt auch Mausaktionen.
- Im Fall CursorOn=TRUE erscheint dabei der Cursor.
- }
- procedure JaNeinSchreiben (Antwort: Boolean);
- function JaNeinLesen (Start: Boolean): Boolean;
- {
- Die Funktion realisiert eine Ja/Nein-Abfrage (Cursor on).
- Der Programmbenutzer kann durch Drücken beliebiger Tasten zwischen
- den Antworten "Ja" und "Nein" umschalten und mit Enter die gewählte
- Antwort bestätigen. Alternativ kann "J" oder "N" gedrückt werden.
- Esc ist gleichwertig mit "N".
- Mit "Start" wird die Antwortvorgabe übermittelt, der Funktionswert
- stellt die vom Benutzer gewählte Antwort dar (TRUE=Ja, FALSE=Nein).
- }
- procedure JaNeinLesenE(var m: Boolean);
- {
- Wie JaNeinLesen, jedoch wird bei Esc der Wert von m wiederhergestellt.
- }
- procedure AlternativeChoose(a1, a2: String; l: Byte; var m: Boolean);
- {
- Wahl zwischen Eingabealternativen a1 und a2
- l: Feldlänge
- }
- procedure WarteTaste(CursorOn: Boolean);
- procedure ItemChoose (var ItemList: ItemType; l, n: Byte; var m: Byte);
- {
- ItemList: Array der Items
- l: Itemlänge
- n: ItemAnzahl
- m: Nr. des ausgewählten Items
- }
- procedure InputString (z: String; l: Byte; var e: String;
- var Scroll: ShortInt);
- {
- z: Alle bei der Eingabe zu akzeptierenden Zeichen
- Sonderzeichen:
- @l: Alle Kleinbuchstaben (ohne Umlaute)
- @L: Alle Großbuchstaben (ohne Umlaute)
- @g: Alle Klein- und Großbuchstaben mit
- ßÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ
- @n: Alle Ziffern
- @s: Sonderzeichen ^°!"²ⁿ$%&/([)]=?\'`#+*~<>|µ,;.:-_½¼πΣ√
- l: Länge der Eingabezeile
- Scroll: <>0(=0): (Keine) Scrollabfrage
-
- Verfügbare Steuertasten:
-
- Links
- Rechts
- Hoch (Falls Scroll<>0: Abbruch, Scroll=-2)
- Runter (Falls Scroll<>0: Abbruch, Scroll=2)
- Zurück
- Einfg
- Entf
- Pos1
- Ende
- StrgPos1 (Eingabezeile löschen)
- StrgEnde (Ab Cursorposition löschen)
- Enter
- Esc (Eingabe abbrechen,
- setzt globale Variable "Quit" auf TRUE)
-
- Funktionstasten werden berücksichtigt, ergeben in FKey[] definierte
- Sonderzeichen oder führen zum Eingabeabbruch, falls FKey[i] gleich
- der Funktionstaste selbst.
-
- Mausaktionen werden ebenfalls berücksichtigt.
-
- Falls EinfgStart (global) TRUE, ist zu Beginn Einfügemodus
- eingeschaltet.
- }
- procedure InputShortInt (l: Byte; f, Ein: Boolean; ug, og: ShortInt;
- var e: ShortInt);
- procedure InputInteger (l: Byte; f, Ein: Boolean; ug, og: Integer;
- var e: Integer);
- procedure InputLongInt (l: Byte; f, Ein: Boolean; ug, og: LongInt;
- var e: LongInt);
- procedure InputByte (l: Byte; f, Ein: Boolean; ug, og: Byte;
- var e: Byte);
- procedure InputWord (l: Byte; f, Ein: Boolean; ug, og: Word;
- var e: Word);
- procedure InputReal (t: RealTypes; l,d: Byte; f, Ein: Boolean;
- ug, og: Real; var e: Real);
- {
- l: Länge
- d: Dezimalstellen
- f: Rechtsbündig?
- ug, og: Unter- und Obergrenze
- ug>=og: keine Grenzen
- Ein: Grenzen einschließlich?
- }
- procedure ShortCutsAnzeigen(s, ShortCuts, ShortCutPos: String; x: Byte);
- procedure MenuChoose (s, ShortCuts, ShortCutPos: String; x: Byte;
- var y: ShortInt; Zeile, Next: Boolean;
- var Scroll, Edit: ShortInt);
- {
- s: Chr-Codes der Menüzeilennummern
- ShortCuts: Short-Cuts der Menüwahlpunkte
- ShortCutPos: Chr-Codes der Short-Cut-Positionen
- x: Spalte der linken oberen Menüecke
- y: Nummer oder Position der aktuellen Zeile
- (abh. von 'Zeile')
- Zeile: Zeilenangabe durch Nummer oder Position?
- Next: 'y' bei jedem Aufruf auf nächste Zeile setzen?
- Scroll: <>0 (=0): (keine) Scrollabfrage
- Edit: <>0 (=0): (keine) Abfrage auf Einfg/Entf
-
- Tastenfunktionen:
-
- Runter: Eine Zeile nach unten
- In letzter Zeile bei Scroll<>0: Abbruch, Scroll:=2
- Hoch: Eine Zeile nach oben
- In erster Zeile bei Scroll<>0: Abbruch, Scroll:=-2
- BildRunter: Bei Scroll<>0: Abbruch, Scroll:=4
- BildHoch: Bei Scroll<>0: Abbruch, Scroll:=-4
- Pos1: Erste Zeile
- Ende: Letzte Zeile
- Einfg: Bei Edit<>0: Abbruch, Edit=2
- Entf: Bei Edit<>0: Abbruch, Edit=-2
- Enter: Zeile anwählen, Modus 1
- Space: Zeile anwählen, Modus 2 (y<0)
- Esc: Eingabe abbrechen,
- setzt globale Variablen "Quit" auf TRUE
-
- Mausaktionen werden berücksichtigt.
- }
- procedure FileChoose (x1, y1, x2, y2: Byte;
- FileSpec: String; var FileStr: DirStr;
- Show, Save: Boolean);
- {
- x1,...,y2: Fenstergröße
- FileSpec: Filter für die Fileanzeige
- FileStr: Datei mit Pfad
- Show: =true: Inhaltsverzeichnis wird angezeigt, keine Auswahl
- Save: =true: Dateiauswahl zum Speichern (keine Existenzprüfung)
-
- Die Auswahl kann mit Esc abgebrochen werden, wodurch "Quit" auf TRUE
- gesetzt wird.
- }
- function TimeParam: LongInt;
- {
- TimeParam:=((h*60+m)*60+s)*100+hs
- }
- procedure CloseInOut;
- {
- Setzt Fensterkoordinaten zurück, stellt Cursor mit vor Aufruf von
- InOut gültigen Farben wieder her und löscht den Bildschirm
- }
-
-
- end.
-