Dokumentation zum Programm ______ /| /| / / / | / | ____ ____ / / ____ ____ ____ / | / | / / / / / / /___/ / / / |/ | /____/ /____/ /_____/ /___ / / V1.0 (c) 1995 by Frank Lömker E-Mail: floemker@techfak.uni-bielefeld.de ModGen basiert direkt auf - OG V37.11 von Thomas Igracki und - GenOberon V1.0 von Kai Bolay und Jan van den Baard. Copyright: ~~~~~~~~~ Das Programm ist Freeware. Es darf frei kopiert werden. Es ist aber nicht erlaubt, es zu kommerziellen Zwecken zu benutzen. Dazu gehört auch ein Diskettenpreis von über 5 DM ! Änderungen müssen dokumentiert werden. Libraries: ~~~~~~~~~ Das Programm benötigt die folgenden externen Libraries: - reqtools.library V38 ( (c) by Nico François ) - nofrag.library V2 ( (c) by Jan van den Baard ) - gadtoolsbox.library V39 ( (c) by Jan van den Baard ) Sollen gepackte Dateien geladen werden, wird die Library - powerpacker.library V35 ( (c) by Nico François ) benötigt. Programm: ~~~~~~~~ Das Programm ModGen ist ein Modula SourceCodeGenerator für GadToolsBox ab Version 2.0. Es erzeugt Code für den Compiler Turbo Modula-2 V1.40 von Amritpal Mann. Von der Workbench können ModGen bis zu 3 Parameter übergeben werden. Der 1. Parameter ist das zu konvertierende GUI-File, der 2. der Name des zu erzeu- genden Sourcecodes und der 3. der Name des zu erzeugenden Sourcecodes für den Screen, falls hierfür eine Extradatei angelegt werden soll. Von der Shell sieht der Aufruf wie folgt aus: Format: ModGen [] [] [] [OPENFONT] [SYSFONT] [RASTER] [UNDERMOUSE] [PORT] [ICON] [NOGUI] [OPT OSRUPI] Schablone: NAME,TO=AS,SCREEN,OPENFONT/S,SYSFONT/S,RASTER/S,UNDERMOUSE/S, PORT/S,ICON/S,NOGUI/S,OPT/K Die ersten 3 Parameter ([] [] []) sind da- bei identisch zu den Workbench-Parametern. NOGUI bewirkt, das kein Fenster geöffnet wird. Wird NOGUI nicht angege- ben, werden die restlichen Optionen (OPENFONT - ICON bzw. OPT) ignoriert. Die einzelnen Optionen bewirken: OPENFONT oder OPT O Ist die Option "Font Adaptive" bei den Preferences von GadToolsBox für das GUI-File nicht gewählt und wird ein DiskFont benutzt, wird auch Code erzeugt, der den Font öffnet und schließt. SYSFONT oder OPT S Ist die Option "Font Adaptive" bei den Preferences von GadToolsBox für das GUI-File gewählt, bewirkt die Angabe dieser Option, daß der System Default Font benutzt wird. Wird die Option nicht angegeben, wird der Screen Font benutzt. RASTER oder OPT R Die generierten Fenster werden mit einem Raster gefült, das auch von GadToolsBox und den AutoRequestern der Workbench benutzt wird (und auch von ModGen). UNDERMOUSE oder OPT U Die generierten Fenster werden unter der Maus geöffnet. PORT oder OPT P Für die generierten Fenster wird nur ein MessagePort angelegt. Die Messages können also für alle Fenster an diesem einen Port abgefragt werden. ICON oder OPT I Die generierten Dateien werden, falls sie noch kein Icon hatten, mit dem Icon "Modula:Icons/txt" gespeichert. Wird NOGUI nicht angegeben oder wird das Programm über die Workbench ge- started, werden zuerst die Preferences (die Einstellungen der Optionen OPENFONT - ICON) aus der Datei "ENV:GadToolsBox/GenMod.prefs" geladen. Da- nach wird ein Fenster geöffnet, über das das Programm gesteuert wird. Die Einstellungen sind hier: Source, Dest, Screen Die hier einzugebenden Namen entsprechen den 3 Parametern von der Workbench. Mit den kleinen Gadgets neben den Stringgadgets wird ein Filerequester geöffnet, über den der jeweilige Name per Maus gewählt werden kann. Preferences Hier können die gleichen Optionen ein- bzw. ausgeschaltet werden, die auch von der Shell angegeben werden können (siehe oben). Windows Hier werden, nachdem bei Source ein GUI-File angegeben wurde, die ge- nerierten Fenster und der Screen aufgelistet. Soll nur ein Teil des Codes erzeugt werden, kann hier der Bereich gewählt werden. from Ist dieses Gadget aktiv, kann bei den Windows die erste Grenze des Be- reiches gewählt werden, der abgespeichert werden soll. to Ist dieses Gadget aktiv, kann bei den Windows die zweite Grenze des Be- reiches gewählt werden, der abgespeichert werden soll. All Wird dieses Gadget gewählt, wird der komplette Sourcecode (alle Windows und der Screen) in der Datei erzeugt. Selected Wird dieses Gadget gewählt, wird Sourcecode für den bei from und to ausgewählten Bereich erzeugt. Ist hier der Screen enthalten, wird die- ser unter dem Namen gespeichert, der restliche Code wird in der Datei abgelegt. Dieser Code imporiert den Teil für den Screen aus der Datei , so daß der Name auch nötig ist, wenn der Screen nicht gespeichert wird. SavePref Hier werden die Preferences in den Dateien "ENV:GadToolsBox/GenMod.prefs" und "ENVARC:GadToolsBox/GenMod.prefs" abgespeichert. About Es werden Informationen über das Programm angezeigt. Quit und Closegadget Das Programm wird beendet. Generierter Code: ~~~~~~~~~~~~~~~~ Wird das GETFILE-Gadget benutzt, imporiert der generierte Code das Modul GetFile. Beim Linken muß dann das Objektfile "InitGetC.o" mit angegeben werden. Dieses enthält den Dispatcher für das BOOPSI-Image. Ab hier bedeuten: Name, der im Edit Data Requester vom Windowmenu eingegeben wurde Name, der in einem Label Gadget von einem der Gadget Kind Requester eingegeben wurde Name, der im Label Gadget vom Menu Editor eingegeben wurde An exportierten Routinen werden generiert: PROCEDURE SetupScreen (): INTEGER , bei einem Customscreen und der Workbench PROCEDURE SetupScreen (pub:y.ADDRESS): INTEGER bei einem Publicscreen Diese Procedure öffnet bzw. locked den Screen und besorgt seinen Visual Info. Auf verlangen wird der benutzte Font geöffnet. Wird ein GETFILE- Gadget benutzt, wird auch die Initialisierung des BOOPSI Image getestet. Diese Routine befindet sich im File , wenn beim generieren des Codes Selected gewählt wurde. Die RETURN Codes: 0 kein Fehler. 1 Konnte Screen nicht öffnen bzw. locken. 2 Konnte Visual Info nicht bekommen. 3 Konnte Font nicht öffnen. 4 Konnte BOOPSI Image nicht initialisieren. PROCEDURE CloseDownScreen; Diese Procedure gibt die Resourcen von SetupScreen frei. Diese Routine muß auch dann aufgerufen werden, wenn SetupScreen einen Fehler gemeldet hat. Diese Routine befindet sich im File , wenn beim generieren des Codes Selected gewählt wurde. PROCEDURE CreateGadgets (): INTEGER; Für jedes generierte Fenster mit Gadgets gibt es eine dieser Routinen. Diese Routinen legen die Gadgets an. Die RETURN Codes: 0 Kein Fehler. 1 Konnte Gadget Context nicht anlegen. 2 Konnte Gadgets nicht anlegen. 7 Konnte BOOPSI Image nicht initialisieren. 8 CloneTagItems nicht möglich. PROCEDURE OpenWindow (createGads: BOOLAN): INTEGER; bei einem Fenster mit Gadgets PROCEDURE OpenWindow (): INTEGER; bei einem Fenster ohne Gadgets Für jedes generierte Fenster gibt es eine dieser Routinen. Diese Routinen legen die Gadgets (falls verlangt und vorhanden) und die Menues an und öffnen die Fenster. Die RETURN Codes: 0 Kein Fehler. 1 Konnte Gadget Context nicht anlegen. 2 Konnte Gadgets nicht anlegen. 3 Konnte Menues nicht anlegen. 4 LayoutMenus nicht möglich. 5 Konnte SystemFont nicht öffnen (bei Option SYSFONT). 6 SetMenuStrip nicht möglich. 7 Konnte BOOPSI Image nicht initialisieren. 8 CloneTagItems nicht möglich. 20 Konnte Fenster nicht öffnen. PROCEDURE CloseWindow; Für jedes generierte Fenster gibt es eine dieser Routinen. Diese Procedure gibt die Resourcen von OpenWindow frei. Diese Routine muß auch dann aufgerufen werden, wenn OpenWindow einen Fehler gemeldet hat. PROCEDURE Render; Für jedes generierte Fenster, das IntuiTexte oder BevelBoxen enthält oder für das die Option RASTER an war, gibt es eine dieser Routinen, die die Texte und BevelBoxen anzeigen und den Hintergrund neu generieren. Diese Routine muß vom Hauptprogramm aufgerufen werden, wenn es die Message REFRESHWINDOW am Windowport erhält. Dies muß zwischen den Aufrufen von GT_BeginRefresh und GT_EndRefresh geschehen. Ein Beispiel: IF REFRESHWINDOW <= Class THEN GT_BeginRefresh (Wnd); Render; GT_EndRefresh (Wnd,TRUE); END; Weiterhin werden folgende globalen Variablen und Konstanten angelegt: Die Variablen Scr, VisualInfo, Font, Attr und Topaz80 befindet sich im File , wenn beim generieren des Codes Selected gewählt wurde. Scr: I.ScreenPtr; Zeiger auf den geöffneten bzw. gelockten Screen VisualInfo: y.ADDRESS; Zeiger zum Visual Info des Screens Die folgenden Variablen werden nur angelegt, wenn Gadgets bzw. Menues existieren, wenn der benutzte Font geöffnet wird bzw. wenn das Fenster ein ZoomGadget hat: GList: I.GadgetPtr; Die generierten Gadgets Menus: I.MenuPtr; Die Menues Zoom: ARRAY [0..3] OF INTEGER; 2. Fensterposition Topaz80: g.TextAttr; Attr: g.TextAttr; Der geöffnete Font Font: g.TextAttrPtr; Zeiger auf geöffneten Font Für jedes Fenster wird ein Zeiger auf das Fenster angelegt: Wnd: I.WindowPtr; Die Fensterposition und Größe wird in den folgenden Variablen abgelegt: Left Linke Ecke Top Obere Ecke Width Breite Height Höhe Diese werden im Hauptteil des generierten Modules initialisiert. Die Zeiger auf die Gadgets für jedes Fenster werden in folgenden Arrays angelegt: Gadgets: ARRAY [0..CNT-1] OF I.GadgetPtr; Die Konstante CNT gibt dabei die Anzahl der Gadgets in dem jeweiligen Fenster an. Um auf die Zeiger in dem Array zuzugreifen, werden die folgenden Konstanten erzeugt, die die Position des Gadgets in dem Array angeben: GD Die unterstrichenen Buchstaben aller Gadgets werden in dem String HotKeys angegeben. Neucompilierung: ~~~~~~~~~~~~~~~ Compiliert werden kann ModGen folgendermaßen: m2b ModGen gtxs.lib nofrags.lib rqtoolss.lib InitGetC.o Frank