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

  1. (* ----------------------------------------------------- *)
  2. (*                      ROOTVSM.PAS                      *)
  3. (*   Das Objekt enthält die für einen Virtual-Screen-    *)
  4. (*   Manager grundlegenden Methoden.                     *)
  5. (*       (c) 1991 Raimond Reichert & TOOLBOX             *)
  6. (* ----------------------------------------------------- *)
  7. UNIT RootVSM;
  8.  
  9. INTERFACE
  10.  
  11. USES VSObj, ScrObj;
  12.  
  13. CONST           { Maximale Anzahl virtueller Bildschirme: }
  14.   MaxVS        = 100;
  15.                            { Return Codes ("Dialog"):     }
  16.   VSVSNotInit  =  10;      { virt. Bildschirm Init-Fehler }
  17.   VSTooManyVS  =  11;      { kann keinen vB mehr anlegen  }
  18.   VSCantDelScr =  12;      { kann "richtigen" Bildschirm  }
  19.                            { nicht löschen                }
  20.   VSInvalidNr  =  13;      { ungültige vB Nummer          }
  21.   VSCantDelAkt =  14;      { kann akt. vB nicht auflösen  }
  22.  
  23. TYPE
  24.   VirtualScreenPtr = VSObj.VirtualScreenPtr;
  25.   VirtualScreen    = VSObj.VirtualScreen;
  26.   VSArrayPtr       = ^VSArray;
  27.   VSArray          = ARRAY [0..MaxVS] OF VirtualScreenPtr;
  28.   VSManagerPtr     = ^VSManagerObj;
  29.   VSManagerObj     =
  30.     OBJECT
  31.       { ----------------- Variablen ---------------------- }
  32.       VSNum,                                 { Anzahl vBs  }
  33.       VSAkt,                                 { Aktiver vB  }
  34.       ReturnCode : BYTE;                     { "Antwort"   }
  35.       VScreens   : VSArrayPtr;               { vBs         }
  36.       { ------------------ Methoden ---------------------- }
  37.       CONSTRUCTOR Init(XL, YL : BYTE);
  38.       PROCEDURE   AddVS(VSPtr : VirtualScreenPtr);  VIRTUAL;
  39.       PROCEDURE   DelVSNr(Nr : BYTE);               VIRTUAL;
  40.       PROCEDURE   SelectVS(Nr : BYTE);              VIRTUAL;
  41.       PROCEDURE   SetReturnCode(Code : BYTE);       VIRTUAL;
  42.       FUNCTION    GetReturnCode : BYTE;             VIRTUAL;
  43.       FUNCTION    GetNum : BYTE;                    VIRTUAL;
  44.       FUNCTION    GetAkt : BYTE;                    VIRTUAL;
  45.       FUNCTION    GetXLength : BYTE;                VIRTUAL;
  46.       FUNCTION    GetYLength : BYTE;                VIRTUAL;
  47.       DESTRUCTOR  Done;                             VIRTUAL;
  48.     END;
  49.  
  50. IMPLEMENTATION
  51.  
  52.   CONSTRUCTOR VSManagerObj.Init(XL, YL : BYTE);
  53.   {  Initalisiert das Array "VScreens", d.h. versucht,      }
  54.   {  Speicher für ihn zu reservieren. Dann wird der         }
  55.   {  "richtige" Bildschirm (mit Nummer 0) intialisiert      }
  56.   {  indem er via "AddVS" in den Array "gehängt" wird. Als  }
  57.   {  Längen dienen die "Init" übergebenen.                  }
  58.   BEGIN
  59.     VSNum      := 0;
  60.     VSAkt      := 0;
  61.     ReturnCode := VSOk;
  62.     New(VScreens);
  63.     IF VScreens = NIL THEN
  64.       Fail
  65.     ELSE
  66.       AddVS(New(ScreenObjPtr, Init(XL, YL)));
  67.     IF VSNum = 0 THEN Fail;
  68.   END;
  69.  
  70.   PROCEDURE VSManagerObj.AddVS(VSPtr : VirtualScreenPtr);
  71.   BEGIN
  72.     IF VSNum < MaxVS THEN BEGIN
  73.       IF VSPtr <> NIL THEN BEGIN
  74.         VScreens^[VSNum] := VSPtr;
  75.         Inc(VSNum);
  76.       END ELSE
  77.         SetReturnCode(VSVSNotInit);
  78.     END ELSE
  79.       SetReturnCode(VSTooManyVS);
  80.   END;
  81.  
  82.   PROCEDURE VSManagerObj.DelVSNr(Nr : BYTE);
  83.   VAR
  84.     i : BYTE;
  85.   BEGIN
  86.     IF(Nr > 0) AND (Nr < VSNum) AND (Nr <> VSAkt) THEN BEGIN
  87.       Dispose(VScreens^[Nr], Done);
  88.       FOR i := Nr TO Pred(VSNum) DO
  89.         VScreens^[i] := VScreens^ [Succ(i)];
  90.       Dec(VSNum);
  91.     END ELSE
  92.       IF Nr = 0 THEN
  93.         SetReturnCode(VSCantDelScr)
  94.       ELSE IF Nr = VSNum THEN
  95.         SetReturnCode(VSInvalidNr)
  96.       ELSE IF Nr = VSAkt THEN
  97.         SetReturnCode(VSCantDelAkt);
  98.   END;
  99.  
  100.   PROCEDURE VSManagerObj.SelectVS(Nr : BYTE);
  101.   BEGIN
  102.     IF (Nr >= 0) AND (Nr < VSNum) THEN
  103.       VSAkt := Nr
  104.     ELSE
  105.       SetReturnCode(VSInvalidNr);
  106.   END;
  107.  
  108.   PROCEDURE VSManagerObj.SetReturnCode(Code : BYTE);
  109.   BEGIN
  110.     ReturnCode := Code;
  111.   END;
  112.  
  113.   FUNCTION VSManagerObj.GetReturnCode : BYTE;
  114.   BEGIN
  115.     GetReturnCode := ReturnCode;
  116.     SetReturnCode(VSOk);
  117.   END;
  118.  
  119.   FUNCTION VSManagerObj.GetNum : BYTE;
  120.   {  Liefert Anzahl VIRTUELLER Bildschirme, deshalb        }
  121.   {  VSNum-1, da AddVS auch den "richtigen" Bildschirm     }
  122.   {  in VSNum mitgezählt hat.                              }
  123.   BEGIN
  124.     GetNum := Pred(VSNum);
  125.   END;
  126.  
  127.   FUNCTION VSManagerObj.GetAkt : BYTE;
  128.   BEGIN
  129.     GetAkt := VSAkt;
  130.   END;
  131.  
  132.   FUNCTION VSManagerObj.GetXLength : BYTE;
  133.   BEGIN
  134.     GetXLength := VScreens^[VSAkt]^.GetXLength;
  135.   END;
  136.  
  137.   FUNCTION VSManagerObj.GetYLength : BYTE;
  138.   BEGIN
  139.     GetYLength := VScreens^[VSAkt]^.GetYLength;
  140.   END;
  141.  
  142.   DESTRUCTOR VSManagerObj.Done;
  143.   {  Ruft die Destruktoren sämtlicher virtueller (inkl.    }
  144.   {  des "richtigen") Bildschirme auf und gibt den für     }
  145.   {  das Array "VScreens" benötigten Speicher frei.        }
  146.   VAR
  147.     i : BYTE;
  148.   BEGIN
  149.     FOR i:=0 TO Pred(VSNum) DO Dispose(VScreens^[i], Done);
  150.     Dispose(VScreens)
  151.   END;
  152.  
  153. END.
  154. (* ------------------------------------------------------ *)
  155. (*                 Ende von ROOTVSM.PAS                   *)
  156.