home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 22 / vsms / winvsm.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-01-04  |  3.0 KB  |  89 lines

  1. (* ----------------------------------------------------- *)
  2. (*                     WINVSM.PAS                        *)
  3. (*                                                       *)
  4. (* ■ WExtVSManager: Erweitert ExtVSManager um die Fähig- *)
  5. (*   keit, einen Bildschirmausschnitt zu speichern und   *)
  6. (*   zu laden.                                           *)
  7. (*                                                       *)
  8. (*          (c) 1991 by R.Reichert & toolbox             *)
  9. (* ----------------------------------------------------- *)
  10. UNIT WinVSM;
  11.  
  12. INTERFACE
  13.  
  14. USES VSObj, ScrObj, ExtVSM2;
  15.  
  16. TYPE
  17.   ScreenMemPtr = VSObj.ScreenMemPtr;
  18.   ScreenMemory = VSObj.ScreenMemory;
  19.  
  20.   ScreenObjPtr = ScrObj.ScreenObjPtr;
  21.   ScreenObj    = ScrObj.ScreenObj;
  22.  
  23.   WExtVSMPtr   = ^WExtVSManager;
  24.   WExtVSManager= OBJECT (VSMCrt)
  25.     PROCEDURE GetPart
  26.       (x1, y1, x2, y2 : BYTE;
  27.        VAR MemPtr : ScreenMemPtr);                 VIRTUAL;
  28.     PROCEDURE PutPart
  29.       (x1, y1, x2, y2 : BYTE;
  30.        ReleaseMem : BOOLEAN;
  31.        VAR MemPtr : ScreenMemPtr);                 VIRTUAL;
  32.   END;
  33.  
  34. IMPLEMENTATION
  35.  
  36. (* ----------------------------------------------------- *)
  37. (* GetPart speichert den durch (x1/y1)-(x2/y2) gegebenen *)
  38. (* Bereich des AKTIVEN virtuellen Bildschirms. MemPtr    *)
  39. (* zeigt auf den gespeicherten Bereich.                  *)
  40. (* ACHTUNG: KEINE Prüfung von x/y !                      *)
  41. (* ----------------------------------------------------- *)
  42. PROCEDURE WExtVSManager.GetPart
  43.             (x1, y1, x2, y2 : BYTE;
  44.              VAR MemPtr : ScreenMemPtr);
  45.   VAR NeededMem : WORD;
  46.       xl, i : BYTE;
  47.  
  48. BEGIN
  49.   NeededMem := Succ (y2-y1) * Succ (x2-x1) * 2;
  50.   IF MemAvail>NeededMem THEN BEGIN
  51.     GetMem (MemPtr, NeededMem);
  52.     xl := Succ (x2-x1);
  53.     FOR i := y1 TO y2 DO
  54.       Move (VScreens^[VSAkt]^.GetPartPtr (x1, i)^,
  55.             MemPtr^[(i-y1)*xl], xl*2);
  56.   END ELSE
  57.     MemPtr := NIL;
  58. END;
  59.  
  60. (* ----------------------------------------------------- *)
  61. (* Gegenstück zu GetPart, setzt den gespeicherten Bereich*)
  62. (* auf den MemPtr zeigen muss, in den AKTIVEN virtuellen *)
  63. (* Bildschirm in den Bereich (x1/y1)-(x2/y2). Ist Release*)
  64. (* Mem TRUE, so wird der Speicher, auf den MemPtr zeigt, *)
  65. (* freigegeben.                                          *)
  66. (* ----------------------------------------------------- *)
  67. PROCEDURE WExtVSManager.PutPart
  68.             (x1, y1, x2, y2 : BYTE;
  69.              ReleaseMem : BOOLEAN;
  70.              VAR MemPtr : ScreenMemPtr);
  71.   VAR MemToBeRel : WORD;
  72.       xl, i : BYTE;
  73. BEGIN
  74.   IF MemPtr<>NIL THEN BEGIN
  75.     xl := Succ (x2-x1);
  76.     FOR i := y1 TO y2 DO
  77.       Move (MemPtr^[(i-y1)*xl],
  78.             VScreens^[VSAkt]^.GetPartPtr (x1, i)^, xl*2);
  79.     MemToBeRel := Succ (y2-y1) * Succ (x2-x1) * 2;
  80.     IF ReleaseMem THEN
  81.       FreeMem (MemPtr, MemToBeRel);
  82.   END;
  83. END;
  84.  
  85. END.
  86. (* ----------------------------------------------------- *)
  87. (*                 Ende von WINVSM.PAS                   *)
  88. (* ----------------------------------------------------- *)
  89.