home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* ROOTVSM.PAS *)
- (* Das Objekt enthält die für einen Virtual-Screen- *)
- (* Manager grundlegenden Methoden. *)
- (* (c) 1991 Raimond Reichert & TOOLBOX *)
- (* ----------------------------------------------------- *)
- UNIT RootVSM;
-
- INTERFACE
-
- USES VSObj, ScrObj;
-
- CONST { Maximale Anzahl virtueller Bildschirme: }
- MaxVS = 100;
- { Return Codes ("Dialog"): }
- VSVSNotInit = 10; { virt. Bildschirm Init-Fehler }
- VSTooManyVS = 11; { kann keinen vB mehr anlegen }
- VSCantDelScr = 12; { kann "richtigen" Bildschirm }
- { nicht löschen }
- VSInvalidNr = 13; { ungültige vB Nummer }
- VSCantDelAkt = 14; { kann akt. vB nicht auflösen }
-
- TYPE
- VirtualScreenPtr = VSObj.VirtualScreenPtr;
- VirtualScreen = VSObj.VirtualScreen;
- VSArrayPtr = ^VSArray;
- VSArray = ARRAY [0..MaxVS] OF VirtualScreenPtr;
- VSManagerPtr = ^VSManagerObj;
- VSManagerObj =
- OBJECT
- { ----------------- Variablen ---------------------- }
- VSNum, { Anzahl vBs }
- VSAkt, { Aktiver vB }
- ReturnCode : BYTE; { "Antwort" }
- VScreens : VSArrayPtr; { vBs }
- { ------------------ Methoden ---------------------- }
- CONSTRUCTOR Init(XL, YL : BYTE);
- PROCEDURE AddVS(VSPtr : VirtualScreenPtr); VIRTUAL;
- PROCEDURE DelVSNr(Nr : BYTE); VIRTUAL;
- PROCEDURE SelectVS(Nr : BYTE); VIRTUAL;
- PROCEDURE SetReturnCode(Code : BYTE); VIRTUAL;
- FUNCTION GetReturnCode : BYTE; VIRTUAL;
- FUNCTION GetNum : BYTE; VIRTUAL;
- FUNCTION GetAkt : BYTE; VIRTUAL;
- FUNCTION GetXLength : BYTE; VIRTUAL;
- FUNCTION GetYLength : BYTE; VIRTUAL;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- CONSTRUCTOR VSManagerObj.Init(XL, YL : BYTE);
- { Initalisiert das Array "VScreens", d.h. versucht, }
- { Speicher für ihn zu reservieren. Dann wird der }
- { "richtige" Bildschirm (mit Nummer 0) intialisiert }
- { indem er via "AddVS" in den Array "gehängt" wird. Als }
- { Längen dienen die "Init" übergebenen. }
- BEGIN
- VSNum := 0;
- VSAkt := 0;
- ReturnCode := VSOk;
- New(VScreens);
- IF VScreens = NIL THEN
- Fail
- ELSE
- AddVS(New(ScreenObjPtr, Init(XL, YL)));
- IF VSNum = 0 THEN Fail;
- END;
-
- PROCEDURE VSManagerObj.AddVS(VSPtr : VirtualScreenPtr);
- BEGIN
- IF VSNum < MaxVS THEN BEGIN
- IF VSPtr <> NIL THEN BEGIN
- VScreens^[VSNum] := VSPtr;
- Inc(VSNum);
- END ELSE
- SetReturnCode(VSVSNotInit);
- END ELSE
- SetReturnCode(VSTooManyVS);
- END;
-
- PROCEDURE VSManagerObj.DelVSNr(Nr : BYTE);
- VAR
- i : BYTE;
- BEGIN
- IF(Nr > 0) AND (Nr < VSNum) AND (Nr <> VSAkt) THEN BEGIN
- Dispose(VScreens^[Nr], Done);
- FOR i := Nr TO Pred(VSNum) DO
- VScreens^[i] := VScreens^ [Succ(i)];
- Dec(VSNum);
- END ELSE
- IF Nr = 0 THEN
- SetReturnCode(VSCantDelScr)
- ELSE IF Nr = VSNum THEN
- SetReturnCode(VSInvalidNr)
- ELSE IF Nr = VSAkt THEN
- SetReturnCode(VSCantDelAkt);
- END;
-
- PROCEDURE VSManagerObj.SelectVS(Nr : BYTE);
- BEGIN
- IF (Nr >= 0) AND (Nr < VSNum) THEN
- VSAkt := Nr
- ELSE
- SetReturnCode(VSInvalidNr);
- END;
-
- PROCEDURE VSManagerObj.SetReturnCode(Code : BYTE);
- BEGIN
- ReturnCode := Code;
- END;
-
- FUNCTION VSManagerObj.GetReturnCode : BYTE;
- BEGIN
- GetReturnCode := ReturnCode;
- SetReturnCode(VSOk);
- END;
-
- FUNCTION VSManagerObj.GetNum : BYTE;
- { Liefert Anzahl VIRTUELLER Bildschirme, deshalb }
- { VSNum-1, da AddVS auch den "richtigen" Bildschirm }
- { in VSNum mitgezählt hat. }
- BEGIN
- GetNum := Pred(VSNum);
- END;
-
- FUNCTION VSManagerObj.GetAkt : BYTE;
- BEGIN
- GetAkt := VSAkt;
- END;
-
- FUNCTION VSManagerObj.GetXLength : BYTE;
- BEGIN
- GetXLength := VScreens^[VSAkt]^.GetXLength;
- END;
-
- FUNCTION VSManagerObj.GetYLength : BYTE;
- BEGIN
- GetYLength := VScreens^[VSAkt]^.GetYLength;
- END;
-
- DESTRUCTOR VSManagerObj.Done;
- { Ruft die Destruktoren sämtlicher virtueller (inkl. }
- { des "richtigen") Bildschirme auf und gibt den für }
- { das Array "VScreens" benötigten Speicher frei. }
- VAR
- i : BYTE;
- BEGIN
- FOR i:=0 TO Pred(VSNum) DO Dispose(VScreens^[i], Done);
- Dispose(VScreens)
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von ROOTVSM.PAS *)