home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* EXTVSM2.PAS *)
- (* Das Objekt VSMCrt stellt Methoden und Variablen *)
- (* zur Verfügung, die es erlauben, analog zur Unit *)
- (* Crt zu arbeiten (also Write, Writeln, TextAttr *)
- (* etc). *)
- (* (c) 1991 Raimond Reichert & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT ExtVSM2;
-
- INTERFACE
-
- USES
- ExtVSM, (* toolbox 2'91 und aktuelle Databox *)
- Crt;
-
- CONST
- Screen = 0; (* Konstante für Bildschirm *)
-
- TYPE
- VSMCrtPtr = ^VSMCrt;
- VSMCrt = OBJECT (ExtVSManager)
-
- TA, NV, TextCol, TextBack, x, y : BYTE;
- WinMin, WinMax : WORD;
-
- CONSTRUCTOR Init(XL, YL : BYTE);
- PROCEDURE ClrScr; VIRTUAL;
- PROCEDURE ClrEol; VIRTUAL;
- PROCEDURE DelLine; VIRTUAL;
- PROCEDURE InsLine; VIRTUAL;
- PROCEDURE HighVideo; VIRTUAL;
- PROCEDURE NormVideo; VIRTUAL;
- PROCEDURE LowVideo; VIRTUAL;
- PROCEDURE Delay(Ms : WORD); VIRTUAL;
- PROCEDURE Sound(Hz : WORD); VIRTUAL;
- PROCEDURE NoSound; VIRTUAL;
- PROCEDURE Window(x1, y1, x2, y2 : BYTE); VIRTUAL;
- PROCEDURE Write(Str : STRING); VIRTUAL;
- PROCEDURE WriteLn(Str : STRING); VIRTUAL;
- PROCEDURE GotoXY(NewX, NewY : BYTE); VIRTUAL;
- PROCEDURE SetTextAttr(NewTA : BYTE); VIRTUAL;
- PROCEDURE SetTextColor(TC : BYTE); VIRTUAL;
- PROCEDURE SetTextBackGround(TB : BYTE); VIRTUAL;
- PROCEDURE SetCheckBreak(CB : BOOLEAN); VIRTUAL;
-
- (* --- intern: -------------------------------------- *)
- PROCEDURE ScrollUp; VIRTUAL;
- (* -------------------------------------------------- *)
-
- FUNCTION TextAttr : BYTE; VIRTUAL;
- FUNCTION TextColor : BYTE; VIRTUAL;
- FUNCTION TextBackGround : BYTE; VIRTUAL;
- FUNCTION WhereX : BYTE; VIRTUAL;
- FUNCTION WhereY : BYTE; VIRTUAL;
- FUNCTION KeyPressed : BOOLEAN; VIRTUAL;
- FUNCTION ReadKey : CHAR; VIRTUAL;
- FUNCTION CheckBreak : BOOLEAN; VIRTUAL;
- FUNCTION GetWinMinX : BYTE; VIRTUAL;
- FUNCTION GetWinMinY : BYTE; VIRTUAL;
- FUNCTION GetWinMaxX : BYTE; VIRTUAL;
- FUNCTION GetWinMaxY : BYTE; VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- CONSTRUCTOR VSMCrt.Init(XL, YL : BYTE);
- BEGIN
- ExtVSManager.Init(XL, YL);
- TextCol := LightGray;
- TextBack := Black;
- SetTextAttr(LightGray);
- Window(1, 1, GetXLength, GetYLength);
- GotoXY(Crt.WhereX, Crt.WhereY);
- NV := Hi(VScreens^[VSAkt]^.VSMem^[Pred(y) *
- GetXLength * 2 + x * 2]);
- { Attribut an Cursorposition speichern (für NormVideo) }
- END;
-
- PROCEDURE VSMCrt.ClrScr;
- BEGIN
- FillPart(Lo(WinMin), Hi(WinMin),
- Lo(WinMax), Hi(WinMax), TA, ' ');
- GotoXY(1, 1);
- END;
-
- PROCEDURE VSMCrt.ClrEol;
- BEGIN
- FillPart(x, y, Lo(WinMax), y, TA, ' ');
- END;
-
- PROCEDURE VSMCrt.DelLine;
- VAR
- i : BYTE;
- BEGIN
- FOR i := (Hi(WinMin) + y) TO Hi(WinMax) DO
- CopyPart(Lo(WinMin), i, Lo(WinMax), i,
- Lo(WinMin), Pred(i), VSAkt, VSAkt);
- FillPart(Lo(WinMin), Hi(WinMax),
- Lo(WinMax), Hi(WinMax), TA, ' ');
- END;
-
- PROCEDURE VSMCrt.InsLine;
- VAR
- i : BYTE;
- BEGIN
- FOR i := Hi(WinMax) DOWNTO Pred(Hi(WinMin) + y) DO
- CopyPart(Lo(WinMin), Pred(i), Lo(WinMax), Pred(i),
- Lo(WinMin), i, VSAkt, VSAkt);
- FillPart (Lo(WinMin), i, Lo(WinMax), i, TA, ' ');
- END;
-
- PROCEDURE VSMCrt.HighVideo;
- BEGIN
- SetTextColor(White);
- END;
-
- PROCEDURE VSMCrt.NormVideo;
- BEGIN
- SetTextAttr(NV);
- END;
-
- PROCEDURE VSMCrt.LowVideo;
- BEGIN
- SetTextColor(LightGray);
- END;
-
- PROCEDURE VSMCrt.Delay(Ms : WORD);
- BEGIN
- Crt.Delay(Ms);
- END;
-
- PROCEDURE VSMCrt.Sound(Hz : WORD);
- BEGIN
- Crt.Sound(Hz);
- END;
-
- PROCEDURE VSMCrt.NoSound;
- BEGIN
- Crt.NoSound;
- END;
-
- PROCEDURE VSMCrt.Window(x1, y1, x2, y2 : BYTE);
- VAR
- h : BYTE;
- BEGIN
- IF x1 < 1 THEN x1 := 1;
- IF y1 < 1 THEN y1 := 1;
- IF x2 > GetXLength THEN x2 := GetXLength;
- IF y2 > GetYLength THEN y2 := GetYLength;
- IF NOT (x1 <= x2) THEN BEGIN
- h := x1; x1 := x2; x2 := h;
- END;
- IF NOT (y1 <= y2) THEN BEGIN
- h := y1; y1 := y2; y2 := h;
- END;
- WinMin := x1 + y1 SHL 8;
- WinMax := x2 + y2 SHL 8;
- GotoXY(1, 1);
- END;
-
- PROCEDURE VSMCrt.Write(Str : STRING);
- (* Der zu schreibende String wird, falls nötig, aufge- *)
- (* teilt und die einzelnen Teilstrings ausgegeben. *)
- VAR
- s1 : STRING;
- BEGIN
- REPEAT
- s1 := Copy(Str, 1, Succ(Succ(Lo(WinMax)-
- Lo(WinMin) - x)));
- Delete(Str, 1, Length(S1));
- WriteStr(Pred(Lo(WinMin) + x),
- Pred(Hi(WinMin) + y), TA, S1);
- IF Str <> '' THEN GotoXY(1, Succ(y));
- UNTIL Str = '';
- GotoXY(x + Length(S1), y);
- END;
-
- PROCEDURE VSMCrt.WriteLn(Str : STRING);
- BEGIN
- Write(Str);
- GotoXY(1, Succ(y));
- END;
-
- PROCEDURE VSMCrt.GotoXY(NewX, NewY : BYTE);
- VAR
- i, WinXL, WinYL : BYTE;
- BEGIN
- WinXL := Succ(Lo(WinMax) - Lo(WinMin));
- WinYL := Succ(Hi(WinMax) - Hi(WinMin));
-
- (* --------------- Neues X berechnen ---------------- *)
- IF (NewX >= 1) AND (NewX <= WinXL) THEN
- x := NewX
- ELSE IF NewX < 1 THEN
- x := 1
- ELSE BEGIN
- x := NewX MOD WinXL;
- IF x = 0 THEN BEGIN
- x := WinXL;
- Inc(NewY, Pred(NewX DIV WinXL));
- END ELSE
- Inc(NewY, NewX DIV WinXL);
- END;
- (* --------------- Neues Y berechnen ---------------- *)
- IF (NewY >= 1) AND (NewY <= WinYL) THEN
- y := NewY
- ELSE IF NewY < 1 THEN
- y := 1
- ELSE BEGIN
- ScrollUp;
- y := WinYL;
- END;
- (* --------------- Cursor setzen -------------------- *)
- IF VSAkt = Screen THEN
- Crt.GotoXY(Pred(Lo(WinMin)+x), Pred(Hi(WinMin)+y));
- END;
-
- PROCEDURE VSMCrt.SetTextAttr(NewTA : BYTE);
- BEGIN
- TA := NewTA;
- END;
-
- PROCEDURE VSMCrt.SetTextColor(TC : BYTE);
- BEGIN
- TextCol := TC;
- SetTextAttr(TextCol MOD 16 + (TextBack MOD 8) SHL 4);
- END;
-
- PROCEDURE VSMCrt.SetTextBackGround (TB : BYTE);
- BEGIN
- Textback := TB;
- SetTextAttr(TextCol MOD 16 + (TextBack MOD 8) SHL 4);
- END;
-
- PROCEDURE VSMCrt.SetCheckBreak(CB : BOOLEAN);
- BEGIN
- Crt.CheckBreak := CB;
- END;
-
- PROCEDURE VSMCrt.ScrollUp;
- VAR
- i : BYTE;
- BEGIN
- FOR i := Succ(Hi(WinMin)) TO Hi(WinMax) DO
- CopyPart(Lo(WinMin), i, Lo(WinMax), i,
- Lo(WinMin), Pred(i), VSAkt, VSAkt);
- FillPart(Lo(WinMin), Hi(WinMax),
- Lo(WinMax), Hi(WinMax), TA, ' ');
- END;
-
- FUNCTION VSMCrt.TextAttr : BYTE;
- BEGIN
- TextAttr := TA;
- END;
-
- FUNCTION VSMCrt.TextColor : BYTE;
- BEGIN
- TextColor := TextCol;
- END;
-
- FUNCTION VSMCrt.TextBackGround : BYTE;
- BEGIN
- TextBackGround := TextBack;
- END;
-
- FUNCTION VSMCrt.WhereX : BYTE;
- BEGIN
- WhereX := x;
- END;
-
- FUNCTION VSMCrt.WhereY : BYTE;
- BEGIN
- WhereY := y;
- END;
-
- FUNCTION VSMCrt.KeyPressed : BOOLEAN;
- BEGIN
- KeyPressed := Crt.KeyPressed
- END;
-
- FUNCTION VSMCrt.ReadKey : CHAR;
- BEGIN
- ReadKey := Crt.ReadKey;
- END;
-
- FUNCTION VSMCrt.CheckBreak : BOOLEAN;
- BEGIN
- CheckBreak := Crt.CheckBreak;
- END;
-
- FUNCTION VSMCrt.GetWinMinX : BYTE;
- BEGIN
- GetWinMinX := Lo(WinMin);
- END;
-
- FUNCTION VSMCrt.GetWinMinY : BYTE;
- BEGIN
- GetWinMinY := Hi(WinMin);
- END;
-
- FUNCTION VSMCrt.GetWinMaxX : BYTE;
- BEGIN
- GetWinMaxX := Lo(WinMax);
- END;
-
- FUNCTION VSMCrt.GetWinMaxY : BYTE;
- BEGIN
- GetWinMaxY := Hi(WinMax);
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von EXTVSM2.PAS *)