home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* WINVSM.PAS *)
- (* *)
- (* ■ WExtVSManager: Erweitert ExtVSManager um die Fähig- *)
- (* keit, einen Bildschirmausschnitt zu speichern und *)
- (* zu laden. *)
- (* *)
- (* (c) 1991 by R.Reichert & toolbox *)
- (* ----------------------------------------------------- *)
- UNIT WinVSM;
-
- INTERFACE
-
- USES VSObj, ScrObj, ExtVSM2;
-
- TYPE
- ScreenMemPtr = VSObj.ScreenMemPtr;
- ScreenMemory = VSObj.ScreenMemory;
-
- ScreenObjPtr = ScrObj.ScreenObjPtr;
- ScreenObj = ScrObj.ScreenObj;
-
- WExtVSMPtr = ^WExtVSManager;
- WExtVSManager= OBJECT (VSMCrt)
- PROCEDURE GetPart
- (x1, y1, x2, y2 : BYTE;
- VAR MemPtr : ScreenMemPtr); VIRTUAL;
- PROCEDURE PutPart
- (x1, y1, x2, y2 : BYTE;
- ReleaseMem : BOOLEAN;
- VAR MemPtr : ScreenMemPtr); VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- (* ----------------------------------------------------- *)
- (* GetPart speichert den durch (x1/y1)-(x2/y2) gegebenen *)
- (* Bereich des AKTIVEN virtuellen Bildschirms. MemPtr *)
- (* zeigt auf den gespeicherten Bereich. *)
- (* ACHTUNG: KEINE Prüfung von x/y ! *)
- (* ----------------------------------------------------- *)
- PROCEDURE WExtVSManager.GetPart
- (x1, y1, x2, y2 : BYTE;
- VAR MemPtr : ScreenMemPtr);
- VAR NeededMem : WORD;
- xl, i : BYTE;
-
- BEGIN
- NeededMem := Succ (y2-y1) * Succ (x2-x1) * 2;
- IF MemAvail>NeededMem THEN BEGIN
- GetMem (MemPtr, NeededMem);
- xl := Succ (x2-x1);
- FOR i := y1 TO y2 DO
- Move (VScreens^[VSAkt]^.GetPartPtr (x1, i)^,
- MemPtr^[(i-y1)*xl], xl*2);
- END ELSE
- MemPtr := NIL;
- END;
-
- (* ----------------------------------------------------- *)
- (* Gegenstück zu GetPart, setzt den gespeicherten Bereich*)
- (* auf den MemPtr zeigen muss, in den AKTIVEN virtuellen *)
- (* Bildschirm in den Bereich (x1/y1)-(x2/y2). Ist Release*)
- (* Mem TRUE, so wird der Speicher, auf den MemPtr zeigt, *)
- (* freigegeben. *)
- (* ----------------------------------------------------- *)
- PROCEDURE WExtVSManager.PutPart
- (x1, y1, x2, y2 : BYTE;
- ReleaseMem : BOOLEAN;
- VAR MemPtr : ScreenMemPtr);
- VAR MemToBeRel : WORD;
- xl, i : BYTE;
- BEGIN
- IF MemPtr<>NIL THEN BEGIN
- xl := Succ (x2-x1);
- FOR i := y1 TO y2 DO
- Move (MemPtr^[(i-y1)*xl],
- VScreens^[VSAkt]^.GetPartPtr (x1, i)^, xl*2);
- MemToBeRel := Succ (y2-y1) * Succ (x2-x1) * 2;
- IF ReleaseMem THEN
- FreeMem (MemPtr, MemToBeRel);
- END;
- END;
-
- END.
- (* ----------------------------------------------------- *)
- (* Ende von WINVSM.PAS *)
- (* ----------------------------------------------------- *)