home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / modula / applicat.def < prev    next >
Encoding:
Modula Definition  |  1993-10-23  |  5.5 KB  |  170 lines

  1. DEFINITION MODULE Application;           (* Hans Endl   25.  9. 86
  2.                                                          4.  3. 87  *)
  3. FROM SYSTEM IMPORT ADDRESS;
  4.  
  5.             IMPORT GEMVDIbase;
  6.  
  7.  
  8. CONST
  9.   maxlevel    = 8;
  10.  
  11. TYPE
  12.   pipetype     = (MenuMessage, WindowMessage);
  13.   messagetype  = RECORD
  14.                    message:  INTEGER;
  15.                    AppID:    INTEGER;
  16.                    length:   INTEGER;
  17.                    CASE : pipetype OF
  18.                      MenuMessage:      menu, item:         INTEGER |
  19.                      WindowMessage:    handle, x, y, w, h: INTEGER
  20.                    END
  21.                  END;
  22.  
  23.  
  24.   AppEntryType = RECORD
  25.                    rscaddr:   ADDRESS;
  26.                    desktree:  ADDRESS;
  27.                    menutree:  ADDRESS;
  28.                    res1:      ADDRESS;
  29.                    res2:      ADDRESS;
  30.                  END;
  31.  
  32.   AppListType  = ARRAY [0..maxlevel] OF AppEntryType;
  33.  
  34.  
  35. VAR 
  36.   Appl:       INTEGER;                   (* Applikationsnummer         *)
  37.  
  38.   applist:    AppListType;               (* Liste der verschacht. App. *)
  39.  
  40.   applevel:   INTEGER;                   (* Zähler für verschacht. Ap. *)
  41.  
  42.   VDIHandle:  INTEGER;                   (* Nummer des Gerätekanals    *)
  43.  
  44.   DeskTree:   ADDRESS;                   (* Adresse des akt. Desktops  *)
  45.  
  46.   MenuTree:   ADDRESS;                   (* Adresse des akt. Menübaums *)
  47.  
  48.   Colour:     BOOLEAN;                   (* Flag für Farbmonitor       *)
  49.  
  50.   workOut:    GEMVDIbase.VDIWorkOutType; (* Parameter der Workstation  *)
  51.  
  52.   WidthChar,                             (* Breite eines Zeichens      *)
  53.   HeightChar,                            (* Höhe eines Zeichens        *)
  54.   WidthFont,                             (* Breite eines Zeichenfeldes *)
  55.   HeightFont: INTEGER;                   (* Höhe eines Zeichenfeldes   *)
  56.  
  57.   deskx,
  58.   desky,
  59.   deskw,
  60.   deskh:      INTEGER;                   (* Koordinaten des Desktop    *)
  61.   maxX, maxY: INTEGER;                   (* Bildschirmformat (Raster)  *)
  62.  
  63.  
  64.  
  65.  
  66. (* ------------------------------------------------------------------- *)
  67.  
  68.  
  69. PROCEDURE CheckItem (item: INTEGER; check: BOOLEAN);
  70.  
  71. (*  item:  Menüeintrag, der mit einem Häkchen versehen werden soll
  72.     check: TRUE: Häkchen zeichnen, FALSE: Häkchen löschen
  73.  *)
  74.  
  75.  
  76. PROCEDURE EnableItem (item: INTEGER; enable: BOOLEAN);
  77.  
  78. (*  item:   Menüeintrag, der aktiviert oder deaktiviert werden soll
  79.     enable: TRUE: aktivieren, FALSE: deaktivieren
  80.  *)
  81.  
  82.  
  83. PROCEDURE ShowNormal (menu: INTEGER);
  84.  
  85. (*  menu:  Dieser Menütitel wird wieder normal dargestellt  *)
  86.  
  87.  
  88. PROCEDURE ShowMenuBar (show: BOOLEAN);
  89.  
  90. (*  Die Menütitelzeile wird angezeigt oder gelöscht  *)
  91.  
  92.  
  93. PROCEDURE EventMessage (VAR message: messagetype);
  94.  
  95. (*  Es wird auf ein Menüereignis gewartet            *)
  96.  
  97.  
  98. PROCEDURE Init;
  99.  
  100. (*
  101.     - "applevel" wird um eins erhöht
  102.     Falls "applevel" gleich Null war (unterste Applikation), dann wird
  103.     bei GEM eine Applikation angemeldet, d, h.
  104.     - es wird eine Applikationsnummer zugeteilt
  105.     - ein Graphik-Kanal wird eröffnet 
  106.     - eine virtuelle Workstation wird eröffnet
  107.  
  108.     Dabei werden die entsprechenden Werte der exportierten Variablen
  109.     (siehe oben) belegt.
  110.  
  111.     W i c h t i g:  Diese Prozedur muss vom Anwender am Anfang des Haupt-
  112.                     programms aufgerufen werden, wenn mit VDI oder Fenstern
  113.                     gearbeitet wird.
  114.  
  115.                     Am Ende des Hauptprogramms muss ein korrespondierendes
  116.                     "Terminate" vorhanden sein.
  117.  
  118.     Beim Arbeiten mit dem dynamischen Modula-2-System ist es unschädlich,
  119.     wenn ein geladenes Programm ein weiteres Programm lädt, in dem
  120.     ebenfalls "Init" aufgerufen wird. Wichtig ist nur, dass jedem "Init"
  121.     ein "Terminate" zugeordnet ist.
  122. *)
  123.  
  124.  
  125.  
  126. PROCEDURE Terminate;
  127.  
  128. (*  Diese Prozedur muß am Ende des Programms aufgerufen werden.
  129.     Es werden folgende Funktionen ausgeführt:
  130.     - "applevel" wird um eins erniedrigt
  131.     - die Menütitelzeile wird, falls vorhanden, gelöscht
  132.     - der Speicher für die Resource-Objekte wird, falls vorhanden,
  133.       freigegeben
  134.     - falls verschachtelte Resourcen vorhanden sind, dann wird die
  135.       nächsttiefere wieder aktiviert.
  136.     Falls "Terminate" in der untersten Applikationsebene aufgerufen
  137.     wird (applevel = 0), dann wird 
  138.     - die virtuelle Workstation geschlossen
  139.     - die Applikation beendet
  140. *)
  141.  
  142.  
  143.  
  144. PROCEDURE InitResource (deskindex, menuindex: INTEGER;
  145.                         ResourceFileName: ARRAY OF CHAR): BOOLEAN;
  146.  
  147. (*  deskindex:        Index des neuen Desktop in der Resource-Datei
  148.                       oder -1, falls keine neues Desktop vorhanden
  149.     menuindex:        Index des Menübaums in der Resource-Datei
  150.                       oder -1, falls kein Menübaum existiert
  151.     ResourceFileName: Name zugehörigen .RSC-Datei
  152.     Funktionswert:    TRUE, falls RSC-Datei geladen werden konnte
  153.     
  154.  
  155.     W i c h t i g :   Jedem "InitResource" muss ein "TerminateResource"
  156.                       zugeordnet sein, wobei Verschachtelungen möglich
  157.                       sind.
  158.  
  159.     Es wird die Resource-Datei geladen, falls deskindex > -1,
  160.     ein neues Desktop bildschirmfüllend installiert und falls
  161.     menuindex > -1, die Menuezeile aufgebaut.
  162.  
  163.     Dabei werden die entsprechenden Werte der exportierten Variablen
  164.     (siehe oben) belegt, wobei die Adressen der Resource-Struktur, des
  165.     Desktop- und/oder Menübaums in "applist" unter dem aktuellen "app-
  166.     level" eingetragen werden.
  167. *)
  168.  
  169. END Application.
  170.