Home AESAES AES-FunktionslisteAES-Funktionsliste XCONTROLXCONTROL

8.27 AES-Strukturen


8.27.1 AESPB

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;

8.27.2 ANI_MOUSE

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

8.27.3 APPFLAGS

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

8.27.4 APFLG

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

8.27.5 APPLRECORD

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:
Linke Maustaste: 0x0001
Rechte Maustaste: 0x0002

Das (low-WORD) enthält die Anzahl der Clicks.
2   Maus-Event X-Koordinate (High-Word), Y-Koordinate (Low-Word).
3   Tastatur-Event
Bits 24-31 Scan-Code
Bits 16-23 ASCII Code
Low-Word Zustand der Umschaltasten (0 = nicht gedrückt, 1 = gedrückt):
Shift-Rechts: 0x0001
Shift-Links: 0x0002
Control: 0x0004
Alternate: 0x0008

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

8.27.6 Die Bit-Block-Struktur

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

8.27.7 CICON

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

8.27.8 CICONBLK

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

8.27.9 CLRCAT

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

8.27.10 DIALOG

typedef void *DIALOG;

8.27.11 DITHER_MODE

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

8.27.12 DRV_ENTRY

typedef struct _drv_entry
{
   struct _drv_entry *next; /* Zeiger auf Nachfolger */
} DRV_ENTRY;

8.27.13 DRV_INFO

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

8.27.14 EVNT

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

8.27.15 FNTS_ITEM

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

8.27.16 FNT_DIALOG

typedef void *FNT_DIALOG;

8.27.17 G_VECTORS

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:

See the files VECTEST.C and VECTESTS.S for an example.

Querverweis: Cookie, Gnva

8.27.18 HNDL_OBJ

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
>=0: Objektnummer
<0: Funktionsnummer:
 -1 = HNDL_INIT    // Dialog initialisieren
 -2 = HNDL_MESG    //
 -3 = HNDL_CLSD    // Dialogfenster wurde geschlossen
 -5 = HNDL_OPEN    // Dialog-Initialisierung abschließen
 -6 = HNDL_EDIT    // Zeichen für ein Editfeld prüfen
 -7 = HNDL_EDDN    // Zeichen wurde ins Editfeld gesetzt
 -8 = HNDL_EDCH    // Editfeld wurde gewechselt
 -9 = HNDL_MOVE    // Dialog wurde verschoben
-10 = HNDL_TOPW    // Dialogfenster kam nach oben
-11 = HNDL_UNTP    // Dialogfenster ist nicht aktiv

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

8.27.18.1 Beispiel zu HNDL_OBJ

/* 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 */
}

8.27.18.2 HNDL_INIT

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

8.27.18.3 HNDL_MESG

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

8.27.18.4 HNDL_OPEN

data ist die bei wdlg_open übergebene Variable. Die Variable code wird in clicks übergeben.

Querweise: HNDL_OBJ   wdlg_create

8.27.18.5 HNDL_CLSD

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

8.27.18.6 HNDL_MOVE

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

8.27.18.7 HNDL_TOPW

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

8.27.18.8 HNDL_UNTP

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

8.27.18.9 HNDL_EDIT

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

8.27.18.10 HNDL_EDDN

data zeigt auf ein Wort mit dem Tastencode. events zeigt auf die bei wdlg_evnt überg. EVNT-Struktur.

Querweise: HNDL_OBJ   wdlg_create

8.27.18.11 HNDL_EDCH

data zeigt auf ein Wort mit der Objektnummer des neuen Edit-Felds.

Querweise: HNDL_OBJ   wdlg_create

8.27.19 ICONBLK

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:

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.

Querverweis: CICONBLK   OBJECT

8.27.20 KEYCODE

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

8.27.21 LBOX_ITEM

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

8.27.22 LIST_BOX

typedef void *LIST_BOX;

8.27.23 MEDIA_SIZE

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

8.27.24 MEDIA_TYPE

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

8.27.25 MENU

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

8.27.26 MFORM

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

8.27.27 MN_SET

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

8.27.28 OBJECT

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

8.27.29 OB_PREFER

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

8.27.30 PARMBLK

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:

Querverweis: AES   GEM   USERBLK

8.27.31 PDLG_HNDL

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

8.27.32 PDLG_INIT

typedef int32_t (cdecl *PDLG_INIT) (struct _prn_settings *settings,
                                 struct _pdlg_sub *sub );

Querverweis: Druckdialoge   pdlg_add_sub_dialogs   PDLG_SUB

8.27.33 PDLG_RESET

typedef int32_t (cdecl *PDLG_RESET) ( struct _prn_settings *settings,
                                   struct _pdlg_sub *sub );

Querverweis: Druckdialoge   pdlg_add_sub_dialogs   PDLG_SUB

8.27.34 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

8.27.35 POPINFO

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.

Querverweis: MagiC   G_POPUP

8.27.36 PRN_DIALOG

typedef void *PRN_DIALOG;

8.27.37 PRN_ENTRY

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

8.27.38 PRN_MODE

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

8.27.39 PRN_SETTINGS

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

8.27.40 PRN_SWITCH

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

8.27.41 PRN_TRAY

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

8.27.42 RSHDR

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

8.27.43 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;

Querverweis: rsrc_load   RSHDR

8.27.44 SCANX

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

8.27.45 SETTINGS

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

8.27.46 SET_ITEM

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

8.27.47 SHELTAIL

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

8.27.48 SHELW

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;

8.27.49 SLCT_ITEM

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

8.27.50 SWINFO

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

8.27.51 TEDINFO

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:

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

8.27.52 USERBLK

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.

8.27.53 UTXT_FN

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

8.27.54 WIND_TREE

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
Bit 0: Auto resize (X_WTFL_RESIZE=1)
Bit 1: Process clicks (X_WTFL_CLICKS=2)
Bit 2: Resize sliders, info (X_WTFL_SLIDERS=4)

Querverweis: x_wind_tree

8.27.55 WINFRAME_HANDLER

Ü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

8.27.56 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

8.27.57 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

8.27.58 XAESMSG

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:

Querverweis: AES   appl_write   GEM

8.27.59 XDO_INF

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

8.27.60 XFONTINFO

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

8.27.61 XFSL_FILTER

typedef int16_t (cdecl XFSL_FILTER) (int8_t *path, int8_t *name,
       XATTR *xa);

Querverweis: fslx_do   fslx_open

8.27.62 XSHW_COMMAND

typedef struct
{
   int8_t  *command;
   int32_t limit;
   int32_t nice;
   int8_t  *defdir;
   int8_t  *env;
} XSHW_COMMAND;

Querverweis: shel_write

8.27.63 XTED

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

8.27.64 X_BUF_V2

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


Home AESAES AES-FunktionslisteAES-Funktionsliste XCONTROLXCONTROL