home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* EXTVSM.PAS *)
- (* "ExtVSManager" erweitert das Objekt "VSManagerObj" um *)
- (* einige Methoden wie z.B. das Löschen oder Kopieren *)
- (* eines beliebigen Bildschirmausschnitts. *)
- (* *)
- (* (c) 1991 Raimond Reichert & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT ExtVSM;
-
- INTERFACE
-
- USES RootVSM, VSObj;
-
- CONST
- Screen = 0; { Konstante um den Bildschirm anzusprechen }
-
- TYPE
- VirtualScreenPtr = VSObj.VirtualScreenPtr;
- VirtualScreen = VSObj.VirtualScreen;
- ExtVSMPtr = ^ExtVSManager;
- ExtVSManager =
- OBJECT(VSManagerObj)
-
- (*------------------- Methoden --------------------*)
- PROCEDURE Clear;
- PROCEDURE ClearPart(x1, y1, x2, y2 : BYTE); VIRTUAL;
- PROCEDURE Fill(Chr : CHAR; Attr : BYTE); VIRTUAL;
- PROCEDURE FillPart
- (x1, y1, x2, y2, Attr : BYTE; Chr : CHAR); VIRTUAL;
- PROCEDURE FillPartAttr
- (x1, y1, x2, y2, Attr : BYTE); VIRTUAL;
- PROCEDURE WriteChr
- (x, y, Attr : BYTE; Chr : CHAR); VIRTUAL;
- PROCEDURE WriteStr
- (x, y, Attr : BYTE; Str : STRING); VIRTUAL;
- PROCEDURE WriteAttr(x, y, Attr : BYTE); VIRTUAL;
-
- PROCEDURE CopyVS(Source, Dest : BYTE); VIRTUAL;
- PROCEDURE CopyPart
- (x1, y1, x2, y2,
- ToX, ToY, Source, Dest : BYTE); VIRTUAL;
- PROCEDURE CopyToScr; VIRTUAL;
- PROCEDURE CopyPartToScr
- (x1, y1, x2, y2, ToX, ToY : BYTE); VIRTUAL;
- END;
-
-
- IMPLEMENTATION
-
- (* ----------------------------------------------------- *)
- (* Die folgenden Methoden dienen zum Bearbeiten des *)
- (* aktuellen virtuellen Bildschirms. *)
- (* ----------------------------------------------------- *)
-
- PROCEDURE ExtVSManager.Clear;
- BEGIN
- VScreens^[VSAkt]^.Clear;
- END;
-
- PROCEDURE ExtVSManager.ClearPart(x1, y1, x2, y2 : BYTE);
- BEGIN
- VScreens^[VSAkt]^.ClearPart(x1, y1, x2, y2);
- END;
-
- PROCEDURE ExtVSManager.Fill(Chr : CHAR; Attr: BYTE);
- BEGIN
- VScreens^[VSAkt]^.Fill(Chr, Attr);
- END;
-
- PROCEDURE ExtVSManager.FillPart
- (x1, y1, x2, y2, Attr : BYTE; Chr : CHAR);
- BEGIN
- VScreens^[VSAkt]^.FillPart(x1, y1, x2, y2, Attr, Chr);
- END;
-
- PROCEDURE ExtVSManager.FillPartAttr
- (x1, y1, x2, y2, Attr : BYTE);
- BEGIN
- VScreens^[VSAkt]^.FillPartAttr(x1, y1, x2, y2, Attr);
- END;
-
- PROCEDURE ExtVSManager.WriteChr
- (x, y, Attr : BYTE; Chr : CHAR);
- BEGIN
- VScreens^[VSAkt]^.WriteChr(x, y, Attr, Chr);
- END;
-
- PROCEDURE ExtVSManager.WriteStr
- (x, y, Attr : BYTE; Str : STRING);
- BEGIN
- VScreens^[VSAkt]^.WriteStr(x, y, Attr, Str);
- END;
-
- PROCEDURE ExtVSManager.WriteAttr
- (x, y : BYTE; Attr : BYTE);
- BEGIN
- VScreens^[VSAkt]^.WriteAttr(x, y, Attr)
- END;
-
- PROCEDURE ExtVsManager.CopyVS(Source, Dest : BYTE);
-
- { Kopiert ganzen oder "richtigen" Bildschirm mit der }
- { Nummer "Source" in den mit Nummer "Dest", wobei die }
- { Größe des Ziel-Bildschirms berücksichtigt wird. }
-
- BEGIN
- IF (Source >= 0) AND (Source < VSNum) AND
- (Dest >= 0) AND (Dest < VSNum) THEN
- Move(VScreens^[Source]^.GetPartPtr(1,1)^,
- VScreens^[Dest]^.GetPartPtr(1,1)^,
- VScreens^[Dest]^.GetXLength *
- VScreens^[Dest]^.GetYLength * 2)
- ELSE
- SetReturnCode(VSInvalidNr);
- END;
-
- PROCEDURE ExtVSManager.CopyPart
- (x1, y1, x2, y2, ToX, ToY, Source, Dest : BYTE);
-
- { Kopiert Ausschnitt (x1/y1)-(x2/y2) von "Source" nach }
- { (ToX/ToY) in "Dest". }
-
- VAR
- i : BYTE;
- BEGIN
- IF (Source >= 0) AND (Source < VSNum) AND
- (Dest >= 0) AND (Dest < VSNum) THEN BEGIN
- IF VScreens^[Source]^.XYInVSMem(x1, y1) AND
- VScreens^[Source]^.XYInVSMem(x2, y2) AND
- VScreens^[Dest]^.XYInVSMem(ToX, ToY) AND
- VScreens^[Dest]^.XYInVSMem
- (ToX+(x2-x1), ToY+(y2-y1)) THEN
- FOR i := y1 TO y2 DO
- Move(VScreens^[Source]^.GetPartPtr(x1, i)^,
- VScreens^[Dest]^.GetPartPtr
- (ToX, ToY+i-y1)^, Succ(x2-x1)*2)
- ELSE
- SetReturnCode(VSXYInvalid);
- END ELSE
- SetReturnCode(VSInvalidNr);
- END;
-
- PROCEDURE ExtVSManager.CopyToScr;
- { Der aktuelle wird in den "richtigen" Bildschirm }
- { kopiert. }
- BEGIN
- IF VSAkt <> Screen THEN CopyVS(VSAkt, Screen);
- END;
-
- PROCEDURE ExtVSManager.CopyPartToScr
- (x1, y1, x2, y2, ToX, ToY : BYTE);
- { Kopiert Ausschnitt des aktuellen in "richtigen" }
- { Bildschirm. }
- BEGIN
- IF VSAkt <> Screen THEN
- CopyPart(x1, y1, x2, y2, ToX, ToY, VSAkt, Screen);
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von EXTVSM.PAS *)