Moin,
ich habe damals ja viel auf dem Sirius programmiert - hier mal die verschiedenden Funktionen die Sirius1-Spezifisch waren Natürlich gab es nochmal eine andere Library mit den gleichen Routinen für den IBM-PC. Die letzte Änderung am Sourcecode war übrigens am 07.06.90:
VicLib:
(* Constanten f}r deutsche Sonderzeichen *)
GrAe = '[';
GrOe = '\';
GrUe = ']';
ae = '{';
oe = '|';
ue = '}';
sz = '~';
VAR
ScrNo : BYTE; (* Muss hier definiert werden, da sonst kein Startwert gegeben werden kann *)
ScreenAbs : ARRAY[1..2000] OF WORD ABSOLUTE $F000:0;
ScreenStore : ARRAY[1..2000,1..4] OF WORD;
XPosAlt,
YPosAlt,
XPosUntenAlt,
YPosUntenAlt : ARRAY[0..4] OF BYTE;
i : INTEGER;
PROCEDURE GetTaste(VAR Taste :CHAR; VAR FTaste :BYTE;
VAR Aktion :BOOLEAN; XPos, YPos :BYTE);
(* Holt ein Zeichen von der Tastatur und }bersetzt dieses in die
FTasten-Nummer *)
PROCEDURE Display(ZKette :WorkString; XAbs, YAbs, Attr :BYTE);
(* Schreibt den Text, absolut addressiert, in den Bildschirm-Speicher
Getestet + OK: 12.01.89 *)
PROCEDURE Fenster(XPos, YPos, XPosUnten, YPosUnten :BYTE; Header :WorkString);
(* Getestet + OK 31.01.89 *)
PROCEDURE SchirmSichern;
(* Sichert den Bildschirm *)
PROCEDURE AlterSchirm;
(* ]berschreibt den Bildschirm mit dem
gesichertem alten Bildschirminhalt *)
PROCEDURE ClrFullScreen;
(* L|scht den gesamten Bildschirm, bei Sirius 1 reicht das normale CLS
nicht, da der interne Pointer auf den Anfang der ersten Bildschirm-
Seite gestellt werden muss
Getestet + OK 30.01.89 *)
PROCEDURE ClrScr;
PROCEDURE DrawFrame(XPos, YPos, XPosUnten, YPosUnten,
FrameTyp :BYTE; Header :WorkString);
(* Zeichnet einen Rahmen im angegebenen FrameTyp und gibt einen Header
aus, wenn dieser mit angegeben ist. Muss mit in dieser Libary sitzen,
da hier sonst gegenseitige Aufrufe von OutLib und VicLib entstehen.
Getestet + OK 30.01.89 *)
PROCEDURE Cursor(CursorTyp: BYTE);
(* Ver{ndert den Cursor
0 = Block-Cursor
1 = Strich-Cursor
2 = Hidden Cursor
Getestet + OK 30.01.89 *)
PROCEDURE Printer(PrintNo :BYTE);
(* Schaltet den Drucker }ber die entsprechende Schnittstelle ein,
diser Drucker wird dann von den Druckroutinen benutzt *)
UNCTION KeyPressed: BOOLEAN;
(* Gibt TRUE und FALSE aus, l|scht jedoch nicht den Buffer
Getestet + OK: 11.01.89 *)
BEGIN
Regs.AH := $0B;
Intr($21,Regs);
IF Regs.AL = $FF THEN KeyPressed := True ELSE
KeyPressed := False;
END;
FUNCTION ReadKey: CHAR;
(* Wartet auf einen Tastendruck und l|scht den Buffer
Getestet + OK: 11.01.89 *)
BEGIN
Regs.AH := $07;
Intr($21,Regs);
ReadKey := Chr(Regs.AL);
END;
PROCEDURE GotoXY(XPos,YPos: ShortInt);
(* Geht zur Position X, Y; wobei zuerst der Spaltenwert (1-80) und dann
der Zeilenwert (1-24) angegeben wird. ShortInt wurde definiert, um den
Cursor auch ausserhalb des Fensters setzen zu k|nnen.
Getestet + OK: 02.06.88 *)
BEGIN
XPos := XPos +Lo(WindMin);
YPos := YPos +Hi(WindMin);
Write(#27,'Y',Chr(31+YPos),Chr(31+XPos));
END;
PROCEDURE Window(XPos,YPos,XPosUnten,YPosUnten: BYTE);
(* Definiert den angegebenen Bereich des Bildschirm als Textfenster.
Die Positionen sind allesamt absolute Endpositionen. Danach wird der
Cursor auf die Position 1,1 des Fensters gesetzt. S{mtliche Routinen,
die sich auf eine Bildschirm-Position beziehen, beziehen sich dann auf
die Position 1,1 des Fensters
Getestet + OK: 11.01.89 *)
PROCEDURE Delay(DelayTime: WORD);
PROCEDURE SysTime(VAR Zeit :ZeitRec);
(* Holt die System-Zeit *)
Gruss
Hans