User Tools

Site Tools


Adding an event to the event queue

by Richard Russell, August 2014

Normally, event interrupts (e.g. ON MOUSE, ON MOVE, ON SYS and ON TIME) take place as a result of user actions such as mouse clicks, menu selections, moving/re-sizing a window or (in the case of ON TIME) periodically. The events are initially added to a 32-event FIFO queue, and then automatically dispatched to the specified BASIC handler routine (if any).

For test purposes, or other special uses, it is possible to insert a 'pseudo event' into the queue (if there is enough space). You can do that using the following code:

        SYS @fn%(18), handler%, msg%, wparam%, lparam%
        @flags% OR= &20000000

Here handler% is the address of the event handler (see below), msg% is the value which will ultimately be received by the handler in the @msg% system variable, wparam% is the value which will be received in @wparam% and lparam% is the value which will be received in @lparam%.

The handler% parameter can be the address of a custom handler or can specify one of the standard ON… event handlers as follows:

        handler%=!388 : REM ON TIME
        handler%=!396 : REM ON MOVE
        handler%=!400 : REM ON SYS
        handler%=!404 : REM ON MOVE

(if no relevant ON event statement has yet been executed, or an ON event OFF has been executed, handler% will be set to zero).

If you want to determine whether the event was successfully added to the queue you can test the return value:

        SYS @fn%(18), handler%, msg%, wparam%, lparam% TO ok%
        IF ok% @flags% OR= &20000000

If ok% is non-zero the event was added, if it is zero the queue was already full.

Here is a simple example of the use of this technique:

        ON SYS PRINT @msg%,@wparam%,@lparam% : RETURN
        SYS @fn%(18), !400, 123, 456, 789 TO ok%
        IF ok% @flags% OR= &20000000
          WAIT 0
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
adding_20an_20event_20to_20the_20event_20queue.txt · Last modified: 2018/04/14 20:34 by richardrussell