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

  1. (* ----------------------------------------------------- *)
  2. (*                      ROOTVSM.PAS                      *)
  3. (*                                                       *)
  4. (* ■ VSManagerObj: Verwaltet einen Array von virtuellen  *)
  5. (*   Bildschirmen, wobei der erste den "richtigen" Bild- *)
  6. (*   schirm darstellt. Einen Zeiger auf ein Objekt vom   *)
  7. (*   Typ "ScreenObj" erwartet Init: So ist es möglich,   *)
  8. (*   dass Nachkommen von "ScreenObj" für erweiterte Text-*)
  9. (*   modi oder andere Seiten programmiert werden und hier*)
  10. (*   einfach gebraucht werden können.                    *)
  11. (*                                                       *)
  12. (*            (c) 1991 by R.Reichert & toolbox           *)
  13. (* ----------------------------------------------------- *)
  14. UNIT RootVSM;
  15.  
  16. INTERFACE
  17.  
  18. USES UBase, VSObj, ScrObj;
  19.  
  20. TYPE
  21.   ScreenObjPtr = ScrObj.ScreenObjPtr;
  22.   ScreenObj    = ScrObj.ScreenObj;
  23.  
  24. CONST           { Maximale Anzahl virtueller Bildschirme: }
  25.   MaxVS = 100;             { Return Codes:                }
  26.   VSVSNotInit  = 10;       { virt. Bildschirm Init-Fehler }
  27.   VSTooManyVS  = 11;       { kann keinen vB mehr anlegen  }
  28.   VSCantDelScr = 12;       { kann "richtigen" Bildschirm  }
  29.                            { nicht löschen                }
  30.   VSInvalidNr  = 13;       { ungültige vB Nummer          }
  31.   VSCantDelAkt = 14;       { kann akt. vB nicht auflösen  }
  32.  
  33. TYPE
  34.   VirtualScreenPtr = VSObj.VirtualScreenPtr;
  35.   VirtualScreen    = VSObj.VirtualScreen;
  36.   VSArrayPtr       = ^VSArray;
  37.   VSArray          = ARRAY [0..MaxVS] OF VirtualScreenPtr;
  38.   VSManagerPtr     = ^VSManagerObj;
  39.   VSManagerObj     = OBJECT (Base)
  40.     VSNum,
  41.     VSAkt,
  42.     ReturnCode : BYTE;
  43.     VScreens   : VSArrayPtr;
  44.  
  45.     CONSTRUCTOR Init (NewScreen : ScreenObjPtr);
  46.     PROCEDURE AddVS (VSPtr:VirtualScreenPtr);      VIRTUAL;
  47.     PROCEDURE DelVSNr (Nr : BYTE);                 VIRTUAL;
  48.     PROCEDURE SelectVS (Nr : BYTE);                VIRTUAL;
  49.     PROCEDURE SetReturnCode (Code : BYTE);         VIRTUAL;
  50.  
  51.     FUNCTION GetReturnCode : BYTE;                 VIRTUAL;
  52.     FUNCTION GetNum : BYTE;                        VIRTUAL;
  53.     FUNCTION GetAkt : BYTE;                        VIRTUAL;
  54.     FUNCTION GetXLength : BYTE;                    VIRTUAL;
  55.     FUNCTION GetYLength : BYTE;                    VIRTUAL;
  56.     FUNCTION GetPartPtr (x,y:BYTE):ScreenMemPtr;   VIRTUAL;
  57.     DESTRUCTOR Done;                               VIRTUAL;
  58.   END;
  59.  
  60. IMPLEMENTATION
  61.  
  62. CONSTRUCTOR VSManagerObj.Init (NewScreen : ScreenObjPtr);
  63. BEGIN
  64.   VSNum := 0;  VSAkt := 0;  ReturnCode := VSOk;
  65.   New (VScreens);
  66.   IF (VScreens=NIL) OR (NewScreen=NIL) THEN
  67.     Fail
  68.   ELSE
  69.     AddVS (NewScreen);
  70.   IF VSNum=0 THEN Fail;
  71. END;
  72.  
  73. PROCEDURE VSManagerObj.AddVS (VSPtr : VirtualScreenPtr);
  74. BEGIN
  75.   IF VSNum<MaxVS THEN BEGIN
  76.     IF VSPtr<>NIL THEN BEGIN
  77.       VScreens^[VSNum] := VSPtr;
  78.       Inc (VSNum);
  79.     END ELSE
  80.       SetReturnCode (VSVSNotInit)
  81.   END ELSE
  82.     SetReturnCode (VSTooManyVS);
  83. END;
  84.  
  85. PROCEDURE VSManagerObj.DelVSNr (Nr : BYTE);
  86.   VAR i : BYTE;
  87. BEGIN
  88.   IF (Nr>0) AND (Nr<VSNum) AND (Nr<>VSAkt) THEN BEGIN
  89.     Dispose (VScreens^[Nr], Done);
  90.     FOR i := Nr TO Pred (VSNum) DO
  91.       VScreens^[i] := VScreens^ [Succ (i)];
  92.     Dec (VSNum);
  93.   END ELSE
  94.     IF Nr=0 THEN
  95.       SetReturnCode (VSCantDelScr)
  96.     ELSE IF Nr=VSNum THEN
  97.       SetReturnCode (VSInvalidNr)
  98.     ELSE IF Nr=VSAkt THEN
  99.       SetReturnCode (VSCantDelAkt);
  100. END;
  101.  
  102. PROCEDURE VSManagerObj.SelectVS (Nr : BYTE);
  103. BEGIN
  104.   IF (Nr>=0) AND (Nr<VSNum) THEN
  105.     VSAkt := Nr
  106.   ELSE
  107.     SetReturnCode (VSInvalidNr);
  108. END;
  109.  
  110. PROCEDURE VSManagerObj.SetReturnCode (Code : BYTE);
  111. BEGIN
  112.   ReturnCode := Code;
  113. END;
  114.  
  115. FUNCTION VSManagerObj.GetReturnCode : BYTE;
  116. BEGIN
  117.   GetReturnCode := ReturnCode;
  118.   SetReturnCode (VSOk);
  119. END;
  120.  
  121. (* ----------------------------------------------------- *)
  122. (*  Liefert Anzahl VIRTUELLER Bildschirme, deshalb       *)
  123. (*  VSNum-1, da AddVS auch den "richtigen" Bildschirm    *)
  124. (*  in VSNum mitgezählt hat.                             *)
  125. (* ----------------------------------------------------- *)
  126. FUNCTION VSManagerObj.GetNum : BYTE;
  127. BEGIN
  128.   GetNum := Pred (VSNum);
  129. END;
  130.  
  131. FUNCTION VSManagerObj.GetAkt : BYTE;
  132. BEGIN
  133.   GetAkt := VSAkt;
  134. END;
  135.  
  136. FUNCTION VSManagerObj.GetXLength : BYTE;
  137. BEGIN
  138.   GetXLength := VScreens^[VSAkt]^.GetXLength;
  139. END;
  140.  
  141. FUNCTION VSManagerObj.GetYLength : BYTE;
  142. BEGIN
  143.   GetYLength := VScreens^[VSAkt]^.GetYLength;
  144. END;
  145.  
  146. FUNCTION VSManagerObj.GetPartPtr (x,y:BYTE) : ScreenMemPtr;
  147. BEGIN
  148.   GetPartPtr := VScreens^[VSAkt]^.GetPartPtr (x, y);
  149. END;
  150.  
  151. DESTRUCTOR VSManagerObj.Done;
  152.   VAR i : BYTE;
  153. BEGIN
  154.   FOR i := 0 TO Pred (VSNum) DO
  155.     Dispose (VScreens^[i], Done);
  156.   Dispose (VScreens);
  157. END;
  158.  
  159. END.
  160. (* ----------------------------------------------------- *)
  161. (*                  Ende von ROOTVSM.PAS                 *)
  162. (* ----------------------------------------------------- *)
  163.