This is an old version from the tos.hyp. The new is on GitHub!

HomeAESEditable object functionsWindow-dialogs

8.7 Event library

This library makes functions available with whose aid events can be recognized and processed. As a rule, program control is released to the operating system until the specified event has occurred. The following routines are available for this purpose:

evnt_button Waits for a mouse button press
evnt_dclick Obtains/alters the double-click response rate
evnt_keybd Waits for a keypress
evnt_mesag Waits for a message
evnt_mouse Waits for a move of the mouse pointer
evnt_multi Reacts to several events
evnt_timer Waits for a timer event
Standard messages  
Message-list Overview of all known messages, including:
Messages from Geneva
RSDAEMON messages

Note: 'event' in this case should be understood as a message, key press, mouse movement and button activation, timer events etc.

See also: About the AES   GEM   Style guidelines

8.7.1 evnt_button

Name: »Event button« - Wait for a mouse button event.
Opcode: 21
Syntax: int16_t evnt_button ( int16_t ev_bclicks, int16_t ev_bmask, int16_t ev_bstate, int16_t *ev_bmx, int16_t *ev_bmy, int16_t *ev_bbutton, int16_t *ev_bkstate );
Description: The call evnt_button waits for a button event, i.e. until the mouse buttons specified in ev_bmask are set to the state specified in ev_bstate. More exactly:

The function waits until the desired event has occurred once. This is followed by a wait to check if the event is repeated. If the event has occurred ev_bclickstimes or the time set with evnt_dclick has expired), the function returns immediately. The following apply:
Parameter Meaning
   
ev_bclicks Maximum number of clicks before returning
ev_bmask A bit-vector, which masks the buttons to wait for with a 1. The following apply:
Bit-0 = Left button
Bit-1 = Right button.
Bit-2 = Middle button, PC-GEM
ev_bstate A bit-vector like ev_bmask, which specifies for each button which state it has to reach before returning. These are:
0 = Not pressed
1 = Pressed
ev_bmx On return, contains the X and
ev_bmy Y coordinate of the mouse pointer at the time the event occurred
ev_bbutton On return, contains the state of the mouse buttons when the event occurred (as in ev_bstate)
ev_bkstate On return contains the status of the 'special' keys of the keyboard when the event occurred:
0x001 = Right [Shift]
0x002 = Left [Shift]
0x004 = [Control]
0x008 = [Alternate]

With a pressed key the corresponding bit will be set


Note: As of PC-GEM/3 the event functions support only one mouse button. Although officially not documented, it is also possible to interrogate both mouse buttons independently of each other. The following is used by the Atari desktop, for instance, and works as of TOS 1.0:

ev_bclicks += 0x100;

In this case one waits for the following event:
(ev_bstate & ev_bmask) != (*ev_bbutton & ev_bmask)

Furthermore, logically OR'ing ev_bmask with 0x100 will make the call return when independent buttons have been pressed; thus a ev_bmask value of 0x03 will return when both the left and right mouse buttons are pressed, and a value of 0x103 causes the call to return when either button is pressed.
Return value: The function returns the number of mouse clicks that were actually made, or, more exactly, the number of times that the mouse button state matched ev_bstate.
Availability: All AES versions.
Group: Event library
See also: Binding   evnt_multi   Messages

8.7.1.1 Bindings for evnt_button

C: int16_t evnt_button ( int16_t ev_bclicks, int16_t ev_bmask, int16_t ev_bstate, int16_t *ev_bmx, int16_t *ev_bmy, int16_t *ev_bbutton, int16_t *ev_bkstate );
Binding:
int16_t evnt_button (int16_t ev_bclicks, int16_t ev_bmask,
                     int16_t ev_bstate,  int16_t *ev_bmx,
                     int16_t *ev_bmy, int16_t *ev_bbutton,
                     int16_t *ev_bkstate )
{
   int_in[0] = ev_bclicks;
   int_in[1] = ev_bmask;
   int_in[2] = ev_bstate;

   crys_if (21);

   *ev_bmx     = int_out[1];
   *ev_bmy     = int_out[2];
   *ev_bbutton = int_out[3];
   *ev_bkstate = int_out[4];

   return ( int_out[0] );
}
GEM-Arrays:

Address Element Contents
control control[0] 21 # Function opcode
control+2 control[1] 3 # Entry in int_in
control+4 control[2] 5 # Entry in int_out
control+6 control[3] 0 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_in int_in[0] ev_bclicks
int_in+2 int_in[1] ev_bmask
int_in+4 int_in[2] ev_bstate
int_out int_out[0] Return value
int_out+2 int_out[1] ev_bmx
int_out+4 int_out[2] ev_bmy
int_out+6 int_out[3] ev_bbutton
int_out+8 int_out[4] ev_bkstate

8.7.2 evnt_dclick

Name: »Event double-click« - Obtain or set the time delay between the two clicks of a double-elick.
Opcode: 26
Syntax: int16_t evnt_dclick ( int16_t ev_dnew, int16_t ev_dgetset );
Description: The call evnt_dclick sets or obtains the speed with which the double-clicks of the mouse have to be made. The following apply:

Parameter Meaning
ev_dnew New speed from 0 (slow) to 4 (fast)
ev_dgetset 0 = Get current value (ignores ev_dnew)
  1 = Set new value


Note: One should always bear in mind that there are people who have problems with too fast a speed, and can then no longer perform double-clicks!

The function is also often named evnt_dclicks in older GEM documentation.
Return value: The function returns the applicable response rate for double-clicks.
Availability: All AES versions.
Group: Event library
See also: Binding   Messages

8.7.2.1 Bindings for evnt_dclick

C: int16_t evnt_dclick ( int16_t ev_dnew, int16_t ev_dgetset );
Binding:
int16_t evnt_dclick (int16_t ev_dnew, int16_t ev_dgetset)
{
   int_in[0] = ev_dnew;
   int_in[1] = ev_dgetset;

   return ( crys_if(26) );
}
GEM-Arrays:

Address Element Contents
control control[0] 26 # Function opcode
control+2 control[1] 2 # Entry in int_in
control+4 control[2] 1 # Entry in int_out
control+6 control[3] 0 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_in int_in[0] ev_dnew
int_in+2 int_in[1] ev_dgetset
int_out int_out[0] Return value

8.7.3 evnt_keybd

Name: »Event keyboard« - Wait for a keyboard event
Opcode: 20
Syntax: int16_t evnt_keybd ( void );
Description: The call evnt_keybd waits for a keyboard event, and returns the corresponding code.

Note: Keyboard events are always returned only to the application that 'owns' the active window.

With TOS versions from 2.06 and 3.06 onwards, this function is disabled for keys [0] to [9] on the numeric keypad when pressed together with the [Alternate] key. These key combinations allow the entry of the complete range of ASCII values (001 .. 255) by holding down the [Alternate] key while typing in the decimal ASCII-code on the numeric keypad. Without [Alternate] the numeric keypad operates normally.
Return value: The function returns in bits 0..7 the ASCII-code, and in the bits 8..15 the scancode of the pressed key.
Availability: All AES versions.
Group: Event library
See also: Binding   evnt_multi   Messages

8.7.3.1 Bindings for evnt_keybd

C: int16_t evnt_keybd ( void );
Binding:
int16_t evnt_keybd (void)
{
   return ( crys_if (20) );
}
GEM-Arrays:

Address Element Contents
control control[0] 20 # Function opcode
control+2 control[1] 0 # Entry in int_in
control+4 control[2] 1 # Entry in int_out
control+6 control[3] 0 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_out int_out[0] Return value

8.7.4 evnt_mesag

Name: »Event message« - Wait for an AES message.
Opcode: 23
Syntax: int16_t evnt_mesag ( int16_t *msg );
Description: The call evnt_mesag waits until a valid system message is available in the message pipe of the application.

The parameter msg is a pointer to the 16 byte long message buffer.
Return value: This is always the value 1.
Availability: All AES versions.
Group: Event library
See also: Binding   Messages

8.7.4.1 Bindings for evnt_mesag

C: int16_t evnt_mesag ( int16_t *msg );
Binding:
int16_t evnt_mesag (int16_t *msg)
{
   addr_in[0] = msg;
   return ( crys_if (23) );
}
GEM-Arrays:

Address Element Contents
control control[0] 23 # Function opcode
control+2 control[1] 0 # Entry in int_in
control+4 control[2] 1 # Entry in int_out
control+6 control[3] 1 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_out int_out[0] Return value
addr_in addr_in[0] msg

8.7.5 evnt_mouse

Name: »Event mouse« - Wait for the mouse pointer to enter or leave a specified area of the screen.
Opcode: 22
Syntax: int16_t evnt_mouse ( int16_t ev_moflags, int16_t ev_mox, int16_t ev_moy, int16_t ev_mowidth, int16_t ev_moheight, int16_t *ev_momx, int16_t *ev_momy, int16_t *ev_mobutton, int16_t *ev_mokstate );
Description: The call evnt_mouse waits until the mouse pointer enters or leaves a specified area of the screen. The following apply:
Parameter Meaning
   
ev_moflags
0 = Wait for mouse to enter rectangle
1 = Wait for mouse to leave rectangle
ev_mox, X-coordinate, and
ev_moy Y-coordinate of top left of the rectangle to be monitored
ev_mowidth, Width, and
ev_moheight Height of the rectangle to be monitored
ev_momx, X-coordinate, and
ev_momy Y-coordinate of the mouse pointer when entering or leaving the rectangle
ev_mobutton Status of the mouse buttons (bit 0 = left button, bit 1 = right button)
ev_mokstate Status of the 'special' keys when the event occurs. The following apply:
0x001 = Right [Shift]
0x002 = Left [Shift]
0x004 = [Control]
0x008 = [Alternate]
Return value: This is always the value 1.
Availability: All AES versions.
Group: Event library
See also: Binding   Messages

8.7.5.1 Bindings for evnt_mouse

C: int16_t evnt_mouse ( int16_t ev_moflags, int16_t ev_mox, int16_t ev_moy, int16_t ev_mowidth, int16_t ev_moheight, int16_t *ev_momx, int16_t *ev_momy, int16_t *ev_mobutton, int16_t *ev_mokstate );
Binding:
int16_t evnt_mouse (int16_t ev_moflags, int16_t ev_mox,
                    int16_t ev_moy, int16_t ev_mowidth,
                    int16_t ev_moheight, int16_t *ev_momx,
                    int16_t *ev_momy, int16_t *ev_mobutton,
                    int16_t *ev_mokstate)
{
   int_in[0] = ev_moflags;
   int_in[1] = ev_mox;
   int_in[2] = ev_moy;
   int_in[3] = ev_mowidth;
   int_in[4] = ev_moheight;

   crys_if (22);

   *ev_momx     = int_out[1];
   *ev_momy     = int_out[2];
   *ev_mobutton = int_out[3];
   *ev_mokstate = int_out[4];

   return (int_out[0]);
}
GEM-Arrays:

Address Element Contents
control control[0] 22 # Function opcode
control+2 control[1] 5 # Entry in int_in
control+4 control[2] 5 # Entry in int_out
control+6 control[3] 0 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_in int_in[0] ev_moflags
int_in+2 int_in[1] ev_mox
int_in+4 int_in[2] ev_moy
int_in+6 int_in[3] ev_mowidth
int_in+8 int_in[4] ev_moheight
int_out int_out[0] Return value
int_out+2 int_out[1] ev_momx
int_out+4 int_out[2] ev_momy
int_out+6 int_out[3] ev_mobutton
int_out+8 int_out[4] ev_mokstate

8.7.6 evnt_multi

Name: »Event multi« - Wait for an arbitrary event.
Opcode: 25
Syntax: int16_t evnt_multi ( int16_t ev_mflags, int16_t ev_mbclicks, int16_t ev_mbmask, int16_t ev_mbstate, int16_t ev_mm1flags, int16_t ev_mm1x, int16_t ev_mm1y, int16_t ev_mm1width, int16_t ev_mm1height, int16_t ev_mm2flags, int16_t ev_mm2x, int16_t ev_mm2y, int16_t ev_mm2width, int16_t ev_mm2height, int16_t *ev_mmgpbuff, int16_t ev_mtlocount, int16_t ev_mthicount, int16_t *ev_mmox, int16_t *ev_mmoy, int16_t *ev_mmbutton, int16_t *ev_mmokstate, int16_t *ev_mkreturn, int16_t *ev_mbreturn );
Description: The evnt_multi call waits for a number of various events, combining the functionality of evnt_button, evnt_keybd, evnt_mesag, evnt_mouse and evnt_timer in one call. The following apply:
Parameter Meaning
   
ev_mflags Desired event:
MU_KEYBD      (0x0001) Keybord event
MU_BUTTON     (0x0002) Button event
MU_M1         (0x0004) Mouse event 1
MU_M2         (0x0008) Mouse event 2
MU_MESAG      (0x0010) Messages
MU_TIMER      (0x0020) Timer events
MU_WHEEL      (0x0040) Mouse-wheel, XaAES
MU_MX         (0x0080) Mouse movement, XaAES
MU_KEYBD4     (0x0100) GEM/4
MU_NORM_KEYBD (0x0100)Normalized key-codes, XaAES
MU_DYNAMIC_KEYBD (0x0200) XaAES, not yet implemented
X_MU_DIALOG   (0x4000) (Geneva)
ev_mbclicks Number of clicks (see ev_bclicks in evnt_button)
ev_mbmask Which mouse buttons should be taken into account (format see ev_bmask in evnt_button)
ev_mbstate Which status the mouse buttons must reach (format see ev_bstate in evnt_button)
ev_mm1flags Should the event be triggered by the entry (0) or leaving (1) of the first rectangle (see ev_moflags in evnt_mouse
ev_mm1x, X-coordinate, and
ev_mm1y Y-coordinate of top L of 1st rectangle (see ev_mox, ev_moy in evnt_mouse)
ev_mm1width Width of the first rectangle (see ev_mowidth in evnt_mouse)
ev_mm1height Height of the first rectangle (see ev_moheight in evnt_mouse)
ev_mm2flags,  
ev_mm2x,  
ev_mm2y,  
ev_mm2width,  
ev_mm2height These are the corresponding parameters for the second mouse event rectangle
ev_mmgpbuff A 16-byte message buffer (see evnt_mesag and ev_mgpbuff)
ev_mtlocount Low-WORD for the timer counter (see evnt_timer)
ev_mthicount High-WORD for the timer counter (see evnt_timer)
Warning: Under TOS 1.0 one may not set the timer in a desk accessory to 0, otherwise the system will hang!
ev_mmox, The X-coordinate, and
ev_mmoy Y-coordinate of the mouse pointer at the occurrence of the event (see evnt_mouse, (MU_WHEEL))
ev_mmobutton Status of the mouse buttons at the occurrence of the event (format see evnt_button)
ev_mmokstate Status of the 'special' keys on the keyboard at the occurrence of the event (format see evnt_button)
For MU_WHEEL: Wheel number
ev_mkreturn Scancode of the pressed key
ev_mbreturn Number of clicks with the mouse button
For MU_WHEEL: Number of wheel rotations


Note: Due to the large number of parameters to be passed this function consumes a relatively large amount of CPU time, since the parameters must first be stored on the stack, and then distributed to the GEM input fields.

MU_WHEEL:
This will only be sent if there is not a top window or the top window doesn't have arrow widgets.

MU_MX:
This reports ANY mouse movement to the application, (ev_mmox, ev_mmoy), with the state of the keyboard.

MU_KEYBD4:
Used internally in GEM/4 to check for a context-sensitive help request.

MU_NORM_KEYBD:
If the event mask MU_NORM_KEYBD is passed to evnt_multi the application will receive a normalized key-code (NKCC) instead of the standard AES key-code, together with the state of the mouse. The mask can be used together with MU_KEYBD; if both are passed, then MU_NORM_KEYBD prevails. The normalized key-code is in ev_mmokstate and ev_mkreturn, both having the same value.

X_MU_DIALOG:
If the ev_mflags parameter has its bit 14 set, (ev_mflags|=X_MU_DIALOG), then any mouse clicks and keyboard actions within windows containing dialogs will cause the ev_mwhich return value from evnt_multi to have bit 14 set.
When this happens, ev_mmgpbuff WORD 2 contains the index of the object within the dialog which was selected. If the object was a TOUCHEXIT button and the user double-clicked on it, then bit 15 will be set, similar to the way form_do works. WORD 3 of the message buffer ev_mmgpbuff contains the window handle of the window in which the event occurred. This feature is used in conjunction with the wind_set option X_WF_DIALOG.
Return value: The function returns the number of the occurring event(s) in the format specified above.
Availability: All AES versions.
Group: Event library
See also: Binding   evnt_keybd   evnt_button   evnt_mouse   evnt_mesag   evnt_timer   evnt_dclick   Messages

8.7.6.1 Bindings for evnt_multi

C: int16_t evnt_multi ( int16_t ev_mflags, int16_t ev_mbclicks, int16_t ev_mbmask, int16_t ev_mbstate, int16_t ev_mm1flags, int16_t ev_mm1x, int16_t ev_mm1y, int16_t ev_mm1width, int16_t ev_mm1height, int16_t ev_mm2flags, int16_t ev_mm2x, int16_t ev_mm2y, int16_t ev_mm2width, int16_t ev_mm2height, int16_t *ev_mmgpbuff, int16_t ev_mtlocount, int16_t ev_mthicount, int16_t *ev_mmox, int16_t *ev_mmoy, int16_t *ev_mmbutton, int16_t *ev_mmokstate, int16_t *ev_mkreturn, int16_t *ev_mbreturn );
Binding:
int16_t evnt_multi (int16_t ev_mflags,  int16_t ev_mbclicks,
                    int16_t ev_mbmask,  int16_t ev_mbstate,
                    int16_t ev_mm1flags, int16_t ev_mm1x,
                    int16_t ev_mm1y, int16_t ev_mm1width,
                    int16_t ev_mm1height, int16_t ev_mm2flags,
                    int16_t ev_mm2x, int16_t ev_mm2y,
                    int16_t ev_mm2width, int16_t ev_mm2height,
                    int16_t *ev_mmgpbuff, int16_t ev_mtlocount,
                    int16_t ev_mthicount, int16_t *ev_mmox,
                    int16_t *ev_mmoy, int16_t *ev_mmbutton,
                    int16_t *ev_mmokstate, int16_t *ev_mkreturn,
                    int16_t *ev_mbreturn)
{
   int_in[0]  = ev_mflags;
   int_in[1]  = ev_mbclicks;
   int_in[2]  = ev_mbmask;
   int_in[3]  = ev_mbstate;
   int_in[4]  = ev_mm1flags;
   int_in[5]  = ev_mm1x;
   int_in[6]  = ev_mm1y;
   int_in[7]  = ev_mm1width;
   int_in[8]  = ev_mm1height;
   int_in[9]  = ev_mm2flags;
   int_in[10] = ev_mm2x;
   int_in[11] = ev_mm2y;
   int_in[12] = ev_mm2width;
   int_in[13] = ev_mm2height;
   int_in[14] = ev_mtlocount;
   int_in[15] = ev_mthicount;
   addr_in[0] = ev_mmgpbuff;

   crys_if (25);

   *ev_mmox      = int_out[1];
   *ev_mmoy      = int_out[2];
   *ev_mmbutton  = int_out[3];
   *ev_mmokstate = int_out[4];
   *ev_mkreturn  = int_out[5];
   *ev_mbreturn  = int_out[6];

   return (intout[0]);
}
GEM-Arrays:

Address Element Contents
control control[0] 25 # Function opcode
control+2 control[1] 16 # Entry in int_in
control+4 control[2] 7 # Entry in int_out
control+6 control[3] 1 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_in int_in[0] ev_mflags
int_in+2 int_in[1] ev_mbclicks
int_in+4 int_in[2] ev_mbmask
int_in+6 int_in[3] ev_mbstate
int_in+8 int_in[4] ev_mm1flags
int_in+10 int_in[5] ev_mm1x
int_in+12 int_in[6] ev_mm1y
int_in+14 int_in[7] ev_mm1width
int_in+16 int_in[8] ev_mm1height
int_in+18 int_in[9] ev_mm2flags
int_in+20 int_in[10] ev_mm2x
int_in+22 int_in[11] ev_mm2y
int_in+24 int_in[12] ev_mm2width
int_in+26 int_in[13] ev_mm2height
int_in+28 int_in[14] ev_mtlocount
int_in+30 int_in[15] ev_mthicount
int_out int_out[0] Return value
int_out+2 int_out[1] ev_mmox
int_out+4 int_out[2] ev_mmoy
int_out+6 int_out[3] ev_mmbutton
int_out+8 int_out[4] ev_mmokstate
int_out+10 int_out[5] ev_mkreturn
int_out+12 int_out[6] ev_mbreturn
addr_in addr_in[0] ev_mmgpbuff

8.7.7 evnt_timer

Name: »Event Timer« - Wait for a given time interval.
Opcode: 24
Syntax: int16_t evnt_timer ( int16_t ev_tlocount, int16_t ev_thicount );
Description: The call evnt_timer waits until a given time has passed before releasing control to the operating system. The following apply:

Parameter Meaning
ev_tlocount Low-WORD of time value in milliseconds
ev_thicount High-WORD of time value in milliseconds


Note: One should always use this function for delay loops in programs. The operating system can then allocate the CPU to another process (even without real multitasking).

Under TOS 1.0, neither parameter may be set to 0 for a desk accessory, otherwise the system will hang.

This function cannot be relied on as an accurate clock. The specified time is only the minimum time value, with the function returning at some point after this time has passed.
Return value: This is always the value 1.
Availability: All AES versions.
Group: Event library
See also: Binding   Messages

8.7.7.1 Bindings for evnt_timer

C: int16_t evnt_timer ( int16_t ev_tlocount, int16_t ev_thicount );
Binding:
int16_t evnt_timer (int16_t ev_tlocount, int16_t ev_thicount)
{
   int_in[0] = ev_tlocount;
   int_in[1] = ev_thicount;

   return ( crys_if (24) );
}
GEM-Arrays:

Address Element Contents
control control[0] 24 # Function opcode
control+2 control[1] 2 # Entry in int_in
control+4 control[2] 1 # Entry in int_out
control+6 control[3] 0 # Entry in addr_in
control+8 control[4] 0 # Entry in addr_out
int_in int_in[0] ev_tlocount
int_in+2 int_in[1] ev_thicount
int_out int_out[0] Return value

8.7.8 Messages

Standard messages of the screen-manager are built up as follows:

msg[0] Message type
msg[1] Application ID of sender
msg[2] Length of additional data; if non-zero, use appl_read to read the additional data. Always 0 in messages sent by the AES.

Types of standard messages:

Message Meaning
   
AC_CLOSE (41) This is sent to a desk accessory when the current application terminates, the screen is cleared and the window manager is reinitialized
msg[3] Identifier of the desk accessory


Note: This message plays practically no role in multitasking systems any more, and is also no longer present in MagiC!
AC_OPEN (40) A desk accessory has been activated
msg[4] Identifier of the desk accessory;
PC-GEM returns this information in msg[3]!, while KAOS 1.4.2 sets both entries


Geneva has the following extension:
If an application sends an AC_OPEN message to another application, it can optionally set WORD 4 of the message to -1; in this case, Geneva will automatically substitute the correct menu identifier for the application in WORD 4. Example to open application with ID #5:

int buf[8]im { AC_OPEN, 5, 0, my_apid, -1 };
appl_write( 5, 16, buf );

Sending an AC_OPEN message to a desk accessory will cause it to open if it is not already open, or it will make its window topmost (by sending a WM_TOPPED message) if the desk accessory has a window open; an application will receive a WM_TOPPED message, if it has a window open.
AP_DRAGDROP (63) This is a part of the Drag&Drop protocol and is sent by the sender to the receiver
msg[3] ID (handle) of the destination window
msg[4] X-position of the mouse pointer
msg[5] Y-position of the mouse pointer
msg[6] Keyboard Shift status
msg[7] 2-byte ASCII packed pipe identifier


Note: If a value of -1 is passed instead of a valid window ID, then the destination of the Drag&Drop operation is no specific window, but the application itself; in that case normally one should open an additional window for the specified data.
AP_RESCHG (57) With this message, which is a sub-command only found as a possible value in AP_TERM (50), the relevant application is informed that a resolution change is to take place; the receiver of this message should then terminate itself as soon as possible
AP_TERM (50) The operating system requests the application to terminate itself; this may be necessary for a resolution change, for instance, or triggered by a general Shutdown utility
msg[5] Reason for the shutdown, so e.g.
AP_TERM (General termination)
AP_RESCHG (Resolution change)


Warning: Contrary to the usual convention, the value -1 must be entered in msg[1], as according to MagiC documentation one can not guarantee otherwise that the desktop will react to an [Alternate]-[Control]-[Delete] Shutdown sequence

Note: Desk accesories will always be sent AC_CLOSE messages, not AP_TERM
AP_TFAIL (51) This is sent by the receiver of an AC_CLOSE or AP_TERM message if this does not wish to or cannot terminate itself
CH_EXIT (90) This is sent to the parent process when a child terminates
msg[3] Child's application ID
msg[4] Child's exit code
CT_KEY (53) This is sent by the modular control field XCONTROL to be able to evaluate key-presses that can have no efect on editable fields, such as [Help] or [Undo], for instance
msg[3] High byte: Scancode of the pressed key
Low byte : ASCII-code of the key
FNT_CHANGED (83) This is sent if GDOS fonts were loaded or unloaded at run-time.
At the receipt of this message the reaction should be vst_unload_fonts, followed directly by vst_load_fonts; this ensures that the application can work with the current fonts
MN_SELECTED (10) This is sent when a menu option is chosen
msg[3] The object index of the menu title selected
msg[4] The object index of the menu item selected
msg[5] Pointer to the OBJECT structure of the menu tree, as also passed in
msg[6] menu_bar
msg[7] Parent of the selected entry, i.e. the object index of the 'dropped down' box that contains the entry


Note: The presence of the extended message (msg[5] and following) is best inquired with appl_getinfo (opcode 9)
PRN_CHANGED (82) This message is sent by the GDOS configuration program to all reachable applications, to inform them about changes to device drivers; the following apply:
msg[3] Device number
msg[4] Action
0 = New
1 = Changed
2 = Removed


After receipt of this message, an application can re-open the corresponding workstation, for instance, obtain the current settings, and perhaps offer a new preview
RESCH_COMPLETED (61) This message is sent to the application that initiated a resolution change; if no error has arisen, this must now terminate itself
msg[3] Status (0 = error, 1 = OK)
SC_CHANGED (80) This message should be sent by a program to all other applications in the system when the contents of the GEM clipboard have been changed
msg[3] Description of the file format:
0x0000 = No more exact specification
0x0001 = Data for a database
0x0002 = Text files
0x0004 = Vector graphics
0x0008 = Raster graphics
0x0010 = Spreadsheet data
0x0020 = Samples, MIDI files, Sound
0x0040 = Archive files (e.g. ".zip", ".lzh")
0x8000 = System files (e.g. colour palettes)

If possible the format 0x0000 should be avoided!
msg[4] 4 characters that describe the "best" and format (least loss of information) for
msg[5] the data import; example ".RTF" rather than ".TXT"
msg[6] Reserved, 0
msg[7] Reserved, 0
SH_WDRAW (72) This message should be sent by an application to the system shell when the contents of a drive has been changed; following this the shell can update the corresponding window
msg[3] Drive (0 = A:, 1 = B:, etc)


Note: A value of -1 means that the shell should update all windows
SHUT_COMPLETED (60) This is sent by the operating system to the initiator of a Shutdown when all other applications have already been informed about this and have reacted positively
SM_M_SPECIAL (101) This message is only available under MagiC (as of Version 2.0), and must be sent to the screen-manager
msg[3] 0
msg[4] 'MA'
msg[5] 'GX'
msg[6] Desired action; the following apply:
0 = Perform a redraw
1 = Terminate an application
2 = Switch to an application
3 = Freeze an application
4 = Thaw out an application again
5 = No information known at present
6 = Unhide all applications
7 = Hide other applications
8 = Hide current application
msg[7] 0


Note: The codes 6..8 of msg[6] are available only as of MagiC Version 3.1. For "Perform a redraw" and "Unhide all applications" the ID to be passed must be that of the screen-manager (1).
THR_EXIT (88) This message is sent to the thread or the application that created the terminated thread; the following apply:
msg[3] AES ID of the terminated thread
msg[4] Return value or error-code as a
msg[5] LONG value
WM_ALLICONIFY (36) All windows of the application should be collected up in one iconified window
msg[4] X-coordinate, and
msg[5] Y-coordinate of top left of the iconified window
msg[6] Width, and
msg[7] Height of the iconified window
WM_ARROWED (24) This message is sent to an application to tell it that one of its slider widgets (arrow or scroll bar) was clicked on; the following apply:
msg[3] The handle (ID) of the window
msg[4] One of the following values:
WA_UPPAGE (0) = Page up
WA_DNPAGE (1) = Page down
WA_UPLINE (2) = Row up
WA_DNLINE (3) = Row down
WA_LFPAGE (4) = Page left
WA_RTPAGE (5) = Page right
WA_LFLINE (6) = Column left
WA_RTLINE (7) = Column right
WA_WHEEL  (8) = See below


As of XaAES v0.960 there is an extension of this message, since it has new drivers for a wheeled mouse:
msg[5] 'MW' (0x4d57) or 'Mw' (0x4d77)
'MW' (0x4d57) For the first mouse-wheel turn
'Mw' (0x4d77) For each further turn
msg[6] 0
msg[7] Current number of mouse-wheel turns; with this one can add together several turns, for instance for movement of the slider


But there is also the possibility of obtaining with WF_WHEEL real messages about mouse-wheel
msg[4] WA_WHEEL (8)
msg[6] Index of the wheel
msg[7] Number of mouse-wheel turns; with this one can add together several turns, for instance for movement of the slider


If WINX is installed one can get an extended WM_ARROWED message:
msg[5] Negates the speed factor for msg[4]
msg[6] Scroll type and direction, possible values as in msg[4]
msg[7] Negated speed factor for msg[6]


One should proceed as follows:
If [5] >=0, then we are dealing with a normal scroll message
If [5] < 0, then one negates the value and obtains the factor for [4]
If [7] < 0, then one negates the value and obtains the factor for [6]
Otherwise [6] will be ignored

Example:
If one receives [WM_ARROWED 1 0 win WA_DNLINE -2 WA_RTLINE -1] for instance, then one should scroll two lines downwards and one column to the right
WM_BACKDROPPED (31)
msg[3] Handle (ID) of the window in question


The application receives this message when operating the backdrop button of the window. This message is present only in KAOS 1.4.2 as well as MagiC 1 and 2; since MagiC Version 3, WM_BOTTOMED is sent.
WM_BOTTOMED (33) This is used by the screen-manager to request that the application should place a window in the background. In some TOS versions this is triggered by [Shift]-clicking on the window's mover bar; with MagiC (as of version 3) there is an extra widget for this (3rd from the right at the top).
msg[3] Handle (ID) of the window in question


Note: The window can then be simply placed by the application in the background with wind_set (msg[3], WF_BOTTOM, 0, 0 ,0, 0). Under MagiC 2.0 this message is still called WM_M_BDROPPED.
WM_CLOSED (22) This message is sent when the user clicks on a window's 'Closer' widget (top left corner), signalling that the topped window should be closed
msg[3] The handle (ID) of the window
WM_FULLED (23) This message is sent when the user clicks on the top window's 'Fuller' widget (top right corner)
msg[3] Handle (ID) of the window that is to be brought to its full size
WM_HSLID (25) This message is sent when the horizontal slider of the scroll bar has been moved
msg[3] Handle (ID) of the window
msg[4] The new slider position:
0000 = Far left
1000 = Far right
WM_ICONIFY (34) This message is sent when the user clicks on the 'Iconify' widget of a window (top, second rom the right), signifying that a window of the application is to be iconified
msg[3] Handle (ID) of the window in question
msg[4] X-coordinate, and
msg[5] Y-coordinate of top left of the iconified window
msg[6] Width, and
msg[7] Height of the iconified window
WM_M_BDROPPED (100) This is used by the screen-manager to request that the application should place a window in the background (say when the 'Backdrop' button is activated). As of MagiC 3 this opcode is no longer sent, but WM_BOTTOMED is used instead.
msg[3] Handle (ID) of the window in question
WM_MOVED (28) This message is sent when the user moves the whole window by dragging a window's title-bar
msg[3] Handle (ID) of the window
msg[4] New X-coordinate, and
msg[5] New Y-coordinate of top left of window
msg[6] New window width (unchanged)
msg[7] New window height (unchanged)
WM_NEWTOP (29) This message is sent when a window has been topped (brought to the front)
msg[3] Handle (ID) of the window
WM_ONTOP (31) This message is sent when a window (after closing or deactivating another window) becomes the top (current or active) one
msg[3] Handle (ID) of the window in question


Note: By the time the message arrives the window stack may have already changed again; the message is sent only when the application has not itself issued a call to place the window in the foreground

Messages of this type are coalesced in the AES message buffer. It follows from this that at all times the last message of this type will be received; thus there cannot be several of these messages in the buffer.
WM_REDRAW (20) This message warns an application that a part of the window area must be redrawn
msg[3] Handle (ID) of the window
msg[4] X-coordinate of the top left corner of the window area to redraw
msg[5] Y-coordinate of the top left corner of the window area to redraw
msg[6] Width of the portion of the window area to redraw
msg[7] Height of the portion of the window area to redraw
WM_SHADED (22360) This message is sent when a window has been 'shaded' (by double-clicking its title-bar so that only the title-bar remains visible
msg[3] Handle (ID) of the window
WM_SIZED (27) This message occurs when the user alters the window's size (by dragging the window's 'Sizer' widget at the bottom right corner)
msg[3] Handle (ID) of the window
msg[4] New X-coordinate, and
msg[5] New Y-coordinate of the window's top left corner (both unchanged)
msg[6] New window width
msg[7] New window height
WM_TOOLBAR (37) This message is sent when a toolbar object is clicked on; the following apply:
msg[3] Handle (ID) of the window
msg[4] Object clicked on
msg[5] Number of mouse clicks
msg[6] Keyboard state of [Shift], [Alternate] and [Control]


Note: All objects of the toolbox should have the TOUCHEXIT flag set. This does not apply for XaAES, for which there is an additional value:
msg[7] Current object in which the text cursor is positioned
WM_TOPPED (21) This message is sent when an application window which is not currently topped is clicked on by the user to move it to the top (made active)
msg[3] The handle (ID) of the window
WM_UNICONIFY (35) This message is sent when the user double-clicks one or more iconified windows of an application to uniconify it/them; if several windows are affected (WM_ALLICONIFY) then it is up to the application alone to process this, as the AES does not make available any information about the windows in question, including their positions or dimensions
msg[3] Handle (ID) of the window in question
msg[4] X-coordinate, and
msg[5] Y-coordinate of top left corner of the uniconified window
msg[6] Width, and
msg[7] Height of the uniconified window
WM_UNSHADED (22361) This message is sent when a window has been 'unshaded' (by again double-clicking its title-line) to make the whole window visible
msg[3] Handle (ID) of the window
WM_UNTOPPED (30) This message is sent when the current window has been sent behind one or more windows due to another window becoming the active one
msg[3] Handle (ID) of the window in question


Note: By the time the message arrives the window stack may have already changed again; the message is sent only when the application has not itself issued a call to place the window in the background
WM_VSLID (26) This message indicates that the vertical slider of the scroll bar has been moved
msg[3] Handle (ID) of the window
msg[4] The new slider position:
0000 = At the very top
1000 = At the very bottom

Support of the newer message types can be inquired with appl_getinfo (opcode 12). Incidentally, for user-defined messages Digital Research has suggested message numbers beyond 1024.

About the size of the message buffer:

An individual application should not use more than 16 windows under MagiC 2.0, as otherwise the message buffer of the system can overflow and possibly redraws can no longer be performed.

See also: evnt_multi   evnt_mesag   AV protocol   OLGA protocol   Drag&Drop

8.7.9 Message-list

Hex Dec Name Present in
$000a 10 MN_SELECTED
$0014 20 WM_REDRAW
$0015 21 WM_TOPPED
$0016 22 WM_CLOSED
$0017 23 WM_FULLED
$0018 24 WM_ARROWED
$0019 25 WM_HSLID
$001a 26 WM_VSLID
$001b 27 WM_SIZED
$001c 28 WM_MOVED
$001d 29 WM_NEWTOP
$001e 30 WM_UNTOPPED
$001f 31 WM_ONTOP
$001f 31 WM_BACKDROPPED KAOS 1.4.2
$0020 32 WM_OFFTOP MultiGEM
$0021 33 WM_BOTTOMED
$0022 34 WM_ICONIFY
$0023 35 WM_UNICONIFY
$0024 36 WM_ALLICONIFY
$0025 37 WM_TOOLBAR
$0026 38 WM_REPOSED XaAES
$0028 40 AC_OPEN
$0029 41 AC_CLOSE
$002b 43 WM_ISTOP MultiGEM
$0032 50 AP_TERM
$0032 50 CT_UPDATE DR
$0033 51 AP_TFAIL
$0033 51 CT_MOVE DR
$0034 52 CT_NEWTOP DR
$0035 53 CT_KEY XControl
$0039 57 AP_RESCHG
$003c 60 SHUT_COMPLETED
$003d 61 RESCH_COMPLETED
$003f 63 AP_DRAGDROP
$0046 70 TDI_Question TDI-Modula
$0047 71 TDI_Answer TDI-Modula
$0048 72 SH_WDRAW
$0050 80 SC_CHANGED
$0052 82 PRN_CHANGED NVDI
$0053 83 FNT_CHANGED NVDI
$0054 84 COLORS_CHANGED NVDI
$0058 88 THR_EXIT
$0059 89 PA_EXIT MagiC 3
$005a 90 CH_EXIT
$0064 100 WM_M_BDROPPED MagiC
$0064 100 Druckauftrag CALCLOCK, from DR
$0065 101 SM_M_SPECIAL MagiC
$0065 101 Druckauftrag emfpangen CALCLOCK, from DR
$0066..$006d 102..109 SM_M_RES MagiC (intern)
$006e..$00c7 110..199 reserviert Screen-Manager
$00c8 200 PRT_MSG Output
$00c9 201 STRT_MSG Output
$00ca 202 QUIT_MSG Output
$00cb..$0158 203..344 reserviert Screen-Manager
$0159 345 WM_WHEEL XaAES
$015a..$03e7 346..999 reserviert Screen-Manager
$03e8 1000 SCRAP_OK Scrap
$03e9 1001 SCRAP_NOTOK Scrap
$03ea 1002 SCRAP_UPDT Scrap
$03eb 1003 SCRAP_OPEN Scrap
$03ec..$03ff 1004..1023 reserviert Screen-Manager
$03fd 1021 SHOW MultiGEM2
$03ff 1023 HIDE MultiGEM2
$0400 1024 ACC_ID XAcc Protocol
$0401 1025 ACC_OPEN XAcc Protocol
$0402 1026 ACC_CLOSE XAcc Protocol
$0403 1027 ACC_ACC XAcc Protocol
$0404 1028 ACC_EXIT XAcc Protocol
$0438 1080 MYOSD_DISPLAY MyOSD
$0439 1081 MYOSD_OK MyOSD
$043A 1082 MYOSD_NOK MyOSD
$0480 1152 ACC_REQUEST XAcc Protocol
$0481 1153 ACC_REPLY XAcc Protocol
$0500 1280 ACC_ACK XAcc Protocol
$0501 1281 ACC_TEXT XAcc Protocol
$0502 1282 ACC_KEY XAcc Protocol
$0503 1283 ACC_META XAcc Protocol
$0504 1284 ACC_IMG XAcc Protocol
$0510 1296 ACC_GETDSI XAcc Protocol
$0511 1297 ACC_DSINFO XAcc Protocol
$0512 1298 ACC_FILEINFO XAcc Protocol
$0513 1299 ACC_GETFIELDS XAcc Protocol
$0514 1300 ACC_FIELDINFO XAcc Protocol
$0520 1312 ACC_FORCESDF XAcc Protocol
$0521 1313 ACC_GETSDF XAcc Protocol
$0401 1025 AC_HELP PureC-Help Protocol
$0402 1026 AC_REPLY PureC-Help Protocol
$0403 1027 AC_VERSION PureC-Help Protocol
$0404 1028 AC_COPY PureC-Help Protocol
$0708..$0710 1800..1808 interne Kommunikation Hänisch Modula-2
$07d0 2000 MSG_IDENTIFY STalker
$07d1 2001 MSG_SLEEP STalker
$07d2 2002 MSG_WAKE STalker
$07d3 2003 MSG_DISPLAY STalker
$07d4 2004 MSG_INFO STalker
$07d5 2005 MSG_CONFIG STalker
$07d6 2006 MSG_BUFFER STalker
$07d7 2007 MSG_RESOURCE STalker
$07d8 2008 MSG_SENDSTRING STalker
$07d9 2009 MSG_KEYSTROKE STalker
$07da 2010 MSG_EXECUTE_SCRIPT STalker
$07db 2011 MSG_ENABLE STalker
$07db 2011 INST_CURSOR HFB-Hausfinanzbuchhaltung
$07dc 2012 CHANGE_MENU HFB-Hausfinanzbuchhaltung
$07dd 2013 PUT_VORGABE_DO2 HFB-Hausfinanzbuchhaltung
$07de 2014 PUT_VORGABE_EIGENT HFB-Hausfinanzbuchhaltung
$07df 2015 PUT_DATA_IN_BOX HFB-Hausfinanzbuchhaltung
$07e0 2016 MY_WM_ONTOP HFB-Hausfinanzbuchhaltung
$0930 2352 WM_MOUSEWHEEL
$0935 2357 WIND_DATA
$0936 2358 DO_WPOPUP DirUp
$0991 2449 Holger Weets
$0994 2452 ICON_MSG ASH-EMailer
$0995 2453 RSDAEMON_MSG PPP-Connect
$0996 2454 DD_STRING
$0997 2455 WISEL_MSG
$0998 2456 MSG_NOEVENT
$0999 2457 WINCOM_MSG
$0a2b 2603 TOPW_OPENED Manager
$0a91 2705 FILE_UPDATED Manager
$0c94 3220 ASK_ALTA_LISTA Alta Lista
$0c95..$0c9d 3221..3229 reserviert Alta Lista
$0c9e 3230 AL_Reply Alta Lista
$0cf1 3313 TWSTART TosWin2, tw-call
$0cf2 3314 TWOK TosWin2, tw-call
$0cf3 3315 TWWRITE TosWin2, tw-call
$0cf4 3316 TWREAD TosWin2, tw-call
$0cf5 3317 TWERR TosWin2, tw-call
$0cf6 3318 TWTOP TosWin2, tw-call
$0cf7 3319 TWSHELL TosWin2, tw-call
$0fa0 4000 PENGUIN_Version HomePage Penguin
$0fa1 4001 PENGUIN_Reply HomePage Penguin
$0fa2..$0faf 4002..4015 reserviert HomePage Penguin
$1000 4096 WM_SAVE Menü Protocol
$1001 4097 WM_SAVEAS Menü Protocol
$1002 4098 WM_PRINT Menü Protocol
$1003 4099 WM_UNDO Menü Protocol
$1004 4100 WM_CUT Menü Protocol
$1005 4101 WM_COPY Menü Protocol
$1006 4102 WM_PASTE Menü Protocol
$1007 4103 WM_SELECTALL Menü Protocol
$1008 4104 WM_FIND Menü Protocol
$1009 4105 WM_REPLACE Menü Protocol
$100a 4106 WM_FINDNEXT Menü Protocol
$100b 4107 WM_HELP Menü Protocol
$100c 4108 WM_DELETE Menü Protocol
$1065 4197 IDC_FROM_ACC IDC
$10a5 4261 IDC_WAKE_UP IDC
$10e5 4325 IDC_FROM_APP IDC
$1150 4432 JINNEE_MSG
$1235 4661 GO_PRIVATE ObjectGEM
$1236 4662 OLGA_INIT OLGA-Protocol
$1238 4664 OLGA_UPDATE OLGA-Protocol
$1239 4665 OLGA_ACK OLGA-Protocol
$123a 4666 OLGA_RENAME OLGA-Protocol
$123b 4667 OLGA_OPENDOC OLGA-Protocol
$123c 4668 OLGA_CLOSEDOC OLGA-Protocol
$123d 4669 OLGA_LINK OLGA-Protocol
$123e 4670 OLGA_UNLINK OLGA-Protocol
$123f 4671 OLGA_UPDATED OLGA-Protocol
$1240 4672 OLGA_RENAMELINK OLGA-Protocol
$1241 4673 OLGA_LINKRENAMED OLGA-Protocol
$1242 4674 OLGA_GETOBJECTS OLGA-Protocol
$1243 4675 OLGA_OBJECTS OLGA-Protocol
$1244 4676 OLGA_BREAKLINK OLGA-Protocol
$1245 4677 OLGA_LINKBROKEN OLGA-Protocol
$1246 4678 OLGA_START OLGA-Protocol
$1247 4679 OLGA_GETINFO OLGA-Protocol
$1248 4680 OLGA_INFO OLGA-Protocol
$1249 4681 OLGA_IDLE OLGA-Protocol
$124a 4682 OLGA_ACTIVATE OLGA-Protocol
$124b 4683 OLGA_EMBED OLGA-Protocol
$124c 4684 OLGA_EMBEDDED OLGA-Protocol
$124d 4685 OLGA_UNEMBED OLGA-Protocol
$124e 4686 OLGA_GETSETTINGS OLGA-Protocol
$124f 4687 OLGA_SETTINGS OLGA-Protocol
$1250 4688 OLGA_REQUESTNOTIFICATION OLGA-Protocol
$1251 4689 OLGA_RELEASENOTIFICATION OLGA-Protocol
$1252 4690 OLGA_NOTIFY OLGA-Protocol
$1253 4691 OLGA_NOTIFIED OLGA-Protocol
$1254 4692 OLGA_SERVERTERMINATED OLGA-Protocol
$1255 4693 OLGA_CLIENTTERMINATED OLGA-Protocol
$1256 4694 OLGA_INPLACEUPDATE OLGA-Protocol
$1257 4695 OLGA_ID4UPDATE OLGA-Protocol
$1258 4696 OLGA_GETEXTENSION OLGA-Protocol
$1259 4697 OLGA_EXTENSION OLGA-Protocol
$125a 4698 OLGA_GETSERVERPATH OLGA-Protocol
$125b 4699 OLGA_SERVERPATH OLGA-Protocol
$125c 4700 OLGA_IE_BUTTON OLGA-Protocol
$125d 4701 OLGA_IE_KEY OLGA-Protocol
$125e..$126f 4702..4719 reserviert OLGA-Protocol
$126f 4719 SSP_SRASR System Services Protocol
$1270 4720 SSP_SSIR System Services Protocol
$1271 4721 SSP_SPASI System Services Protocol
$1272 4722 SSP_SSUR System Services Protocol
$1273 4723 SSP_SPASA System Services Protocol
$1274 4724 SSP_SSA System Services Protocol
$1275..$128d 4725..4738 reserved System Services Protocol
$1350 4944 GS_REQUEST GEMScript Protocol
$1351 4945 GS_REPLY GEMScript Protocol
$1352 4946 GS_COMMAND GEMScript Protocol
$1353 4947 GS_ACK GEMScript Protocol
$1354 4948 GS_QUIT GEMScript Protocol
$1355 4949 GS_OPENMACRO GEMScript Protocol
$1356 4950 GS_MACRO GEMScript Protocol
$1357 4951 GS_WRITE GEMScript Protocol
$1358 4952 GS_CLOSEMACRO GEMScript Protocol
$1970 6512 RS_INITIATE Relationships
$1971 6513 RS_TERMINATE Relationships
$1972 6514 RS_ACK Relationships
$1973 6515 RS_HELLO Relationships
$1974 6516 RS_BYE Relationships
$1975 6517 RS_LINK Relationships
$1976 6518 RS_UNLINK Relationships
$1977 6519 RS_DATA Relationships
$1978 6520 RS_OPEN Relationships
$1a00 6656 1ADDR_INIT 1st Address
$1a01 6657 1ADDR_SEARCH 1st Address
$1a02 6658 1ADDR_INPUT 1st Address
$1a03 6659 1ADDR_SORT 1st Address
$1a04 6660 1ADDR_ALL 1st Address
$1a05 6661 1ADDR_REPLACE 1st Address
$1a06 6662 1ADDR_DELETE 1st Address
$1a80 6784 1ADDR_ANSW_INIT 1st Address
$1a81 6785 1ADDR_ANSW_SEARCH 1st Address
$1a82 6786 1ADDR_ANSW_INPUT 1st Address
$1a83 6787 1ADDR_ANSW_SORT 1st Address
$1a84 6788 1ADDR_ANSW_ALL 1st Address
$1a85 6789 1ADDR_ANSW_REPLACE 1st Address
$1a86 6790 1ADDR_ANSW_DELETE 1st Address
$1aff 6911 1ADDR_QUIT 1st Address
$1f40 8000 GM_SHOW_FILE GREPIT
$1f41 8001 GM_OPEN_DIALOG GREPIT
$1f42 8002 GM_OPEN_PRGINFO GREPIT
$2f10 12048 KOBOLD_JOB Kobold Protocol
$2f11 12049 KOBOLD_JOB_NO_WINDOW Kobold Protocol
$2f12 12050 KOBOLD_ANSWER Kobold Protocol
$2f13 12051 KOBOLD_CONFIG Kobold Protocol
$2f14 12052 KOBOLD_FIRST_SLCT Kobold Protocol
$2f15 12053 KOBOLD_NEXT_SLCT Kobold Protocol
$2f16 12054 KOBOLD_CLOSE Kobold Protocol
$2f17 12055 KOBOLD_FREE_DRIVES Kobold Protocol
$3d00..$3d7f 15616..15743 CAD-3D_Request_xxx CAD-3D
$3d80..$3dff 15744..15871 CAD-3D_Reply_xxx CAD-3D
$4150 16720   Aniplayer
$4200 16896 SE_INIT SE-Protocol
$4201 16897 SE_OK SE-Protocol
$4202 16898 SE_ACK SE-Protocol
$4203 16899 SE_OPEN SE-Protocol
$4204 16900 SE_ERROR SE-Protocol
$4205 16901 SE_ERRFILE SE-Protocol
$4206 16902 SE_PROJECT SE-Protocol
$4207 16903 SE_QUIT SE-Protocol
$4208 16904 SE_TERMINATE SE-Protocol
$4209 16905 SE_CLOSE SE-Protocol
$4240 16960 ES_INIT SE-Protocol
$4241 16961 ES_OK SE-Protocol
$4242 16962 ES_ACK SE-Protocol
$4243 16963 ES_COMPILE SE-Protocol
$4244 16964 ES_MAKE SE-Protocol
$4245 16965 ES_MAKEALL SE-Protocol
$4246 16966 ES_LINK SE-Protocol
$4247 16967 ES_EXEC SE-Protocol
$4248 16968 ES_MAKEEXEC SE-Protocol
$4249 16969 ES_PROJECT SE-Protocol
$424a 16970 ES_QUIT SE-Protocol
$424b 16971 ES_SHLCTRL SE-Protocol
$4400 17408 WM_DESTROY WinDom
$4401 17409 WM_MNSELECTED WinDom
$4402 17410 WM_FORM WinDom
$4403 17411 AP_LOADCONF WinDom
$4404 17412 AP_BUTTON WinDom
$4405 17413 AP_KEYBD WinDom
$4410 17424 AP_DEBUG WinDom
$4411 17425 WM_UPLINE WinDom
$4412 17426 WM_DNLINE WinDom
$4413 17427 WM_LFLINE WinDom
$4414 17428 WM_RTLINE WinDom
$4415 17429 WM_UPPAGE WinDom
$4416 17430 WM_DNPAGE WinDom
$4417 17431 WM_LFPAGE WinDom
$4418 17432 WM_RTPAGE WinDom
$4419 17433 WM_PREREDRAW WinDom
$4511 17681 eb_dump_capture_fullscreen EB DUMP
$4512 17682 eb_dump_capture_window EB DUMP
$4513 17683 eb_dump_capture_mouse EB DUMP
$4514 17684 eb_dump_disable_selector EB DUMP
$4515 17685 eb_dump_enable_selector EB DUMP
$4516 17686 eb_dump_disable_windframe EB DUMP
$4517 17687 eb_dump_enable_windframe EB DUMP
$4560 17760 FILE_SELECTED Freedom
$4564 17764 AF_DOALERT Freedom Protocol
$4565 17765 FA_ALERTISOPEN Freedom Protocol
$4566 17766 FA_ALERTDONE Freedom Protocol
$4567 17767 AF_DOFSELECT Freedom Protocol
$4568 17768 FA_FSELISOPEN Freedom Protocol
$4569 17769 FA_FSELCLOSED Freedom Protocol
$4570 17776 AF_CLOSEACK Freedom Protocol
$4571 17777 AF_SENDREDRAW Freedom Protocol
$4600 17920 BA_BUBBLE_REQUEST Trouble Bubble
$4601 17921 AB_OPEN_BUBBLE Trouble Bubble
$4602 17922 BA_BUBBLE_OPENED Trouble Bubble
$4603 17923 AB_CLOSE_BUBBLE Trouble Bubble
$4604 17924 BA_BUBBLE_CLOSED Trouble Bubble
$46ff 18175 THING_CMD Thing
$4700 18176 AV_PROTOKOLL AV Protocol
$4701 18177 VA_PROTOSTATUS AV Protocol
$4703 18179 AV_GETSTATUS AV Protocol
$4704 18180 AV_STATUS AV Protocol
$4705 18181 VA_SETSTATUS AV Protocol
$4710 18192 AV_SENDKEY AV Protocol
$4711 18193 VA_START AV Protocol
$4712 18194 AV_ASKFILEFONT AV Protocol
$4713 18195 VA_FILEFONT AV Protocol
$4714 18196 AV_ASKCONFONT AV Protocol
$4715 18197 VA_CONFONT AV Protocol
$4716 18198 AV_ASKOBJECT AV Protocol
$4717 18199 VA_OBJECT AV Protocol
$4718 18200 AV_OPENCONSOLE AV Protocol
$4719 18201 VA_CONSOLEOPEN AV Protocol
$4720 18208 AV_OPENWIND AV Protocol
$4721 18209 VA_WINDOPEN AV Protocol
$4722 18210 AV_STARTPROG AV Protocol
$4723 18211 VA_PROGSTART AV Protocol
$4724 18212 AV_ACCWINDOPEN AV Protocol
$4725 18213 VA_DRAGACCWIND AV Protocol
$4726 18214 AV_ACCWINDCLOSED AV Protocol
$4728 18216 AV_COPY_DRAGGED AV Protocol
$4729 18217 VA_COPY_COMPLETE AV Protocol
$4730 18224 AV_PATH_UPDATE AV Protocol
$4732 18226 AV_WHAT_IZIT AV Protocol
$4733 18227 VA_THAT_IZIT AV Protocol
$4734 18228 AV_DRAG_ON_WINDOW AV Protocol
$4735 18229 VA_DRAG_COMPLETE AV Protocol
$4736 18230 AV_EXIT AV Protocol
$4738 18232 AV_STARTED AV Protocol
$4739 18233 VA_FONTCHANGED AV Protocol
$4740 18240 AV_XWIND AV Protocol
$4741 18241 VA_XOPEN AV Protocol
$4742 18242 GB GFA-Basic Editor
$4751 18257 AV_VIEW AV Protocol
$4752 18258 VA_VIEWED AV Protocol
$4753 18259 AV_FILEINFO AV Protocol
$4754 18260 VA_FILECHANGED AV Protocol
$4755 18261 AV_COPYFILE AV Protocol
$4756 18262 VA_FILECOPIED AV Protocol
$4757 18263 AV_DELFILE AV Protocol
$4758 18264 VA_FILEDELETED AV Protocol
$4759 18265 AV_SETWINDPOS AV Protocol
$475a 18266 GZ_PRIVATE GSZRZ Z-Modem
$4760 18272 VA_PATH_UPDATE AV Protocol
$4790..$4799 18320..18329 Mafia 2
$4800 18432 MP_ACK Paula Protocol
$4801 18433 MP_NAK Paula Protocol
$4802 18434 MP_START Paula Protocol
$4803 18435 MP_STOP Paula Protocol
$4804 18436 MP_SHUTDOWN Paula Protocol
$4888 18568 SEND_TRACE Tracer
$4889 18569 ANSWER_TRACE Tracer
$494D 18765 IM_COM Imagine graphic driver IM_COL.ACC
!index OLE_INIT
!index OLE_EXIT
!index OLE_NEW
$4950 18768 OLE_INIT OLE Protocol
$4950 18768 IP_DIAL_REQUEST Qdialer
$4951 18769 OLE_EXIT OLE Protocol
$4951 18769 IP_DIAL_HANGUP Qdialer
$4952 18770 OLE_NEW OLE Protocol
$4952 18770 IP_DIAL_DONE Qdialer
$4953 18771 IP_DIAL_ERROR Qdialer
$4954 18772 IP_HANGUP_DONE Qdialer
$4955 18773 IP_STATUS_GET Qdialer
$4b48 19272 DA_KNOWHOW
$4c01 19457 AT_PERGAMON PEGASUS, SCHECKS, EVER, TARKUS
$4c4a 19530 LDG_QUIT LDG
$4c4d 19533 LDG_LOST_LIB LDG
$4d00 19712 MOD_OK Tetrax
$4d01 19713 MOD_NAK Tetrax
$4d02 19714 MOD_PLAY Tetrax
$4d03 19715 MOD_STOP Tetrax
$4d04 19716 MOD_LOAD Tetrax
$4d05 19717 MOD_CLEAR Tetrax
$4d50 19762   M_PLAYER
$4e20 20000 VTX_GET_BIN_PAGE Videotext Protocol
$4e21 20001 VTX_GET_ASCII_PAGE Videotext Protocol
$4e52 20050 VTX_FOUND Videotext Protocol
$4e53 20051 VTX_NOTFOUND Videotext Protocol
$4e54 20052 VTX_PROCESSKILLED Videotext Protocol
$4e55 20053 VTX_TERM Videotext Protocol
$4f4d 20301 M_ASKVAR Interface
$4f4e 20302 M_SENDVAR Interface
$5000 20480 PDF_AV_OPEN_FILE MyPDF
$5001 20481 PDF_AV_CLOSE_FILE MyPDF
$5002 20482 PDF_AV_PRINT_FILE MyPDF
$5003 20483 PDF_AV_FIND_WORD MyPDF
$5004 20484 PDF_AV_SHOW_INFO MyPDF
$5005 20485 PDF_AV_GET_INFO MyPDF
$5010 20496 MYTASK_START MyTask
$5011 20497 MYTASK_NEW_COLOR MyTask
$5012 20498 MYTASK_NEW_ICON MyTask
$5013 20499 MYTASK_DELETE_ICON MyTask
$5014 20500 MYTASK_ICON_CLICK MyTask
$5015 20501 MYTASK_BUTTON MyTask
$5016 20502 MYTASK_NEW_WINDOW MyTask
$5017 20503 MYTASK_NAME MyTask
$5018 20504 MYTASK_GET_SIZE MyTask
$5019 20505 MYTASK_BUBBLE_CHANGE MyTask
$501a 20506 MYTASK_ICON_ERROR MyTask
$501b 20507 MYTASK_CHANGED_OPTIONS MyTask
$501c 20508 MYTASK_SEND_OPTIONS MyTask
$5208 21000 OEP_OK Object Exchange Protocol (OEP)
$5209 21001 OEP_CONFIG Object Exchange Protocol (OEP)
$520a 21002 OEP_INFO Object Exchange Protocol (OEP)
$520b 21003 OEP_LINK Object Exchange Protocol (OEP)
$520c 21004 OEP_RES Object Exchange Protocol (OEP)
$520d 21005 OEP_UPDATE Object Exchange Protocol (OEP)
$520e 21006 OEP_DATA Object Exchange Protocol (OEP)
$520f 21007 OEP_CHANGED Object Exchange Protocol (OEP)
$5210 21008 OEP_SERVJOB Object Exchange Protocol (OEP)
$5211 21009 OEP_TAKEOVER Object Exchange Protocol (OEP)
$5212 21010 OEP_RES0 Object Exchange Protocol (OEP)
$5213 21011 OEP_RES1 Object Exchange Protocol (OEP)
$5214 21012 OEP_RES2 Object Exchange Protocol (OEP)
$5215 21013 OEP_RES3 Object Exchange Protocol (OEP)
$5216 21014 OEP_RES4 Object Exchange Protocol (OEP)
$5217 21015 OEP_RES5 Object Exchange Protocol (OEP)
$5218 21016 OEP_RES6 Object Exchange Protocol (OEP)
$5219 21017 OEP_RES7 Object Exchange Protocol (OEP)
$521a 21018 OEP_RES8 Object Exchange Protocol (OEP)
$521b 21019 OEP_RES9 Object Exchange Protocol (OEP)
$5300 21248 SRTY_SETUP Security
$5301 21249 SRTY_GETDEVS Security
$5302 21250 SRTY_DEVSTAT Security
$5343 21315 SH_CHANGED IFormats-CPXe
$5346 21318   STarFax
$5354 21332   XaAESnap
$5600 22016 VIEW_FILE View Protocol
$5601 22017 VIEW_FAILED View Protocol
$5602 22018 VIEW_OPEN View Protocol
$5603 22019 VIEW_CLOSED View Protocol
$5604 22020 VIEW_DATA View Protocol
$5610 22032 VIEW_GETMFDB View Protocol
$5611 22033 VIEW_SETMFDB View Protocol
$5612 22034 VIEW_MFDB View Protocol
$5613..$56ff 22035..22271 reserved View Protocol
$5646 22086   ViewFax
$5758 22360 WM_SHADED WINX
$5759 22361 WM_UNSHADED WINX
$6368 25448 CHTW_MSG Chatwin
$6400 25600 che_exist CHEMCALC
$6401 25601 mes_ack CHEMCALC
$6403 25603 set_modus CHEMCALC
$6411 25617 app_exit CHEMCALC
$6414 25620 get_menu_point CHEMCALC
$6415 25621 send_menu_point CHEMCALC
$6420 25632 request_file_ext CHEMCALC
$6421 25633 send_file_ext CHEMCALC
$64ff 25855 error CHEMCALC
$6502 25858 request_float CHEMCALC
$6503 25859 send_float CHEMCALC
$6602 26114 request_text CHEMCALC
$6603 26115 send_text CHEMCALC
$6666 26214 LOAD_FILE Porthos
$6667 26215 READ_Header Porthos
$6668 26216 READ_CATALOG Porthos
$6669 26217 CHG_PAGE Porthos
$666a 26218 LOOK_PAGE Porthos
$666b 26219 SAVE_REG Porthos
$666c 26220 SEND_IMG Porthos
$666d 26221 WRK_NAVIG Porthos
$6702 26370 decl_text CHEMCALC
$6704 26372 send_decltext CHEMCALC
$6705 26373 send_declfloat CHEMCALC
$7407 29703 GEMJING_RETURN GEMJing
$78f1 30961 WinChangeFont TrueMagic
$78f2..$7917 30962..30999 TrueMagic
$7996 31126 AES_Load
$7a00 31232 OBJC_EDITED EnhancedGEM
$7a01 31233 CURSOR_INIT EnhancedGEM
$7a02 31234 OBJC_CHANGED EnhancedGEM
$7a03 31235 OBJC_SIZED EnhancedGEM
$7a04 31236 OBJC_DRAGGED EnhancedGEM
$7a05 31237 MENU_INIT EnhancedGEM
$7a06 31238 MOUSE_INIT EnhancedGEM
$7a08 31239 POPUP_CHANGED EnhancedGEM
$7a08 31240 SLIDER_CHANGED EnhancedGEM
$7a10 31248 XACC_AV_INIT EnhancedGEM
$7a11 31249 XACC_AV_EXIT EnhancedGEM
$7a12 31250 XACC_AV_CLOSE EnhancedGEM
$7a13..$7a17 31251..31255 EnhancedGEM
$7a18 31256 FONT_CHANGED Font Protocol
$7a19 31257 FONT_SELECT Font Protocol
$7a1a 31258 FONT_ACK Font Protocol
$7a1b 31259 XFONT_CHANGED Font Protocol
$7a1c..$7a1f 31260..31263 EnhancedGEM
$7a20 31264 WIN_CHANGED EnhancedGEM
$7a21 31265 WIN_SCROLLED EnhancedGEM
$7a22 31266 WIN_TOPPED EnhancedGEM
$7a23 31267 WIN_CLOSED EnhancedGEM
$7a24 31268 WIN_VSLSIZE EnhancedGEM
$7a25 31269 WIN_HSLSIZE EnhancedGEM
$7a26 31270 WIN_NAME EnhancedGEM
$7a27 31271 WIN_INFO EnhancedGEM
$7a28 31272 WIN_HSLIDE EnhancedGEM
$7a29 31273 WIN_VSLIDE EnhancedGEM
$7a2a 31274 WIN_SIZED EnhancedGEM
$7a2b 31275 WIN_NEWTOP EnhancedGEM
$7a2c..$7a4f 31276..31311 EnhancedGEM
$8000 32768 CatMsg CAT
$8001 32769 ExtCatMsg CAT
$8003 32771 CatProtoMsg CAT
$9277 37495   Suji, internally only
$9993 39315 RC_ROTATE Route It! / Circu It!
$9995 39317 RC_MOVE Route It! / Circu It!
$9996 39318 RC_UNDO Route It! / Circu It!
$9997 39319 CR_REDRAW Route It! / Circu It!
$9998 39320 CR_PARA Route It! / Circu It!
$9999 39321 RC_SENDPARA Route It! / Circu It!
$9a00 39424 WR_REC WinRec
$9a01 39425 WR_STOP WinRec
$9a02 39426 WR_PLAY WinRec
$9a03 39427 WR_TIME WinRec
$a081 41089   QFax/Pro
$baba 47802 BUBBLEGEM_REQUEST BubbleGEM
$babb 47803 BUBBLEGEM_SHOW BubbleGEM
$babc 47804 BUBBLEGEM_ACK BubbleGEM
$babd 47805 BUBBLEGEM_ASKFONT BubbleGEM
$babe 47806 BUBBLEGEM_FONT BubbleGEM
$babf 47807 BUBBLEGEM_HIDE BubbleGEM
!index COLOR_RGB, Message
$c010 49168 COLOR_ID Color-Drag&Drop
$c011 49169 COLOR_RGB Color-Drag&Drop
$cab0 51888 CAB_CHANGED CAB Protocol
$cab1 51889 CAB_EXIT CAB Protocol
$cab2 51890 CAB_PATH CAB Protocol
$cab3 51891 CAB_VIEW CAB Protocol
$cab4 51892 CAB_TERM CAB Protocol
$cab5 51893 CAB_REQUESTSTATUS CAB Protocol
$cab6 51894 CAB_RELEASESTATUS CAB Protocol
$cab7 51895 CAB_STATUS CAB Protocol
$cab8 51896 CAB_HELLO CAB Protocol
$cab9 51897 CAB_MAIL CAB Protocol
$caba 51898 CAB_MAILSENT CAB Protocol
$cabb 51899 CAB_MAILSENT CAB Protocol
$cabc..$cabf 51900..51903 CAB Protocol
$cc00..$cc7f 52224..52351 CYBSMASH_Request_xxx Cybersmash
$cc80..$ccff 52352..52479 CYBSMASH_Reply_xxx Cybersmash
$cc60 52320 MSG_CT60_TEMP CT60-CPX
$dadd 56029 DHST_ADD Document History Protocol
$dade 56030 DHST_ACK Document History Protocol
$de00..$de7f 56832..56959 DEGAS_Request_xxx Degas
$de80..$deff 56960..57087 DEGAS_Reply_xxx Degas
$e000 57344 X_MN_SELECTED Geneva
$e100 57600 X_WM_SELECTED Geneva
$e200 57856 X_GET_HELP Geneva
$e400 58368 X_WM_HSPLIT Geneva
$e600 58880 X_WM_ARROWED2 Geneva
$e700 59136 X_WM_HSLID2 Geneva
$e800 59392 X_WM_VSLID2 Geneva
$e900 59648 X_WM_OBJECT Geneva
$ed00 60672 ED_HELLO STeno
$ed01 60673 ED_OPEN STeno
$ed02 60674 ED_BYE STeno
$ed10 60688 ED_LOADF STeno
$ed11 60676 ED_NEW STeno
$ed12 60677 ED_SAVEF STeno
$ed14 60692 ED_CUT STeno
$ed15 60693 ED_COPY STeno
$ed16 60694 ED_PASTE STeno
$ed17 60695 ED_DELETE STeno
$ed18 60696 ED_FIND STeno
$ed19 60697 ED_CHANGE STeno
$ed1a 60698 ED_PRINT STeno
$ed1d 60701 ED_LINE STeno
$ed1e 60702 ED_READ STeno
$ed1f 60703 ED_INQINF STeno
$ed30 60720 ED_DCLICK STeno
$ed31 60721 ED_SELECT STeno
$ed40 60736 ED_MLOAD STeno
$ed41 60737 ED_MNEW STeno
$ed42 60738 ED_MSAVE STeno
$ed50 60752 ED_CLOSE STeno
$ed51 60753 ED_UNDOK STeno
$ed80 60800 ED_REPLY (Answer to ED_HELLO) STeno
$ed9f 60831 Answer of ED_INQINF STeno
$f3d0 62416 F3D_INIT Focus 3D
$f3d1 62417 F3D_EXIT Focus 3D
$f3d2 62418 F3D_REQUEST Focus 3D
$f3d3 62419 F3D_RETURN Focus 3D
$f3d4..$f3df 62420..62431 reserviert Focus 3D
$f825 63525 Answer of MSG_ENABLE STalker
-2011
$f826 63526 Answer of MSG_EXECUTE_SCRIPT STalker
-2010
$f827 63527 Answer of MSG_KEYSTROKE STalker
-2009
$f828 63528 Answer of MSG_SENSTRING STalker
-2008
$f829 63529 Answer of MSG_RESOURCE STalker
-2007
$f82a 63530 Answer of MSG_BUFFER STalker
-2006
$f82b 63531 Answer of MSG_CONFIG STalker
-2005
$f82c 63532 Answer of MSG_INFO STalker
-2004
$f82d 63533 Answer of MSG_DISPLAY STalker
-2003
$f82e 63534 Answer of MSG_WAKE STalker
-2002
$f82f 63535 Answer of MSG_SLEEP STalker
-2001
$f830 63536 Answer of MSG_IDENTIFY STalker
-2000
$fff0 65520 XMESSAGE XMSG - Message Server
$fff1 65521 XMSG_ASK XMSG - Message Server
$fff2 65522 XMSG_OK XMSG - Message Server

8.7.9.1 The CAB protocol

The CAB protocol consists of a series of AES messages with whose aid any GEM programs can devolve certain tasks to CAB, or coordinate certain actions with CAB.

The contents of the environmental variable BROWSER= (if defined) holds CAB's access path. If CAB is not already in memory, then a program can launch CAB subsequently via this variable.

A possible application: If one offers further current information or updates for one's own programs on the internet, one could use the CAB protocol to provide access to this information from within these programs with little effort. CAB then takes care of the download of the data and its presentation.

Description of the messages

CAB_HELLO (0xCAB8) (message from CAB)
CAB transmits after its launch the following message to all running programs:

msg[0] = 0xCAB8
msg[1] = Id von CAB
msg[2] = 0
msg[3] = Version of the CAB protocol (0x0100 corresponds to V1.00)
msg[4] = Bit-vector with the internet protocols supported by CAB
         (CAB.OVL):
             Bit 0: HTTP
             Bit 1: FTP
             Bit 2: GOPHER
             Bit 3: WAIS
             Bit 4: MAILTO
             Bit 5: NNTP
             Bit 6: TELNET
             Bit 7-15: 0 (reserved)
msg[5] = Bit-vector with the CAB protocol messages supported by CAB:
             Bit 0: CAB_VIEW
             Bit 1: CAB_MAIL, CAB_MAILSENT
             Bit 2: CAB_REQUESTSTATUS, CAB_RELEASESTATUS, CAB_STATUS,
                    CAB_EXIT
             Bit 3-15: 0 (reserved)
msg[6] = 0
msg[7] = 0

CAB_SUPPORT (0xCABB) (message to CAB)
If this message is sent to CAB, then CAB sends back the message CAB_HELLO. If CAB_HELLO is not returned, then an old version of CAB is being used that does not yet support the CAB protocol. All programs that are interested in the information that CAB_HELLO delivers should send CAB_SUPPORT to CAB after their launch. If CAB is only launched later, then CAB_HELLO is sent automatically to the program.

msg[0] = 0xCABB
msg[1] = Id des PRGs
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_VIEW (0xCAB3) (message to CAB)
Similar to VA_START, but instead of a fielname a URL is passed. CAB then displays this file.

msg[0] = 0xCAB3
msg[1] = ID of the PRG
msg[2] = 0
msg[3] = \ Pointer to the URL
msg[4] = /
msg[5] = If a 1 was entered here CAB displays the URL in a new window;
         if a 0 was entered, the top CAB window will be used
msg[6] = 0
msg[7] = 0

CAB_REQUESTSTATUS (0xCAB5) (message to CAB)
This can be sent to CAB to check whether CAB is currently online or offline. CAB subsequently sends the message CAB_STATUS at each change of the online/offline state.

msg[0] = 0xCAB5
msg[1] = ID of the PRG
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_RELEASESTATUS (0xCAB7) (message to CAB)
This should be sent to CAB when a program is no longer interested in the on/offline information that was requested with CAB_REQUESTSTATUS (e.g. because it terminates itself).

msg[0] = 0xCAB7
msg[1] = ID of the PRG
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_STATUS (0xCAB6) (message from CAB)
This is sent by CAB to all programs that have registered themselves with CAB_REQUESTSTATUS.

msg[0] = 0xCAB6
msg[1] = ID of the PRG
msg[2] = 0
msg[3] = 1 if CAB online; 0 if CAB offline
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_EXIT (0xCAB1) (message from CAB)
This is sent by CAB as soon as CAB terminates to all programs that have registered themselves with CAB_REQUESTSTATUS. Before this a CAB_STATUS is sent in which the offline state is reported.

msg[0] = 0xCAB1
msg[1] = ID of the PRG
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_MAIL (0xCAB9) (message to CAB)
This can be sent to CAB to transmit mails.

msg[0] = 0xCAB9
msg[1] = ID of the PRG
msg[2] = 0

msg[3] = \ Pointer to the URL; a subject can be appended directly to
msg[4] = / the URL, separated by a question mark

msg[5] = \ Pointer to a file holding the mail contents, or NULL (in
msg[6] = / which case CAB opens an editor into which the mail can be
           entered)

msg[7] = Bit-vector with further options:
             Bit 0: 0 if the mail file is to be sent immediately, or 1
                    if the mail file is still to be edited/altered in
                    CAB by the user
             Bit 1: With 1 the mail file will be deleted after it has
                    been sent, while 0 means it will be retained
             Bit 2-15: 0 (reserved)

CAB_MAILSENT (0xCABA) (message from CAB)
This is sent by CAB to the program that has sent CAB_MAIL and contains infomation whether sending of the mail worked correctly or not.

msg[0] = 0xCABA
msg[1] = ID of CAB
msg[2] = 0
msg[3] = 1 if the mail was sent without error; 0 if an error occurred
         (in which case one can find the cause of the error in msg[4])
msg[4] = Contains an error number if msg[3]=0
              0: No URL specified
              1: Offline, net connection failed, server not accessible
              2: User has aborted the action (if the mail is to be
                 modified in CAB, the user has the option of aborting
                 the action)
              3: GEMDOS error on accessing the mail file
              4: Editor for modifying the file could not be called
msg[5] = 0
msg[6] = 0
msg[7] = 0

Special messages for 'Cache-Tools'

CAB_CHANGED (0xCAB0) (message to/from CAB)
The cache (or CACHE.CAB) has been changed and should be read in anew.

msg[0] = 0xCAB0
msg[1] = ID of CAB/the PRG
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_EXIT (0xCAB1) (message to/from CAB)
CAB or the Cache-Tool terminates itself (as information for the other PRG in each case).

msg[0] = 0xCAB1
msg[1] = ID of CAB/the PRG
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_PATH (0xCAB2) (message from CAB)
The local HTML directory and/or the cache directory was altered. Further information is available in the Cache-Tools documentation.

msg[0] = 0xCAB2
msg[1] = ID of CAB
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

CAB_TERM (0xCAB4) (message from CAB)
The Cache-Tool should terminate itself.

msg[0] = 0xCAB4
msg[1] = ID of CAB
msg[2] = 0
msg[3] = 0
msg[4] = 0
msg[5] = 0
msg[6] = 0
msg[7] = 0

8.7.9.2 Messages from Geneva

X_MN_SELECTED (0xE000)


This message is either accompanied by the MU_MESAG bit of an evnt_multi return, or is returned by the evnt_mesag call. When this message occurs, the message buffer contains:

Portion Contents
msg[0] 0xE000
msg[3] The object index of the menu title selected
msg[4] The object index of the selected menu item
msg[5], [6] The object tree of the menu item selected
msg[7] The handle of the window containing the menu

This feature is used in conjunction with the wind_set option X_WF_MENU, described in detail, below.

X_WM_SELECTED (0xE100)


This message is received when the user clicks on a window gadget in a window whose flags were modified with the wind_tree function. It only occurs when the X_WTFL_CLICKS attribute is off. If the user clicks on one of the normal scroll gadgets or arrows, a standard WM_ARROWED message is sent to the application. However, when the user clicks on any other gadget, an X_WM_SELECTED message is sent:

Portion Contents
msg[0] 0xE100
msg[3] The handle of the window containing the gadget
msg[4] The object index of the window tree object the user clicked on

This feature is used by the Task Manager's "Keyboard..." dialog.

X_GET_HELP (0xE200)


This message is sent to the Help display program when the user requests help on a certain topic. The message is actually comprised of two parts. When the application sees the X_GET_HELP message, it must then use the appl_read function to get the entire remainder of the message, whether it intends to use the whole thing or not. The first part of the message is comprised of the following values:

Portion Contents
msg[0] 0xE200
msg[1] Application ID
msg[2] Length of the second part ofthe message
msg[3] Length of the topic portion of the message, including
  the NUL terminator
msg[4] Length of the filename portion of the message, including
  the NUL terminator
msg[5] Upper/lowercase sensitivity. If non-zero, the topic is
  case-sensitive.

The second part of the message contains the actual text of the topic and filename fields. This can be read with one or more calls to appl_read.

Example:

    void read_string( char *s, int max, int size )
    {
      char dummy;

      if( size<=max )               /* the whole string fits */
        appl_read( my_application_id, size, s );
      else
      {
        /* read what we can */
        appl_read( my_application_id, max-1, s);
        s[max-1] = '\0';            /* terminate the string   */
        /* now, get the remaining bytes of the string         */
        for( size=size-(max-1); size>0; size-- )
           appl_read( my_application_id, 1, &dummy );
      }
    }

    main()
    {
      int msg[8], caps_sens;
      char topic[20], filename[100];

      evnt_mesag( msg );
      switch( msg[0] )
      {
        case X_GET_HELP:
           caps_sens = msg[5];
          /* Read the topic portion */
           read_string( topic, sizeof(topic), msg[3] );
          /* Read the filename portion */
            read_string( filename, sizeof(filename). msg[4] );
          /* Do whatever with it... */
X_WM_HSPLIT (0xE400)


This message is sent to an application when the position of the horizontal split bar has changed:

Portion Contents
msg[0] 0xE400
msg[1] Application ID
msg[2] 0
msg[3] Handle of the window being affected
msg[4] The new offset (in pixels) of the split bar

The application is then free to either act upon this message and change the split bar position with wind_set( X_WF_HSPLIT, or to ignore the message completely.

See the x_wind_create function for more information.

X_WM_ARROWED2 (0xE600)


This message is sent to an application when the user has licked on one of the arrow or scroll bar gadgets which are not reported by the normal WM_ARROWED message. X_WM_ARROWED2 reports changes in gadgets which are below a vertical split bar and/or to the right of a horizontal split bar. The format of a X_WM_ARROWED2 message is identical to that of WM_ARROWED.

See the x_wind_create function for more information.

X_WM_HSLID2 (0xE700)


This message is sent to an application when the user has dragged the second horizontal scroll gadget, which appears to the right of a horizontal split bar. The format of this message is identical to that of WM_HSLID.

See the x_wind_create function for more information.

X_WM_VSLID2 (0xE800)


This message is sent to an application when the user has dragged the second vertical scroll gadget, which appears below a vertical split bar. The format of this message is identical to that of WM_VSLID.

See the x_wind_create function for more information.

X_WM_OBJECT (0xE900) (since Update 003)


This message type is returned to an application when it uses wind_set mode X_WF_OBJHAND to affect the manner in which window gadgets are handled.

If an application receives this message, it is because the object tree handler routine instructed Geneva not to process the mouse click on a window gadget as a normal event. Instead, a special message is returned to the application:

Portion Contents
msg[0] 0xE900
msg[1] Application ID
msg[2] 0
msg[3] Handle of the window containing the object
msg[4] Object tree index of the object which was clicked

Note that in order for Geneva to determine that the mouse has been clicked on an object in a window's tree structure, it must be of type EXIT or TOUCHEXIT. Geneva's default window gadgets already have these attributes set correctly.

See also: wind_set mode   X_WF_OBJHAND.

8.7.9.3 RSDAEMON_MSG

The RSDAEMON is a parallel-running application which assumes the task of the resolver with an AES message. It's intended as a kind of non-blocking gethostbyname, although the RSDAEMON only returns an IP, not a complete hostent-struct.

The RSDAEMON is normally started and terminated automatically by IConnect.

Utilization:

With appl_find("RSDAEMON") the App ID is to be obtained. In case of error one should fall back to the blocking gethostbyname, and only if nothing else is possible, break off with an error-message.

Now the RSDAEMON can be sent an AES message:

#include 

pbuf[0]=RSDAEMON_MSG
pbuf[1]=
pbuf[2]=0
pbuf[3]=RSD_REQUEST_IP
pbuf[4]=
pbuf[5/6]=
           (Pay attention to possible memory protection!)

The RSDAEMON returns a reply of the following form:

pbuf[0]=RSDAEMON_MSG
pbuf[1]=
pbuf[2]=0

pbuf[3]=RSD_IP_UNKNOWN = IP could not be obtained. This may be due to
                         various causes (user has not entered a DNS,
                         the DNS does not recognize the host etc.)
pbuf[4]=

or:

pbuf[3]=RSD_IP_FOUND
pbuf[4]=
pbuf[5/6]=

And here still the RSDAEMON.H:

#ifndef __RSDAEMON__
#define __RSDAEMON__

#define RSDAEMON_MSGØ’ 0x995

#define RSD_REQUEST_IP 1
#define RSD_IP_FOUNDIP 1       2
#define RSD_IP_UNKNOWN 3

#endif

HomeAESEditable object functionsWindow-dialogs