home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 02 / oop / extvsm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-11-08  |  5.1 KB  |  163 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      EXTVSM.PAS                        *)
  3. (*  "ExtVSManager" erweitert das Objekt "VSManagerObj" um *)
  4. (*  einige Methoden wie z.B. das Löschen oder Kopieren    *)
  5. (*  eines beliebigen Bildschirmausschnitts.               *)
  6. (*                                                        *)
  7. (*        (c) 1991  Raimond Reichert & TOOLBOX            *)
  8. (* ------------------------------------------------------ *)
  9. UNIT ExtVSM;
  10.  
  11. INTERFACE
  12.  
  13. USES RootVSM, VSObj;
  14.  
  15. CONST
  16.   Screen = 0;   { Konstante um den Bildschirm anzusprechen }
  17.  
  18. TYPE
  19.   VirtualScreenPtr = VSObj.VirtualScreenPtr;
  20.   VirtualScreen    = VSObj.VirtualScreen;
  21.   ExtVSMPtr        = ^ExtVSManager;
  22.   ExtVSManager     =
  23.     OBJECT(VSManagerObj)
  24.  
  25.      (*------------------- Methoden --------------------*)
  26.       PROCEDURE Clear;
  27.       PROCEDURE ClearPart(x1, y1, x2, y2 : BYTE);  VIRTUAL;
  28.       PROCEDURE Fill(Chr : CHAR; Attr : BYTE);     VIRTUAL;
  29.       PROCEDURE FillPart
  30.         (x1, y1, x2, y2, Attr : BYTE; Chr : CHAR); VIRTUAL;
  31.       PROCEDURE FillPartAttr
  32.         (x1, y1, x2, y2, Attr : BYTE);             VIRTUAL;
  33.       PROCEDURE WriteChr
  34.         (x, y, Attr : BYTE; Chr : CHAR);           VIRTUAL;
  35.       PROCEDURE WriteStr
  36.         (x, y, Attr : BYTE; Str : STRING);         VIRTUAL;
  37.       PROCEDURE WriteAttr(x, y, Attr : BYTE);      VIRTUAL;
  38.  
  39.       PROCEDURE CopyVS(Source, Dest : BYTE);       VIRTUAL;
  40.       PROCEDURE CopyPart
  41.         (x1, y1, x2, y2,
  42.          ToX, ToY, Source, Dest : BYTE);           VIRTUAL;
  43.       PROCEDURE CopyToScr;                         VIRTUAL;
  44.       PROCEDURE CopyPartToScr
  45.         (x1, y1, x2, y2, ToX, ToY : BYTE);         VIRTUAL;
  46.     END;
  47.  
  48.  
  49. IMPLEMENTATION
  50.  
  51. (* ----------------------------------------------------- *)
  52. (*  Die folgenden Methoden dienen zum Bearbeiten des     *)
  53. (*  aktuellen virtuellen Bildschirms.                    *)
  54. (* ----------------------------------------------------- *)
  55.  
  56.   PROCEDURE ExtVSManager.Clear;
  57.   BEGIN
  58.     VScreens^[VSAkt]^.Clear;
  59.   END;
  60.  
  61.   PROCEDURE ExtVSManager.ClearPart(x1, y1, x2, y2 : BYTE);
  62.   BEGIN
  63.     VScreens^[VSAkt]^.ClearPart(x1, y1, x2, y2);
  64.   END;
  65.  
  66.   PROCEDURE ExtVSManager.Fill(Chr : CHAR; Attr: BYTE);
  67.   BEGIN
  68.     VScreens^[VSAkt]^.Fill(Chr, Attr);
  69.   END;
  70.  
  71.   PROCEDURE ExtVSManager.FillPart
  72.             (x1, y1, x2, y2, Attr : BYTE; Chr : CHAR);
  73.   BEGIN
  74.     VScreens^[VSAkt]^.FillPart(x1, y1, x2, y2, Attr, Chr);
  75.   END;
  76.  
  77.   PROCEDURE ExtVSManager.FillPartAttr
  78.              (x1, y1, x2, y2, Attr : BYTE);
  79.   BEGIN
  80.     VScreens^[VSAkt]^.FillPartAttr(x1, y1, x2, y2, Attr);
  81.   END;
  82.  
  83.   PROCEDURE ExtVSManager.WriteChr
  84.              (x, y, Attr : BYTE; Chr : CHAR);
  85.   BEGIN
  86.     VScreens^[VSAkt]^.WriteChr(x, y, Attr, Chr);
  87.   END;
  88.  
  89.   PROCEDURE ExtVSManager.WriteStr
  90.              (x, y, Attr : BYTE; Str : STRING);
  91.   BEGIN
  92.     VScreens^[VSAkt]^.WriteStr(x, y, Attr, Str);
  93.   END;
  94.  
  95.   PROCEDURE ExtVSManager.WriteAttr
  96.              (x, y : BYTE; Attr : BYTE);
  97.   BEGIN
  98.     VScreens^[VSAkt]^.WriteAttr(x, y, Attr)
  99.   END;
  100.  
  101.   PROCEDURE ExtVsManager.CopyVS(Source, Dest : BYTE);
  102.  
  103.   {  Kopiert ganzen oder "richtigen" Bildschirm mit der    }
  104.   {  Nummer "Source" in den mit Nummer "Dest", wobei die   }
  105.   {  Größe des Ziel-Bildschirms berücksichtigt wird.       }
  106.  
  107.   BEGIN
  108.     IF (Source >= 0) AND (Source < VSNum) AND
  109.        (Dest >= 0) AND (Dest < VSNum) THEN
  110.       Move(VScreens^[Source]^.GetPartPtr(1,1)^,
  111.            VScreens^[Dest]^.GetPartPtr(1,1)^,
  112.            VScreens^[Dest]^.GetXLength *
  113.            VScreens^[Dest]^.GetYLength * 2)
  114.     ELSE
  115.       SetReturnCode(VSInvalidNr);
  116.   END;
  117.  
  118.   PROCEDURE ExtVSManager.CopyPart
  119.             (x1, y1, x2, y2, ToX, ToY, Source, Dest : BYTE);
  120.  
  121.   { Kopiert Ausschnitt (x1/y1)-(x2/y2) von "Source" nach   }
  122.   { (ToX/ToY) in "Dest".                                   }
  123.  
  124.   VAR
  125.     i : BYTE;
  126.   BEGIN
  127.     IF (Source >= 0) AND (Source < VSNum) AND
  128.        (Dest >= 0) AND (Dest < VSNum) THEN BEGIN
  129.       IF VScreens^[Source]^.XYInVSMem(x1, y1) AND
  130.          VScreens^[Source]^.XYInVSMem(x2, y2) AND
  131.          VScreens^[Dest]^.XYInVSMem(ToX, ToY) AND
  132.          VScreens^[Dest]^.XYInVSMem
  133.           (ToX+(x2-x1), ToY+(y2-y1)) THEN
  134.         FOR i := y1 TO y2 DO
  135.           Move(VScreens^[Source]^.GetPartPtr(x1, i)^,
  136.                 VScreens^[Dest]^.GetPartPtr
  137.                  (ToX, ToY+i-y1)^, Succ(x2-x1)*2)
  138.       ELSE
  139.         SetReturnCode(VSXYInvalid);
  140.     END ELSE
  141.       SetReturnCode(VSInvalidNr);
  142.   END;
  143.  
  144.   PROCEDURE ExtVSManager.CopyToScr;
  145.   {  Der aktuelle wird in den "richtigen" Bildschirm       }
  146.   {  kopiert.                                              }
  147.   BEGIN
  148.     IF VSAkt <> Screen THEN CopyVS(VSAkt, Screen);
  149.   END;
  150.  
  151.   PROCEDURE ExtVSManager.CopyPartToScr
  152.              (x1, y1, x2, y2, ToX, ToY : BYTE);
  153.   {  Kopiert Ausschnitt des aktuellen in "richtigen"       }
  154.   {  Bildschirm.                                           }
  155.   BEGIN
  156.     IF VSAkt <> Screen THEN
  157.       CopyPart(x1, y1, x2, y2, ToX, ToY, VSAkt, Screen);
  158.   END;
  159.  
  160. END.
  161. (* ------------------------------------------------------ *)
  162. (*                   Ende von EXTVSM.PAS                  *)
  163.