DEFINITION MODULE Application; (* Hans Endl 25. 9. 86 4. 3. 87 *) FROM SYSTEM IMPORT ADDRESS; IMPORT GEMVDIbase; CONST maxlevel = 8; TYPE pipetype = (MenuMessage, WindowMessage); messagetype = RECORD message: INTEGER; AppID: INTEGER; length: INTEGER; CASE : pipetype OF MenuMessage: menu, item: INTEGER | WindowMessage: handle, x, y, w, h: INTEGER END END; AppEntryType = RECORD rscaddr: ADDRESS; desktree: ADDRESS; menutree: ADDRESS; res1: ADDRESS; res2: ADDRESS; END; AppListType = ARRAY [0..maxlevel] OF AppEntryType; VAR Appl: INTEGER; (* Applikationsnummer *) applist: AppListType; (* Liste der verschacht. App. *) applevel: INTEGER; (* Z„hler fr verschacht. Ap. *) VDIHandle: INTEGER; (* Nummer des Ger„tekanals *) DeskTree: ADDRESS; (* Adresse des akt. Desktops *) MenuTree: ADDRESS; (* Adresse des akt. Menbaums *) Colour: BOOLEAN; (* Flag fr Farbmonitor *) workOut: GEMVDIbase.VDIWorkOutType; (* Parameter der Workstation *) WidthChar, (* Breite eines Zeichens *) HeightChar, (* H”he eines Zeichens *) WidthFont, (* Breite eines Zeichenfeldes *) HeightFont: INTEGER; (* H”he eines Zeichenfeldes *) deskx, desky, deskw, deskh: INTEGER; (* Koordinaten des Desktop *) maxX, maxY: INTEGER; (* Bildschirmformat (Raster) *) (* ------------------------------------------------------------------- *) PROCEDURE CheckItem (item: INTEGER; check: BOOLEAN); (* item: Meneintrag, der mit einem H„kchen versehen werden soll check: TRUE: H„kchen zeichnen, FALSE: H„kchen l”schen *) PROCEDURE EnableItem (item: INTEGER; enable: BOOLEAN); (* item: Meneintrag, der aktiviert oder deaktiviert werden soll enable: TRUE: aktivieren, FALSE: deaktivieren *) PROCEDURE ShowNormal (menu: INTEGER); (* menu: Dieser Mentitel wird wieder normal dargestellt *) PROCEDURE ShowMenuBar (show: BOOLEAN); (* Die Mentitelzeile wird angezeigt oder gel”scht *) PROCEDURE EventMessage (VAR message: messagetype); (* Es wird auf ein Menereignis gewartet *) PROCEDURE Init; (* - "applevel" wird um eins erh”ht Falls "applevel" gleich Null war (unterste Applikation), dann wird bei GEM eine Applikation angemeldet, d, h. - es wird eine Applikationsnummer zugeteilt - ein Graphik-Kanal wird er”ffnet - eine virtuelle Workstation wird er”ffnet Dabei werden die entsprechenden Werte der exportierten Variablen (siehe oben) belegt. W i c h t i g: Diese Prozedur muss vom Anwender am Anfang des Haupt- programms aufgerufen werden, wenn mit VDI oder Fenstern gearbeitet wird. Am Ende des Hauptprogramms muss ein korrespondierendes "Terminate" vorhanden sein. Beim Arbeiten mit dem dynamischen Modula-2-System ist es unsch„dlich, wenn ein geladenes Programm ein weiteres Programm l„dt, in dem ebenfalls "Init" aufgerufen wird. Wichtig ist nur, dass jedem "Init" ein "Terminate" zugeordnet ist. *) PROCEDURE Terminate; (* Diese Prozedur muž am Ende des Programms aufgerufen werden. Es werden folgende Funktionen ausgefhrt: - "applevel" wird um eins erniedrigt - die Mentitelzeile wird, falls vorhanden, gel”scht - der Speicher fr die Resource-Objekte wird, falls vorhanden, freigegeben - falls verschachtelte Resourcen vorhanden sind, dann wird die n„chsttiefere wieder aktiviert. Falls "Terminate" in der untersten Applikationsebene aufgerufen wird (applevel = 0), dann wird - die virtuelle Workstation geschlossen - die Applikation beendet *) PROCEDURE InitResource (deskindex, menuindex: INTEGER; ResourceFileName: ARRAY OF CHAR): BOOLEAN; (* deskindex: Index des neuen Desktop in der Resource-Datei oder -1, falls keine neues Desktop vorhanden menuindex: Index des Menbaums in der Resource-Datei oder -1, falls kein Menbaum existiert ResourceFileName: Name zugeh”rigen .RSC-Datei Funktionswert: TRUE, falls RSC-Datei geladen werden konnte W i c h t i g : Jedem "InitResource" muss ein "TerminateResource" zugeordnet sein, wobei Verschachtelungen m”glich sind. Es wird die Resource-Datei geladen, falls deskindex > -1, ein neues Desktop bildschirmfllend installiert und falls menuindex > -1, die Menuezeile aufgebaut. Dabei werden die entsprechenden Werte der exportierten Variablen (siehe oben) belegt, wobei die Adressen der Resource-Struktur, des Desktop- und/oder Menbaums in "applist" unter dem aktuellen "app- level" eingetragen werden. *) END Application.