typedef struct { int16_t *cb_pcontrol; /* Zeiger auf control-Array */ int16_t *cb_pglobal; /* Zeiger auf global-Array */ int16_t *cb_pintin; /* Zeiger auf int_in-Array */ int16_t *cb_pintout; /* Zeiger auf int_out-Array */ int16_t *cb_padrin; /* Zeiger auf adr_in-Array */ int16_t *cb_padrout; /* Zeiger auf adr_out-Array */ } AESPB;
Describes (animated) mouse shape
typedef struct { int16_t frames; /* Number of frames in shape */ int16_t delay; /* 50Hz tics to pause between frames */ MFORM form[32]; /* List of mouse forms */ } ANI_MOUSE;
Querverweis: graf_mouse
Describes application flags
typedef struct { unit8_t name[13]; /* Filename pattern to use these flags */ unit8_t desc[17]; /* User-defined description of flags */ APFLG flags; /* Execution flags */ KEYCODE open_key; /* Open application when this key is pressed */ KEYCODE reserve_key[3]; /* Application uses these keys, so don't let */ /* Geneva process them */ } APPFLAGS;
Querverweis: x_appl_flags APFLG KEYCODE
Application bit flags
typedef union { struct { unsigned multitask :1; /* 1: Multitasking */ unsigned special_types:1; /* 1: Use extended object types */ unsigned round_buttons:1; /* 1: Use rounded EXIT buttons */ unsigned kbd_equivs :1; /* 1: Use auto keyboard equivs */ unsigned undo_equivs :1; /* 1: Undraw when form_do exits */ unsigned off_left :1; /* 1: Allow windows off left edge */ unsigned exit_redraw :1; /* 1: Redraw everything at quit */ unsigned AES40_msgs :1; /* 1: New messages for AES 4.0 OK */ unsigned limit_handles:1; /* 1: Limit window handles to 1-7 */ unsigned limit_memory :1; /* 1: Limit Malloc's */ unsigned keep_deskmenu:1; /* 1: Keep desktop/menu bar */ unsigned clear_memory :1; /* 1: Clear Malloc'd memory */ unsigned maximize_wind:1; /* 1: Omit unnecessary gadgets */ unsigned optim_redraws:1; /* 1: Optimize window redraws (rel 004) */ unsigned unused :2; /* Reserved for future use */ unsigned mem_limit :16; /* Kb to limit memory allocation */ } s; unit32_t l; /* longword to access all bits */ } APFLG;
The multitask and limit_handles flags must not be changed for a process which is already in memory.
optim_redraws is present since release 004.
Querverweis: x_appl_flags APPFLAGS
Diese Struktur ist wie folgt definiert:
typedef struct { int32_t type; /* Art des Ereignisses */ int32_t what; /* genaue Beschreibung des Ereignisses */ } APPLRECORD
Für die Komponenten gilt dabei:
type Bedeutung | what | ||||||||||||||
0 Timer-Event | Anzahl von 20-Millisekunden Ticks | ||||||||||||||
1 Button-Event | Status der Maustaste (High-Word), und zwar: 0 = nicht
gedrückt, 1 = gedrückt:
Das (low-WORD) enthält die Anzahl der Clicks. | ||||||||||||||
2 Maus-Event | X-Koordinate (High-Word), Y-Koordinate (Low-Word). | ||||||||||||||
3 Tastatur-Event |
|
Hinweis: Unter PC-GEM belegt jedes Ereignis nur 6 Bytes, da die Komponente type von APPLRECORD dort als int16_t definiert ist.
Querverweis: appl_tplay appl_trecord
Ein Bit-Image kann immer dort eingesetzt werden, wo ein nicht anwählbares Icon stehen könnte; der entscheidende Unterschied ist nämlich, daß es zu einem Bit-Image keine Maske gibt.
typedef struct { int16_t *bi_pdata; /* Zeiger auf die Grafikdaten */ int16_t bi_wb; /* Breite des Bildes in Bytes */ int16_t bi_hl; /* Höhe in Zeilen */ int16_t bi_x; /* x-Position */ int16_t bi_y; /* y-Position */ int16_t bi_color; /* Farbe */ } BITBLK;
Hinweis: Die Breite eines Bit-Images (Komponente bi_wb) muß stets durch 2 teilbar sein.
Querverweis: OBJECT Objektarten des AES
Diese Struktur ist wie folgt definiert:
typedef struct cicon_data { int16_t num_planes; /* Anzahl der Planes für die folgenden Daten */ int16_t *col_data; /* Zeiger auf Farb-Bitmap in Standardform */ int16_t *col_mask; /* Zeiger auf einzelne Farb-Plane Maske */ int16_t *sel_data; /* Zeiger auf Farb-Bitmap des selekt. Icons */ int16_t *sel_mask; /* Zeiger auf einzelne Plane-Maske des Icons */ struct cicon_data *next_res; /* Zeiger auf Icon anderer Auflösung */ } CICON;
Querverweis: CICONBLK ICONBLK OBJECT
Diese Struktur ist wie folgt definiert:
typedef struct cicon_blk { ICONBLK monoblk; /* Default: monochrome Icons */ CICON *mainlist; /* Farb-Icons für verschiedene Auflösungen */ } CICONBLK;
Querverweis: OBJECT Objektstruktur im AES
typedef struct clrcat { int16_t cc_foreground /* Foreground colour */ int16_t cc_background /* Background colour */ int16_t cc_style /* Fill style */ int16_t cc_pattern /* Fill pattern */ } CLRCAT;
The CLRCAT is used internally by ViewMAX/2 and later to store the colour categories.
Querverweise: X_BUF_V2
typedef void *DIALOG;
typedef struct _dither_mode { struct _dither_mode *next; /* Zeiger auf Nachfolger */ int32_t length; /* Strukturlänge */ int32_t format; /* Datenformat */ int32_t reserved; /* reserviert */ int32_t dither_id; /* Kennung */ int32_t color_modes; /* unterstützte Farbtiefen */ int32_t reserved1; /* reserviert */ int32_t reserved2; /* reserviert */ int8_t name[32]; /* Name des Rasterverfahrens */ } DITHER_MODE;
Querverweis: Druckdialoge pdlg_add_printers
typedef struct _drv_entry { struct _drv_entry *next; /* Zeiger auf Nachfolger */ } DRV_ENTRY;
typedef struct { int32_t magic; /* 'pdnf' */ int32_t length; /* Strukturlänge */ int32_t format; /* Datenformat */ int32_t reserved; /* reserviert */ int16_t driver_id; /* Treibernummer fürs VDI */ int16_t driver_type; /* Treibertyp */ int32_t reserved1; /* reserviert */ int32_t reserved2; /* reserviert */ int32_t reserved3; /* reserviert */ PRN_ENTRY *printers; /* zum Treiber gehörenden Drucker */ DITHER_MODE *dither_modes; /* unterstützte Rasterverfahren */ int32_t reserved4; /* reserviert */ int32_t reserved5; /* reserviert */ int32_t reserved6; /* reserviert */ int32_t reserved7; /* reserviert */ int32_t reserved8; /* reserviert */ int32_t reserved9; /* reserviert */ int8_t device[128]; /* Ausgabedatei des Druckertreibers */ } DRV_INFO;
Querverweis: Druckdialoge pdlg_add_printers
typedef struct { int16_t mwhich; /* Art der Ereignisse */ int16_t mx; /* x-Koordinate des Mauszeigers */ int16_t my; /* y-Koordinate des Mauszeigers */ int16_t mbutton; /* gedrückte Maustaste */ int16_t kstate; /* Status der Sondertasten (kbshift) */ int16_t key; /* Scancode der gedrückten Taste */ int16_t mclicks; /* Anzahl der Mausklicks */ int16_t reserved[9]; /* reserviert */ int16_t msg[16]; /* Message-Buffer */ } EVNT;
Querverweis: fnts_evnt fslx_evnt wdlg_evnt
typedef struct _fnts_item { /* Zeiger auf den nächsten Font oder 0L */ struct _fnts_item *next; /* Anzeige-Funktion für eigene Fonts */ UTXT_FN display; /* ID des Fonts */ int32_t id; /* muß 0 sein, da kein VDI-Font */ int16_t index; /* Flag für äquidistante Fonts */ int8_t mono; /* Flag für Vektorfont */ int8_t outline; /* Anzahl der vordefinierten Punkthöhen */ int16_t npts; /* Zeiger auf den vollständigen Namen */ int8_t *full_name; /* Zeiger auf den Familiennamen */ int8_t *family_name; /* Zeiger auf den Stilnamen */ int8_t *style_name; /* Zeiger auf Feld mit Punkthöhen */ int8_t *pts; /* reserviert, müssen 0 sein */ int32_t reserved[4]; } FNTS_ITEM;
Querverweis: fnts_add Zeichensatzauswahl
typedef void *FNT_DIALOG;
typedef struct G_vectors /* Release 004 */ { int16_t used; int16_t (*keypress)( int32_t *key ); int16_t (*app_switch)( int8_t *process_name, int16_t apid ); int16_t (*gen_event)(void); } G_VECTORS;
used: | A bitmap of which vectors in the rest of the structure are used
by this version of Geneva. Currently this is 7, to indicate that the
first 3 vectors are used.
|
keypress: | This function is called whenever Geneva receives a key from the
keyboard. The A0 register points to a longword containing the keycode
of the key which was pressed:
bits 31-24 23-16 15-8 7-0 shift scan code unused ASCII This is just like the result of Bconin(2) with the result of Kbshift(-1) stored in the high byte. If the keypress function changes this longword to 0L, then the keypress will be ignored. If the longword is changed to some other value, then the new value will be processed. If the keypress function returns a value >= 0, then the application with that ID will receive a X_WM_VECKEY message during its next event loop. |
app_switch: | This function is called whenever the user performs some action
that causes the topmost application to change, like selecting a name
from the Desk menu or topping another application's window.
When called, the A0 register points to a string in appl_find format which is the name of the process that was switched to. The D0 register contains the application ID of the process. Under some circumstances, this function may be called even though the "new" application is already the topmost one. It is also possible for the "apid" in D0 to be -1, if Geneva is in the process of shutting down. If the app_switch function returns a value >= 0, then the application with that ID will receive a X_WM_VECSW message during its next event loop. |
gen_event: | This function is called continually by Geneva. It provides a
way for an application to have Geneva poll a certain condition and
generate an event if something occurs.
This can take the place of using evnt_multi with small timer values in order to poll a condition, and is much more efficient. It can be used in things like a corner clock to see when the time has changed to a new minute. If the gen_event function returns a value >= 0, then the application with that ID will receive a X_WM_VECEVNT message during its next event loop. |
Notes about using vectors:
A vector routine can change registers D0-D2/A0-A1. All others
must be preserved.
No vector routine can call the AES. The keypress and app_switch
vectors must not call GEMDOS functions. All other TOS services can be
used.
If a vector does not wish to generate an event, then it must
return a negative number, like -1.
A vector MUST follow the XBRA protocol. The only exception to
this is Geneva itself, which installs default vectors that do nothing
but return -1.
An application is responsible for removing itself from the
vector chain when it terminates. Failure to do so will most likely
cause a crash in the future. An application should use shel_write mode
9 to tell Geneva that it knows about the AP_TERM message and respond
to that message by removing itself from the list before quitting.
If your vector routine does not wish to generate an event, then
it should pass control through to the previous routine in the XBRA
chain.
If Geneva is running without MiNT, then the vector routines are
always called in supervisor mode. If running with MiNT, then the CPU
is in user mode. When MiNT is in memory protection mode, an
application which uses vectors must at least be in Readable mode, and
should most likely in Global mode.
See the files VECTEST.C and VECTESTS.S for an example.
Querverweis: Cookie, Gnva
typedef int16_t (cdecl *HNDL_OBJ) ( void *dialog, EVNT *events, int16_t obj, int16_t clicks, void *data );
Dabei gilt:
Parameter | Bedeutung | ||||
dialog | Zeiger auf eine Dialogstruktur. Auf diese sollte nicht direkt, sondern nur mit Hilfe der wdlg_xxx Funktionen zugegriffen werden. | ||||
events | Zeiger auf die EVNT-Strukur, die bei wdlg_evnt übergeben wurde (falls der Parameter obj >= 0 ist), oder NULL. | ||||
obj |
Von diesen Funktionsnummern muß nur auf HNDL_CLSD reagiert werden; alle anderen Ereignisse können je nach Bedarf beachtet werden. | ||||
clicks | Anzahl der Mausklicks, falls es sich bei obj um eine Objektnummer handelt. | ||||
data | Falls der Parameter obj eine positive Objektnummer ist, wird hier die Variable user_data aus der Funktion wdlg_create übergeben. Anderenfalls ist der Wert von der entsprechenden Funktionsnummer abhängig. |
Hinweis: Die Funktion wird aufgerufen, wenn auf ein EXIT- oder TOUCHEXIT Objekt geklickt wurde (in diesem Fall ist obj eine positive Objektnummer) oder wenn ein den Dialog betreffendes Ereignis eingetreten ist (dann ist obj negativ und enthält eine entsprechende Funktionsnummer (s.o.)).
Die Parameter werden über den Stack übergeben und die Routine darf die Register d0-d2/a0-a2 verändern. Falls die Funktion mit einer unbekannten Funktionsnummer in obj aufgerufen wird oder eine der obigen Funktionsnummern ignoriert werden soll, muß der Wert 1 zurückgeliefert werden.
Querverweis: Beispiel-Implementation wdlg_create
/* Der folgende Code ist ein Beispiel für eine Implementation der handle_exit Funktion, wie sie z.B. als Parameter bei wdlg_create vorkommt. */ int16_t cdecl handle_exit ( void *dialog, EVNT *events, int16_t obj, int16_t clicks, void *data ) { /* * Ereignis oder Objektnummer? * Alle Ereignisse außer HNDL_CLSD werden bei diesem Beispiel * ignoriert */ if ( obj < 0 ) { if ( obj == HNDL_CLSD ) /* Closer betätigt? */ return( 0 ); /* beenden */ if ( obj == HNDL_EDIT ) { /* In Fensterdialogen kann es nützlich sein, Tasten- kombinationen mit Control in Eingabefeldern zu igno- rieren, damit Shortcuts wie z.B. Ctrl-U, Ctrl-W oder Ctrl-Q in der Eventschleife des Programms abgearbei- tet werden können. In diesem Fall sollte nach HNDL_EDIT eine 0 zurückgeliefert werden, damit die Taste nicht von objc_edit bearbeitet wird. */ } } else { /* ein Objekt ist angewählt worden */ switch ( obj ) /* Aktionen einleiten (falls nötig) */ { case ... . . . case MY_EXIT_OBJECT: ..... return( 0 ); /* beenden */ } } return( 1 ); /* weitermachen */ }
data ist die bei wdlg_init übergebene Variable. Falls handle_exit den Wert 0 zurückliefert, legt wdlg_create keine Dialog-Struktur an (Fehler). Die Variable code wird in clicks übergeben.
Querweise: HNDL_OBJ wdlg_create
data ist user_data. Falls handle_exit den Wert 0 zurückliefert, wird der Dialog geschlossen - wdlg_evnt liefert den Wert 0 zurück. events zeigt auf die bei wdlg_evnt übergebene EVNT-Struktur.
Hinweis: Dieser Code wird nur dann übergeben, wenn ein Nachrichtencode zwischen 20 und 39 empfangen wurde, der nicht mit den anderen Opcodes bearbeitet wird. Er wird z.B. für die Ikonifizierung benötigt.
Achtung: Dieser Opcode wird erst seit der MagiC Version 4.50 vom 18.04.96 unterstützt.
Querweise: HNDL_OBJ wdlg_create
data ist die bei wdlg_open übergebene Variable. Die Variable code wird in clicks übergeben.
Querweise: HNDL_OBJ wdlg_create
data ist user_data. Falls handle_exit den Wert 0 zurückliefert, wird der Dialog geschlossen - wdlg_evnt liefert den Wert 0 zurück.
events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.
Querweise: HNDL_OBJ wdlg_create
data ist user_data. Falls handle_exit den Wert 0 zurückliefert, wird der Dialog geschlossen - wdlg_evnt liefert den Wert 0 zurück.
events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.
Querweise: HNDL_OBJ wdlg_create
data ist user_data. Falls handle_exit den Wert 0 zurückliefert, wird der Dialog geschlossen - wdlg_evnt liefert den Wert 0 zurück.
events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.
Querweise: HNDL_OBJ wdlg_create
data ist user_data. Falls handle_exit den Wert 0 zurückliefert, wird der Dialog geschlossen - wdlg_evnt liefert den Wert 0 zurück.
events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.
Querweise: HNDL_OBJ wdlg_create
data zeigt auf ein Wort mit dem Tastencode. Falls handle_exit den Wert 1 zurückliefert, wird der Tastendruck verarbeitet, bei 0 ignoriert.
events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.
Querweise: HNDL_OBJ wdlg_create
data zeigt auf ein Wort mit dem Tastencode. events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.
Querweise: HNDL_OBJ wdlg_create
data zeigt auf ein Wort mit der Objektnummer des neuen Edit-Felds.
Querweise: HNDL_OBJ wdlg_create
typedef struct { uint16_t *ib_pmask; /* Zeiger auf die Icon-Maske */ uint16_t *ib_pdata; /* Zeiger auf das Icon-Bild */ int8_t *ib_ptext; /* Zeiger auf den Icon-Text */ uint16_t ib_char; /* Zeichen das im Icon erschei- nen soll, sowie Vorder- und Hintergrundfarbe des Icons */ uint16_t ib_xchar; /* x-Koordinate des Buchstabens */ uint16_t ib_ychar; /* y-Koordinate des Buchstabens */ uint16_t ib_xicon; /* x-Koordinate des Icons */ uint16_t ib_yicon; /* y-Koordinate des Icons */ uint16_t ib_wicon; /* Breite des Icons */ uint16_t ib_hicon; /* Höhe des Icons */ int16_t ib_xtext; /* x-Koordinate des Textes */ int16_t ib_ytext; /* y-Koordinate des Textes */ uint16_t ib_wtext; /* Breite des Textes */ uint16_t ib_htext; /* Höhe des Textes */ uint16_t ib_resvd; /* reserviert */ } ICONBLK;
Hinweise zu einzelnen Komponenten:
ib_pmask: Zeiger auf ein Feld von 16-Bit-Werten, in
denen das Bit-Image der Icon-Maske abgelegt ist. Die Icon-Maske legt
fest, an welchen Stellen das Icon überhaupt gezeichnet werden soll
und welche Pixel transparent bleiben sollen. Erzielt wird dieser
Effekt dadurch, daß der Iconhintergrund zunächst mit den Bits der
Maske 'undiert' und dann mit den Icondaten 'geodert' wird.
ib_char:
Bits | Bedeutung |
15..12 | Vordergrundfarbe des Icons |
11..08 | Hintergrundfarbe des Icons |
7.. 0 | Zeichen das im Icon erscheinen soll |
ib_resvd: unbenutzt, wird allerdings von den meisten
RCS-Programmen beim Schreiben in die Resourcedatei aufgenommen.
Für Farbicon unter PC GEM gilt:
In a colour icon, ib_pdata and ib_pmask point to MFDB objects.
Otherwise, they point to the lines of the bitmap.
Keypress description
typedef struct { uint8_t shift; /* bit 0: Right Shift key held */ /* bit 1: Left Shift key held */ /* bit 2: Control key held */ /* bit 3: Alternate key held */ uint8_t scan; /* Scan code or zero */ uint8_t ascii; /* ASCII value or zero */ } KEYCODE;
ascii is compared first with the ASCII value of the key which was pressed. If this fails, the scan code is compared. Currently, the key will match if either bit 0 or bit 1 of "shift" is set, and either [Shift] key is held by the user.
Querverweis: x_appl_flags APPFLAGS x_settings SETTINGS
typedef struct _lbox_item { struct _lbox_item *next; /* Zeiger auf den nächsten Eintrag */ /* in der Scroll-Liste */ int16_t selected; /* Objekt selektiert? */ int16_t data1; /* Daten für das Programm */ void *data2; void *data3; } LBOX_ITEM;
Hinweis: Die Struktur kann aber, wenn bei den Aufrufen entsprechend gecastet wird, durchaus wie das folgende Beispiel aussehen:
typedef struct { void *next; int16_t selected; ... ab hier nach Belieben der Applikation... } LB_EXAMPLE;
Es ist lediglich darauf zu achten, daß als erstes Element ein Zeiger auf den Nachfolger, und als zweites Element ein Wort das angibt, ob der entsprechende Eintrag selektiert ist, vorhanden ist.
Querverweis:
lbox_create lbox_free_list lbox_get_idx lbox_get_item
lbox_get_items
typedef void *LIST_BOX;
Diese Struktur dient der Beschreibung eines Papierformates, und ist wie folgt definiert:
typedef struct _media_size { struct _media_size *next; /* Zeiger auf Nachfolger */ int32_t size_id; /* Kennung des Papierformats */ int8_t name[32]; /* Name des Papierformats */ } MEDIA_SIZE;
Querverweis: Druckdialoge pdlg_add_printers
Diese Struktur dient der Beschreibung eines Papiertyps bzw. Druckmediums, und ist wie folgt definiert:
typedef struct _media_type { struct _media_type *next; /* Zeiger auf Nachfolger */ int32_t type_id; /* Kennung des Papierformats */ int8_t name[32]; /* Name des Papierformats */ } MEDIA_TYPE;
Querverweis: Druckdialoge pdlg_add_printers
typedef struct { OBJECT *mn_tree; /* Adresse des Menü-Objektbaumes */ int16_t mn_menu; /* Index des Parent-Objektes */ int16_t mn_item; /* Anfangs-Menüeintrag (bestimmt */ /* die Position des Menüs */ int16_t mn_scroll; /* 0 = nicht scrollen */ /* >0 = scrollen (ohne scrollbar) */ /* -1 = scrollen (mit scrollbar) */ /* (AES >= 4.1) */ int16_t mn_keystate; /* Tastaturstatus (Shift, Control */ /* bzw. Alternate) */ } MENU;
Querverweis: AES menu_attach menu_popup
Die Struktur MFORM legt das Aussehen des Mauszeigers fest, und ist wie folgt definiert:
typedef struct mfstr { int16_t mf_xhot; /* X-Pos. Aktionspunkt */ int16_t mf_yhot; /* Y-Pos. Aktionspunkt */ int16_t mf_nplanes; /* Anzahl der Planes */ int16_t mf_fg; /* Maskenfarbe */ int16_t mf_bg; /* Zeigerfarbe */ int16_t mf_mask[16]; /* Maskenform */ int16_t mf_data[16]; /* Zeigerform */ } MFORM;
Querverweis: AES graf_mouse
typedef struct { int32_t display; /* Anzeigeverzögerung */ int32_t drag; /* Auswahlverzögerung */ int32_t delay; /* Einfachklick Scroll-Verzögerung */ int32_t speed; /* Scroll-Verzögerung */ int16_t height; /* Scroll-Höhe (Anzahl der darzu- */ /* stellenden Einträge) */ } MN_SET;
Alle Verzögerungszeiten werden in Millisekunden gemessen.
Querverweis: AES menu_settings
typedef struct { int16_t ob_next; /* das nächste Objekt */ int16_t ob_head; /* erstes Kind */ int16_t ob_tail; /* letztes Kind */ uint16_t ob_type; /* Objektart */ uint16_t ob_flags; /* Manipulationsflags */ uint16_t ob_state; /* Objektstatus */ void *ob_spec; /* mehr unter Objektart */ int16_t ob_x; /* x-Koordinate des Objekts */ int16_t ob_y; /* y-Koordinate des Objekts */ int16_t ob_width; /* Breite des Objekts */ int16_t ob_height; /* Höhe des Objekts */ } OBJECT;
ob_next: | Nummer des folgenden Objekts gleicher Ebene oder -falls es das letzte Element in der Ebene ist - des Parent-Objekts. |
ob_head: | Nummer des erstes Kind des Objekts, falls keines -1 |
ob_next: | Nummer des letzen Kind des Objekts, falls keines -1 |
ob_type: | Objektarten des AES |
ob_flags: | Objektflags des AES |
ob_state: | Objektstati des AES |
Querverweis: Objektstruktur im AES
Extended object description
typedef union { struct /* Bitmapped flags */ { unsigned outlined :1; /* Object is OUTLINED */ unsigned shadowed :1; /* Object is SHADOWED */ unsigned draw_3D :1; /* Object is draw in 3D */ unsigned rounded :1; /* Object has round corners */ unsigned atari_3D :1; /* Display the object using Atari */ /* AES 4 style 3D */ unsigned shadow_text:1; /* Draw the text with a shadow */ /* underneath it */ unsigned bold_shadow:1; /* Text is bold (can be combined */ /* with shadow_text) */ unsigned reserved :9; /* Reserved for future use */ unsigned framecol :4; /* Color of frame */ unsigned textcol :4; /* Color of text */ unsigned textmode :1; /* 0: transparent, 1: replace */ unsigned fillpattern:3; /* Fill pattern index */ unsigned interiorcol:4; /* Color of interior */ } s; uint32_t l; /* Longword for accessing all flags */ } OB_PREFER;
atari_3D, shadow_text and bold_shadow present since Release 004.
Querverweis: x_appl_flags APPFLAGS x_settings SETTINGS
typedef struct { OBJECT *pb_tree; /* Zeiger auf den Objektbaum */ int16_t pb_obj; /* Nummer des Objekts */ int16_t pb_prevstate; /* vorheriger Objektstatus */ int16_t pb_currstate; /* neuer Objektstatus */ int16_t pb_x; /* x-Position des Objektes */ int16_t pb_y; /* y-Position des Objektes */ int16_t pb_w; /* Breite des Objektes */ int16_t pb_h; /* Höhe des Objektes */ int16_t pb_xc; /* x-Position des Clipping-Bereichs */ int16_t pb_yc; /* y-Position des Clipping-Bereichs */ int16_t pb_wc; /* Breite des Clipping-Bereichs */ int16_t pb_hc; /* Höhe des Clipping-Bereichs */ int32_t pb_parm; /* Parameter der USERBLK-Struktur */ } PARMBLK;
Hinweis: Das Objekt muß nur neu gezeichnet werden, wenn alter und neuer Status identisch sind; anderenfalls reicht ein 'Update' des Objektbaums aus. Ferner sollten folgende Punkte beachtet werden:
die eigene Funktion muß im Datenregister d0 dem AES
zurückliefern, welche Aspekte des Objektstatus noch aktualisiert
werden müssen. Damit ist es nicht unbedingt nötig, in der eigenen
Ausgabefunktion den Code zum invertieren des Objektes
auszuprogrammieren. Im allgemeinen wird man einige Bits des
Objektstatus selbst bearbeiten wollen, und andere dem AES
überlassen.
die Funktion erhält den PARMBLK-Zeiger auf dem Stack, und muß
daher in Pure-C als 'cdecl' deklariert werden.
ein vollständiges Neuzeichnen des Objektes ist nur dann
nötig, wenn die Komponenten pb_prevstate und
pb_currstate gleich sind; anderenfalls hat sich nur der
Objektstatus geändert (zum Beispiel durch Anklicken).
die eigene Funktion wird de facto als Unterprogramm der AES
ausgeführt. Daher sollte man im Hinblick auf die Stackbenutzung
vorsichtig sein. Außerdem darf man natürlich keine weiteren
AES-Aufrufe machen, da das AES nicht re-entrant ist.
Aufrufe der VDI-Eingabefunktionen sind hingegen an dieser Stelle
erlaubt.
die Komponente pb_parm dient dazu, der eigenen Funktion
weitere Informationen (wie etwa einen Zeiger auf einen String) mit auf
den Weg zu geben.
man sollte sich nie zu weit von der ursprünglichen Optik von
GEM entfernen. Abgerundete Rechtecke oder kursive Texte passen
sicherlich nicht in das normale Erscheinungsbild einer
GEM-Applikation.
typedef int32_t (cdecl *PDLG_HNDL)( struct _prn_settings *settings, struct _pdlg_sub *sub, int16_t exit_obj );
Querverweis: Druckdialoge pdlg_add_sub_dialogs PDLG_SUB
typedef int32_t (cdecl *PDLG_INIT) (struct _prn_settings *settings, struct _pdlg_sub *sub );
Querverweis: Druckdialoge pdlg_add_sub_dialogs PDLG_SUB
typedef int32_t (cdecl *PDLG_RESET) ( struct _prn_settings *settings, struct _pdlg_sub *sub );
Querverweis: Druckdialoge pdlg_add_sub_dialogs PDLG_SUB
Diese Struktur dient der Beschreibung einer Geräteeinstellung, und ist wie folgt definiert:
typedef struct _pdlg_sub { struct _pdlg_sub *next; /* Zeiger auf Nachfolger */ int32_t length; /* Strukturlänge */ int32_t format; /* Datenformat */ int32_t reserved; /* reserviert */ void *drivers; /* nur für interne Dialoge */ int16_t option_flags; /* verschiedene Flags */ int16_t sub_id; /* Kennung des Unterdialogs */ DIALOG *dialog; /* Zeiger auf die Struktur des Fensterdialogs oder 0L */ OBJECT *tree; /* Zeiger auf den Objektbaum */ int16_t index_offset; /* Offset des Unterdialogs */ int16_t reserved1; /* reserviert */ int32_t reserved2; /* reserviert */ int32_t reserved3; /* reserviert */ int32_t reserved4; /* reserviert */ PDLG_INIT init_dlg; /* Initialisierungsfunktion */ PDLG_HNDL do_dlg; /* Behandlungsfunktion */ PDLG_RESET reset_dlg; /* Zurücksetzfunktion */ int32_t reserved5; /* reserviert */ OBJECT *sub_icon; /* Zeiger auf das Icon der Listbox */ OBJECT *sub_tree; /* Objektbaum des Unterdialogs */ int32_t reserved6; /* reserviert */ int32_t reserved7; /* reserviert */ int32_t private1; /* dialogeigene Informationen-1 */ int32_t private2; /* dialogeigene Informationen-2 */ int32_t private3; /* dialogeigene Informationen-3 */ int32_t private4; /* dialogeigene Informationen-4 */ } PDLG_SUB;
Querverweis: Druckdialoge pdlg_add_sub_dialogs
typedef struct { OBJECT *tree; /* Popup-Menü */ int16_t obnum; /* aktuelles Objekt von <tree> */ } POPINFO;
Hinweis: Die Komponente tree zeigt auf einen Objektbaum, der etwa für form_popup als Eingabe dienen könnte. D.h. die Box sollte als Objekt 0 eine G_BOX oder G_IBOX enthalten, die von den anderen Objekten vollständig bedeckt wird. Objekte die nicht auswählbar sind, sollten wie im Dropdownmenü den Status DISABLED erhalten.
Alle wählbaren Objekte müssen den Status SELECTABLE haben. Zusätzlich müssen bei der Verwendung durch G_POPUP alle selektierbaren Objekte vom Typ G_STRING (bzw. G_SHORTCUT) oder G_BUTTON sein und mit zwei Leerstellen beginnen, letzteres wegen des Häkchens, das von form_button bzw. form_do automatisch gesetzt wird!
Wichtig ist, daß ob_x und ob_y von Objekt 0 des Menüs relativ zum G_POPUP-Objekt angegeben werden, d.h. sie werden meistens beide 0 sein. Es wird empfohlen, einen Schatten und einen Rand der Stärke -1 anzugeben.
typedef void *PRN_DIALOG;
typedef struct _prn_entry { /* Zeiger auf Nachfolger */ struct _prn_entry *next; /* Strukturlänge */ int32_t length; /* Datenformat */ int32_t format; /* reserviert */ int32_t reserved; /* Treiberkennung */ int16_t driver_id; /* Treibertyp */ int16_t driver_type; /* Druckerkennung */ int32_t printer_id; /* Druckereigenschaften */ int32_t printer_capabilities; /* reserviert */ int32_t reserved1; /* verschiedene Flags */ int32_t flags; /* Zeiger auf Unterdialoge */ struct _pdlg_sub *sub_dialogs; /* Unterdialog bei Druckerwechsel initialisieren */ PRN_SWITCH setup_panel; /* Unterdialog bei Druckerwechsel schließen */ PRN_SWITCH close_panel; /* Liste vorhand. Auflösungen */ PRN_MODE *modes; /* Liste vorhand. Papierformate */ MEDIA_SIZE *papers; /* Liste der Einzüge */ PRN_TRAY *input_trays; /* Liste der Auswürfe */ PRN_TRAY *output_trays; /* Name des Druckers */ int8_t name[32]; } PRN_ENTRY;
Querverweis: Druckdialoge pdlg_add_printers
Diese Struktur dient der Beschreibung eines Druckermodus, und ist wie folgt definiert:
typedef struct _prn_mode { struct _prn_mode *next; /* Zeiger auf Nachfolger */ int32_t mode_id; /* Modus (Index innerhalb der Datei) */ int16_t hdpi; /* horizontale Auflösung in dpi */ int16_t vdpi; /* vertikale Auflösung in dpi */ int32_t mode_capabilities; /* Moduseigenschaften */ int32_t color_capabilities; /* einstellbare Farbmodi */ int32_t dither_flags; /* Flags, die angeben, ob der korrespondierende Farbmodus mit oder ohne Dithern ansprechbar ist */ MEDIA_TYPE *paper_types; /* geeignete Papiertypen */ int32_t reserved; /* reserviert */ int8_t name[32]; /* Modusname */ } PRN_MODE;
Querverweis: Druckdialoge pdlg_add_printers
typedef struct _prn_settings { int32_t magic; /* 'pset' */ int32_t length; /* (+) Strukturlänge */ int32_t format; /* Strukturtyp */ int32_t reserved; /* reserviert */ int32_t page_flags; /* (+) Flags, u.a. gerade/ungerade Seiten 0x0001 = nur Seiten mit gerader Nummer 0x0002 = dto. mit ungeraden Nummern */ int16_t first_page; /* (+) erste zu druckende Seite (min.1) */ int16_t last_page; /* (+) dto. letzte Seite (max. 9999) */ int16_t no_copies; /* (+) Anzahl der Kopien */ int16_t orientation; /* (+) Drehung 0x0000 = Ausrichtung unbekannt und nicht verstellbar 0x0001 = Seite im Hochformat ausgeben 0x0002 = Seite im Querformat ausgeben */ int32_t scale; /* (+) Skalierung: 0x10000L = 100% */ int16_t driver_id; /* (+) VDI-Gerätenummer */ int16_t driver_type; /* Typ des eingestellten Treibers */ int32_t driver_mode; /* Flags, u.a. für Hintergrunddruck */ int32_t reserved1; /* reserviert */ int32_t reserved2; /* reserviert */ int32_t printer_id; /* Druckernummer */ int32_t mode_id; /* Modusnummer */ int16_t mode_hdpi; /* horizontale Auflösung in dpi */ int16_t mode_vdpi; /* vertikale Auflösung in dpi */ int32_t quality_id; /* Druckmodus (hardwäremäßige Qualität, z.B. Microweave oder Econofast) */ int32_t color_mode; /* Farbmodus */ int32_t plane_flags; /* Flags für auszugebende Farbebenen (z.B. nur cyan) */ int32_t dither_mode; /* Rasterverfahren */ int32_t dither_value; /* Parameter für das Rasterverfahren */ int32_t size_id; /* Papierformat */ int32_t type_id; /* Papiertyp (normal, glossy) */ int32_t input_id; /* Papiereinzug */ int32_t output_id; /* Papierauswurf */ int32_t contrast; /* Kontrast: 0x10000L = normal */ int32_t brightness; /* Helligkeit: 0x1000L = normal */ int32_t reserved3; /* reserviert */ int32_t reserved4; /* reserviert */ int32_t reserved5; /* reserviert */ int32_t reserved6; /* reserviert */ int32_t reserved7; /* reserviert */ int32_t reserved8; /* reserviert */ int8_t device[128]; /* Dateiname für den Ausdruck */ #ifdef __PRINTING__ TPrint mac_settings; /* Einstellung des Mac-Druckertreibers */ #else struct { uint8_t inside[120]; } mac_settings; #endif } PRN_SETTINGS;
Hinweis: Die mit (+) gekennzeichneten Strukturelemente können von der Applikation ausgelesen werden. Auf alle anderen Einträge sollte nicht zugegriffen werden. Daten wie z.B. die Druckerauflösung oder die Farbanzahl sollten nicht der Einstellstruktur entnommen werden, sondern beim Start des Ausdrucks vom Drucker erfragt werden (es wäre z.B. möglich, daß der Druckertreiber durch Speichermangel gezwungen wird, die Druckauflösung gegenüber der in PRN_SETTINGS eingetragenen Einstellung zu verringern).
Querverweis: Druckdialoge pdlg_open
typedef int32_t (cdecl *PRN_SWITCH) ( struct _drv_entr *drivers, struct _prn_settings *settings, struct _prn_entry *old_printer, struct _prn_entry *new_printer );
Hinweis: Die Komponente old_printer kann auch 0L sein!
Querverweis: Druckdialoge pdlg_add_printers
Diese Struktur dient der Beschreibung eines Einzugs bzw. Auswurfs, und ist wie folgt definiert:
typedef struct _prn_tray { struct _prn_tray *next; /* Zeiger auf Nachfolger */ int32_t tray_id; /* Nummer des Einzugs/Auswurfs */ int8_t name[32]; /* Name des Schachts */ } PRN_TRAY;
Querverweis: Druckdialoge pdlg_add_printers
typedef struct { uint16_t rsh_vrsn; /* Null */ uint16_t rsh_object; /* Position des Objekt-Feldes */ uint16_t rsh_tedinfo; /* Position der TEDINFO-Strukturen */ uint16_t rsh_iconblk; /* Position der ICONBLK-Strukturen */ uint16_t rsh_bitblk; /* Position der BITBLK-Strukturen */ uint16_t rsh_frstr; /* Position der freien Strings */ uint16_t rsh_string; /* unbenutzt */ uint16_t rsh_imdata; /* Position der Image-Daten */ uint16_t rsh_frimg; /* Position der freien Images */ uint16_t rsh_trindex; /* Position der Objektbaumtabelle */ uint16_t rsh_nobs; /* Gesamtzahl der Objekte */ uint16_t rsh_ntree; /* Gesamtzahl der Objektbäume */ uint16_t rsh_nted; /* Gesamtzahl der TEDINFO-Strukturen */ uint16_t rsh_nib; /* Gesamtzahl der ICONBLK-Strukturen */ uint16_t rsh_nbb; /* Gesamtzahl der BITBLK-Strukturen */ uint16_t rsh_nstring; /* Gesamtzahl der Strings */ uint16_t rsh_nimages; /* Gesamtzahl der Images */ uint16_t rsh_rssize; /* Gesamtlänge der RSC-Datei */ } RSHDR;
Hinweis: Alle Positionsangaben sind relativ zum Dateianfang zu verstehen. Noch ein Wort zu den 'freien Strings': zu diesen gehören nicht nur die Zeichenketten, in denen sich die Daten für die Alarmboxen befinden, sondern auch alle anderen Strings, die ein Programm zu seiner Arbeit benutzt. Ein Beispiel dafür wäre der Dateiname einer einzulesenden Datei oder ein Eintrag, der mit menu_text in einem Menü vorgenommen wird.
Diesem Kopf folgen die eigentlichen Resource-Daten. Man beachte dabei, daß eine Resource-Datei aufgrund der Verwendung von 16-Bit-Werten als Zeiger nur eine Gesamtgröße von maximal 64 Kbyte erreichen kann. Dateien dieses Formats werden von allen RCS-Programmen abgespeichert.
Anwender des Programms Interface und RSM (Resource Master) können auch mit Resource-Dateien > 64 Kbyte arbeiten. Auch das Betriebssystem MagiC unterstützt ab Version 3 Resourcedateien von mehr als 64 Kbyte; das Laden der Resource erfolgt wie üblich per rsrc_load, der Rest wird völlig transparent vom System übernommen.
Querverweis: rsrc_rcfix RSXHDR
typedef struct { uint16_t rsh_vrsn; /* should be 3 */ uint16_t rsh_extvrsn; /* not used */ /* initialized to 'IN' für Interface, */ /* 'RM' für ResourceMaster, */ /* 'OR' für ORCS */ uint32_t rsh_object; uint32_t rsh_tedinfo; uint32_t rsh_iconblk; /* list of ICONBLKS */ uint32_t rsh_bitblk; uint32_t rsh_frstr; uint32_t rsh_string; uint32_t rsh_imdata; /* image data */ uint32_t rsh_frimg; uint32_t rsh_trindex; uint32_t rsh_nobs; /* counts of various structs */ uint32_t rsh_ntree; uint32_t rsh_nted; uint32_t rsh_nib; uint32_t rsh_nbb; uint32_t rsh_nstring; uint32_t rsh_nimages; uint32_t rsh_rssize; /* Gesamtlänge der RSC-Datei */ } RSXHDR;
typedef struct { int8_t scancode; int8_t nclicks; int16_t objnr; } SCANX;
Hinweis: Die Struktur enthält die Zuordnung für die Taste mit dem Scancode scancode, bei deren Betätigung ein nclicks-facher Mausklick auf das Objekt mit der Nummer objnr ausgeführt wird. Das Ende der Tabelle wird durch einen Scancode von Null markiert.
Querverweis: AES MagiC XDO_INF Scan-Code Tabelle
Describes Geneva's global settings
typedef struct Settings { int16_t version; /* Version SETTINGS is for, in BCD */ int16_t struct_len; /* Total # of bytes in SETTINGS */ int16_t boot_rez; /* ST/TT resolution at startup */ int16_t falcon_rez; /* Falcon video mode at startup */ union /* Preferences */ { struct /* Bitmapped flags */ { unsigned pulldown :1; /* use pulldown menus */ unsigned insert_mode :1; /* insert in dialog edits */ unsigned long_titles :1; /* long underlines X_UNDERLINE */ unsigned alerts_under_mouse:1; /* alerts appear under mouse */ unsigned fsel_1col :1; /* column in Item Selector */ unsigned grow_shrink :1; /* 1: FMD_GROW/SHRINK on */ unsigned tear_aways_topped :1; /* 1: tear aways always usable */ unsigned auto_update_shell :1; /* */ unsigned alert_mode_change :1; /* */ unsigned ignore_video_mode :1; /* */ unsigned no_alt_modal_equiv:1; /* rel 004 */ unsigned no_alt_modeless_eq:1; /* rel 004 */ unsigned preserve_palette :1; /* rel 004 */ unsigned mouse_on_off :1; /* rel 004 */ unsigned top_all_at_once :1; /* rel 005 */ unsigned child_pexec_single:1; /* rel 006 */ } s; uint16_t i; /* Word for accessing all flags */ } flags; /* Preferences */ int16_t gadget_pause; /* # of 50 Hz timer tics to wait */ KEYCODE menu_start; /* Key to start menus */ KEYCODE app_switch; /* Key to toggle between apps */ KEYCODE app_sleep; /* */ KEYCODE ascii_table; /* Key to open ASCII table */ KEYCODE redraw_all; /* Key to redraw whole screen */ KEYCODE wind_keys[13]; /* Keys for window events */ OB_PREFER color_3D[4]; /* Colors for 3D objects */ OB_PREFER color_root[4]; /* Colors for root objects */ OB_PREFER color_exit[4]; /* Colors for EXIT objects */ OB_PREFER color_other[4]; /* Colors for other objects */ int8_t sort_type /* fsel sort type, 0(Name) - 4(None) */ int8_t find_file[26] /* fsel Search string */ int8_t fsel_path[10][35] /* Item Selector paths */ int8_t fsel_ext[10][6]; /* Item Selector extension strings */ KEYCODE cycle_in_app; /* rel 004 */ KEYCODE iconify; /* rel 004 */ KEYCODE alliconify; /* rel 004 */ KEYCODE procman; /* rel 006 */ KEYCODE unused[4]; int8_t graymenu; /* rel 004 */ int8_t reserved; /* rel 004 */ union /* rel 006 */ { struct { unsigned procman_details :1; unsigned reserved :31; } s; unsigned int32_t l; } flags2; } SETTINGS;
The color_xx arrays are indexed depending upon the number of bitplanes in the current resolution: 1-plane=0, 2-planes=1, 4-planes=2, >4-planes=3.
The wind_keys array is indexed using the following constants:
XS_UPPAGE | 0 | Index for up page key |
XS_DNPAGE | 1 | Index for down page key |
XS_UPLINE | 2 | Index for up line key |
XS_DNLINE | 3 | Index for down line key |
XS_LFPAGE | 4 | Index for page left key |
XS_RTPAGE | 5 | Index for page right key |
XS_LFLINE | 6 | Index for line left key |
XS_RTLINE | 7 | Index for line right key |
XS_CLOSE | 8 | Index for close box key |
XS_CYCLE | 9 | Index for cycle window key |
XS_FULL | 10 | Index for full window key |
XS_LFINFO | 11 | Index for info left key |
XS_RTINFO | 12 | Index for info right key |
Querverweis: x_settings KEYCODE OB_PREFER
typedef int16_t (cdecl *SET_ITEM)( LIST_BOX *box, OBJECT *tree, struct _lbox_item *item, int16_t obj_index, void *user_data, GRECT *rect, int16_t first );
Dabei gilt:
Parameter | Bedeutung |
box | Zeiger auf die Listbox-Struktur |
tree | Zeiger auf den Objektbaum des Dialogs |
item | Zeiger auf LBOX_ITEM-Struktur des zu setzenden Eintrags |
obj_index | Nummer des zu setzenden Objektes |
user_data | Zeiger der bei lbox_create übergeben wurde |
rect | Rechteck für das Objekt-Redraw (oder NULL) |
first | Nummer des ersten sichtbaren Elements für Slider-B |
Hinweis: Bei einer Listbox, die nur Text-Strings enthält, ist dies typischerweise eine Funktion, die einen String, auf den die LBOX_ITEM Struktur verweist, in das Objekt obj_index kopiert. Der Parameter rect ist 0L, wenn ein Redraw der Dialogbox durchgeführt wird oder wenn lbox_update aufgerufen wurde. Er ist hingegen nicht 0L, wenn der Anwender ein Objekt selektiert oder deselektiert hat, und zeigt auf das GRECT für den Redraw.
Der Rückgabewert der Funktion ist die Nummer des Startobjekts für die Funktion objc_draw bzw. wdlg_redraw.
Bei Einträgen in der Listbox, die aus mehreren Objekten bestehen, ist es manchmal sinnvoll bei Selektion/Deselektion eines Objekts das Redrawrechteck zu verkleinern oder das Startobjekt zu ändern, um unnötige Zeichenoperationen und unnötiges Geflacker zu vermeiden. In den meisten Fällen rufen die Listbox-Routinen nach der oben beschriebenen Funktion die Routinen objc_draw bzw. wdlg_redraw auf, um den geänderten Inhalt anzuzeigen.
Der Parameter first enthält die Nummer des ersten sichtbaren Elements für Slider B, wenn die Listbox 2 Slider hat. Bei einer (vertikalen) Listbox mit Text-Strings und zwei Slidern gibt man z.B. beim Aufruf von lbox_create die Anzahl der sichtbaren Zeichen in visible_b, die gesamte Stringlänge in entries_b und den Index des ersten sichtbaren Zeichens in first_b an. Wird der Text horizontal gescrollt, wird die Funktion für alle sichtbaren Strings aufgerufen und der Bereich neugezeichnet bzw. verschoben. Wenn die Listbox nur einen Slider hat, ist first immer 0.
Querverweis: Listboxen lbox_create
typedef struct { int16_t dummy; /* ein Nullwort */ int32_t magic; /* 'SHEL', wenn Shell... */ int16_t isfirst; /* erster Aufruf der Shell */ int32_t lasterr; /* letzter Fehler */ int16_t wasgr; /* Programm war Grafikapp. */ } SHELTAIL;
Hinweis: Diese Informationen bekommt ein alternatives Desktop von MagiC beim Programmstart übermittelt (per shel_read zu ermitteln). Gibt die Shell einen negativen Fehlercode zurück, so wird MAGXDESK wieder aktiviert.
Wenn die Komponente isfirst gesetzt ist, ist der Status etwa aus der DESKTOP.INF-Datei zu lesen, anderenfalls aus einer temporären Datei bzw. dem Shell-Puffer.
Die Komponente lasterr entspricht dem Rückgabewert des vorher gelaufenen Programms. Wenn dies ein GEM-Programm war, ist der Fehler bereits per Alertbox angezeigt worden. Das Langwort ist negativ, wenn der Fehler beim Pexec selbst auftrat; ein Programm-Rückgabewert besitzt immer ein High-Word von 0.
Querverweis: AES GEM shel_wdef
typedef struct xshelw { const char *newcmd; /* command line */ int32_t psetlimit; /* value for Psetlmit() */ int32_t prenice; /* value for Prenice() */ const char *defdir; /* default diretory */ char *env; /* environment */ int16_t uid; /* New child's UID */ int16_t gid; /* New child's GID */ } SHELW;
typedef void (cdecl *SLCT_ITEM)( LIST_BOX *box, OBJECT *tree, struct _lbox_item *item, void *user_data, int16_t obj_index, int16_t last_state );
Dabei gilt:
Parameter | Bedeutung |
box | Zeiger auf Listbox-Struktur |
tree | Zeiger auf den Objektbaum des Dialogs |
item | Zeiger auf die LBOX_ITEM-Struktur des ausgewählten Eintrags |
user_data | Zeiger der bei lbox_create übergeben wurde |
obj_index | ist die Nummer des angewählten Objekts. Bei einem Doppelklick ist ähnlich wie nach form_do das oberste Bit gesetzt. Wenn obj_index 0 ist, heißt das, daß dem Eintrag kein Objekt zugeordnet ist; er ist nicht sichtbar. Normalerweise ist das nur der Fall, wenn gescrollt wird und durch Auswahl eines neuen Objekts die (mittlerweile nicht mehr sichtbare) Selektion gelöscht werden muß. |
last_state | ist der vorhergehende Status des Objekts. last_state kann auch den gleichen Wert wie item->selected haben. In diesem Fall kann die Funktion slct normalerweise sofort verlassen werden. |
Querverweis: lbox_create
typedef struct { int8_t *string; /* etwa "TOS|KAOS|MAG!X" */ int16_t num; /* Nr. der aktuellen Zeichenkette */ int16_t maxnum; /* maximal erlaubtes <num> */ } SWINFO;
Querverweis: AES GEM G_SWBUTTON
Die TEDINFO-Struktur wird benutzt um ein Textobjekt näher zu beschreiben, und ist wie folgt definiert:
typedef struct { int8_t *te_ptext; /* Zeiger auf einen String */ int8_t *te_ptmplt; /* Zeiger auf die Stringmaske */ int8_t *te_pvalid; /* Zeiger auf den Gültigkeitsstring */ int16_t te_font; /* Zeichensatz */ int16_t te_fontid; /* GDOS Font-ID */ int16_t te_just; /* Justierung des Textes: 0 = linksbündig 1 = rechtsbündig 2 = zentriert */ int16_t te_color; /* Farbe */ int16_t te_fontsize; /* GDOS Font-Größe in Punkten */ int16_t te_thickness; /* Rahmenbreite */ int16_t te_txtlen; /* Maximale Länge des Textes */ int16_t te_tmplen; /* Länge der Stringmaske */ } TEDINFO;
Dabei gilt es, die folgenden Einzelheiten zu beachten:
te_ptext: Wenn das erste Zeichen ein Klammeraffe (@)
ist, werden alle folgenden Zeichen als Platzhalter angesehen, und der
zunächst ausgegebene String besteht aus Leerzeichen. Folge: Der
Klammeraffe kann niemals am Anfang eines Edit-Feldes stehen!
te_ptmplt: Schablone (template). Sie wird nur bei
G_FTEXT und G_FBOXTEXT verwendet, d.h. bei G_TEXT und G_BOXTEXT kann
hier ein Null-Zeiger stehen. Bei der Ausgabe werden alle '_' Zeichen
in der Schablone sukzessive durch die Zeichen in te_ptext
ersetzt, d.h. es wird eine Misch-Zeichenkette gebildet. I.A. wird die
Schablone also soviele '_' Zeichen enthalten, wie der Puffer für
te_ptext lang ist (ohne abschließendes Nullbyte).
te_pvalid: String, der für jedes Zeichen in
te_ptext eine Zeichenkette enthält, die über die Gültigkeit
verschiedener Zeichen an dieser Stringposition Auskunft gibt. Es gilt:
Zeichen | Bedeutung |
1 - 9 | Accept any digit from 0 to that number. This is handy for doing octal ('7') or binary ('1') validation. (Geneva) |
9 | nur Ziffern |
A | nur Großbuchstaben/Leerzeichen |
a | nur Buchstaben/Leerzeichen |
N | Großbuchstaben, Ziffern, Leerzeichen |
n | Buchstaben, Ziffern, Leerzeichen |
F | alle Zeichen, die zu einem Dateinamen gehören und '*', '?' und ':'. |
f | alle Zeichen, die zu einem Dateinamen, ohne '*', '?' und ':'. |
h | Hexadezimale Zeichen. (Geneva) |
H | Hexadezimal Zeichen. Kleinbuchstaben a - f werden in Großbuchstaben A - F umgewandelt. (Geneva) |
P | alle Zeichen, die zu einem Pfadnamen gehören |
p | analog 'P', aber ohne die Zeichen '?' und '*' |
m | alle Zeichen, die für einen langen Dateinamen gültig sind; d.h. alle Zeichen außer Steuerzeichen (ASCII < 32), sowie außer ':' und '\'. Dieser Code wird z.Zt. nur von MagiC unterstützt. |
X | alle Zeichen |
x | alle Zeichen, Kleinbuchstaben werden automatisch in Großbuchstaben umgewandelt. (Geneva) |
te_font:
3 = normal
5 = kleiner Zeichensatz
Für weiters siehe unten.
te_fontid:
Für weiters siehe unten.
te_color: Für die Farbe des begrenzenden Rechteckes
gilt die folgende Belegung:
Bit | Bedeutung | ||||||
12..15 | Rahmenfarbe (0..15) | ||||||
08..11 | Textfarbe (0..15) | ||||||
7 | Text (0 = transparent, 1 = deckend) | ||||||
4.. 6 | Intensität
| ||||||
0.. 3 | Innenfarbe (0..15) |
te_thickness: Für den Rahmen sind folgende Werte
gültig:
Wert | Bedeutung |
0 | kein Rahmen |
1.. 128 | Rand liegt 1 bis 128 Pixel im Inneren |
-1..-127 | Rand liegt 1 bis 127 Pixel außerhalb des Objektes |
Hinweis: Die Komponenten te_fontid und te_fontsize waren bisher reserviert. Ab AES-Version 4.1 ist es möglich, beliebige GDOS-Fonts für TEDINFO-Objekte zu benutzen.
Dazu ist über die Komponente te_font die Art des Zeichensatzes zu spezifizieren:
te_font | Bedeutung |
0 | SpeedoGDOS Font |
1 | SpeedoGDOS Font (monospaced) |
2 | GDOS Bitmap-Font |
3 | System-Zeichensatz |
5 | kleiner System-Zeichensatz |
Für Werte im Bereich 0..2 von te_font kann dann über die Komponenten te_fontid bzw. te_fontsize der gewünschte Zeichensatz und die gewünschte Punktgröße eingestellt werden.
Das Vorhandensein der neuen Möglichkeiten kann am einfachsten per appl_getinfo (Opcode 13) ermittelt werden.
Querverweis: AES GEM OBJECT XTED Scrollende Eingabefelder
typedef struct { int16_t cdecl (*ub_code)(PARMBLK *parmblock); int32_t ub_parm; } USERBLK;
Hinweis: Die Funktion ub_code wird bei jedem Aufruf von objc_draw und objc_change für das entsprechende Objekt aufgerufen. Die Komponente ub_parm kann als optionaler Parameter angesehen werden.
Diese Funktion ist wie folgt deklariert:
typedef void (cdecl *UTXT_FN) (int16_t x, int16_t y, int16_t *clip_rect, int32_t id, int32_t pt, int32_t ratio, int8_t *string);
Querverweis: AES fnts_add FNTS_ITEM Zeichensatzauswahl
typedef struct WindTree { int16_t handle; /* Handle of window being modified */ int16_t count; /* Number of objects in window */ int16_t flag; /* Location to copy to/from */ OBJECT *tree; } WIND_TREE;
Parameter | Meaning | ||||||
flag |
|
Querverweis: x_wind_tree
Übergabe-Struktur zum Einklinken
typedef struct { int16_t version; /* Versionsnummer der Struktur */ int32_t wsizeof; /* Größe der WINDOW-Struktur */ int16_t whshade; /* Höhe eines ge-shade-ten Fensters */ void (*wbm_create)( WININFO *w ); void (*wbm_skind) ( WININFO *w ); void (*wbm_ssize) ( WININFO *w ); void (*wbm_sslid) ( WININFO *w, int16_t vertical ); void (*wbm_sstr) ( WININFO *w ); void (*wbm_sattr) ( WININFO *w, int16_t chbits ); void (*wbm_calc) ( int16_t kind, int16_t *fg ); int16_t (*wbm_obfind)( WININFO *w, int16_t x, int16_t y ); } WINFRAME_HANDLER;
Querverweis:
sys_set_winframe_manager WININFO WINFRAME_SETTINGS
typedef struct { int16_t flags; int16_t h_inw; void *finfo_inw; } WINFRAME_SETTINGS;
Bits von flags:
#define NO_BDROP 1
Querverweis:
sys_set_winframe_manager WINFRAME_HANDLER WININFO
WINDOW-Struktur für MagiC-Kernel
typedef struct { int16_t state; int16_t attr; void *own; /* (APPL *) */ int16_t kind; /* von wind_create() */ char *name; /* Zeiger auf Titelzeile */ char *info; /* Zeiger auf Infozeile */ GRECT curr; GRECT prev; GRECT full; GRECT work; GRECT overall; /* Umriß */ GRECT unic; GRECT min; /* Minimale Größe */ int16_t oldheight; /* alte Höhe vor Shading */ int16_t hslide; /* horizontale Schieberposition */ int16_t vslide; /* vertikale Schieberposition */ int16_t hslsize; /* horizontale Schiebergröße */ int16_t vslsize; /* vertikale Schiebergröße */ void *wg; /* Rechteckliste */ void *nextwg; /* nächstes Rechteck der Liste */ int16_t whdl; OBJECT tree[N_OBJS]; int16_t is_sizer; int16_t is_info; int16_t is_rgtobjects; int16_t is_botobjects; TEDINFO ted_name; TEDINFO ted_info; } WININFO;
Bits von state:
#define OPENED 1
#define COVERED 2
#define ACTIVE 4
#define LOCKED 8
#define ICONIFIED 32
#define SHADED 64
Querverweis:
sys_set_winframe_manager WINFRAME_HANDLER WINFRAME_SETTINGS
Diese Struktur ist wie folgt definiert:
typedef struct { int16_t dst_apid; /* ID der Ziel-Applikation */ int16_t unique_flg; /* Nachrichten überschreiben? */ void *attached_mem; /* Zeiger auf Speicherblock */ int16_t *msgbuf; /* Nachrichenpuffer */ } XAESMSG;
Hinweis: Die Komponente unique_flg gibt an, ob gleichartige Nachrichten (d.h. solche mit gleichem Nachrichtentyp msgbuf[0]) von der neuen Nachricht überschrieben werden sollen.
Wenn attached_mem nicht NULL ist, wird damit ein per Malloc allozierter Speicherblock angegeben, der die erweiterten Nachrichten-Informationen enthält. Die Länge dieses Blocks ist beliebig und für das System uninteressant, sie könnte z.B. als erstes Langwort des Blocks oder in msgbuf [4,5] übergeben werden. Das System weist den Speicherblock der Zielapplikation zu und übermittelt dessen Adresse in msgbuf[6,7].
Wichtig: Die aufrufende Applikation muß davon ausgehen, daß msgbuf[6,7] nach dem Aufruf von appl_write zerstört sind. Das System behält sich vor, den Inhalt des Speicherblocks umzukopieren und den übergebenen Block freizugeben. Der Aufrufer darf nach dem appl_write nicht mehr auf den Block zugreifen und ihn auf gar keinen Fall freigeben!
Gibt appl_write einen Fehlercode zurück, so ist der Block nicht übergeben worden und gehört nach wie vor der aufrufenden Applikation. Ein Fehler tritt dann auf, wenn:
die Zielapplikation ungültig (nicht existent oder eingefroren)
ist
der Nachrichtenpuffer der Zielapplikation voll ist
die Zielapplikation kein Prozeß ist (z.B. der SCRENMGR) und ein
attached memory block angegeben worden ist.
Querverweis: AES appl_write GEM
typedef struct { SCANX *unsh; /* Tabellen für UnShift-Kombinationen */ SCANX *shift; /* Tabellen für Shift-Kombinationen */ SCANX *ctrl; /* Tabellen für Control-Kombinationen */ SCANX *alt; /* Tabellen für Alternate-Kombinationen */ void *resvd; /* reserviert */ } XDO_INF;
Hinweis: In dieser Struktur liegen Zeiger auf Tabellen, die einem Scancode eine Objektnummer der Dialogbox zuordnen. Hiermit ist es auf einfache Weise möglich, Dialoge vollständig über die Tastatur zu bedienen. Der Parameter resvd ist für spätere Zwecke reserviert, und muss immer NULL sein.
Querverweis: AES form_keybd form_xdo MagiC Scan-Code Tabelle
Describes font being used and window gadget borders
typedef struct { int16_t font_id; /* VDI font ID# */ int16_t point_size; /* Point size of the font */ int16_t gadget_wid; /* Width of border around a char in a window gadget */ int16_t gadget_ht; /* Height of border around a char in a window gadget */ } XFONTINFO;
gadget_wid and gadget_ht are added to the width and height of the characters. These values should always be >= 0.
Querverweis: x_appl_font
typedef int16_t (cdecl XFSL_FILTER) (int8_t *path, int8_t *name, XATTR *xa);
Querverweis: fslx_do fslx_open
typedef struct { int8_t *command; int32_t limit; int32_t nice; int8_t *defdir; int8_t *env; } XSHW_COMMAND;
Querverweis: shel_write
Diese Struktur wird im Zusammenhang mit scrollbaren Texteditfeldern benötigt.
typedef struct _xted { int8_t *xte_ptmplt; int8_t *xte_pvalid; int16_t xte_vislen; int16_t xte_scroll; } XTED;
Querverweis: Scrollende Eingabefelder TEDINFO
typedef struct x_buf_v2 { int16_t buf_len /* Length of the structure, including this word. */ /* Future versions of this structure (X_BUF_V3 etc.) */ /* may be bigger. */ int16_t arch /* 16 for 16-bit AES, 32 for hypothetical 32-bit AES. */ CLRCAT *cc /* Address of an array of 16 CLRCAT structures. */ /* This is so that they can be read by a program; in */ /* ViewMAX, the colors could be set but not reread. */ OBJECT *w_active /* Address of an object tree (19 elements) used to */ /* draw window elements. Included so a program can */ /* change symbols on window buttons. */ int8_t *info /* Address of a 0-terminated ASCII string (at most */ /* 40 characters, no newlines) describing the AES */ int32_t abilities /* A bitmapped field describing what optional */ /* functions this AES provides: */ /* ABLE_GETINFO 1 bit 0 : xapp_getinfo supported */ /* ABLE_PROP 2 bit 1 : prop_get, prop_put and prop_del supported */ /* ABLE_WTREE 4 bit 2 : wind_get and wind_set can change glyphs */ /* ABLE_X3D 8 bit 3 : GEM/5 3D using DRAW3D */ /* ABLE_XSHL 16 bit 4 : xshl_getshell & xshl_putshell */ /* ABLE_PROP2 32 bit 5 : prop_gui_get, prop_gui_set */ /* ABLE_EMSDESK 64 bit 6 : xgrf_dtimage supports EMS */ /* ABLE_XBVSET 128 bit 7 : supports 32 disc drives */ } X_BUF_V2;
An initialised X_BUF_V2 is one in which all members are 0 except buf_len. This initialised buffer is then passed to appl_init. On return, if arch is 0 then the structure was not filled in by the AES; otherwise it was. The buf_len field may be reduced, if the AES was expecting an earlier version of the structure (ie, X_BUF_V1); this should not be a problem because the structures are forward and backward compatible.
Querverweis: appl_init