Powered by QM on a Linux server
Help and Support

KnowledgeBase 00112: Using the Mouse in Character Mode Applications

Last updated: 27 Dec 2018
Applies to: All versions
Top level index       Full Index Search Tips
Previous article     Next article

The image presented by established character mode applications can often be improved by adding features more commonly related to GUI applications such as the ability to use the mouse to click on items displayed to the user. This article describes how an application using AccuTerm terminal types with the -at suffix, QMConsole on Windows, the deprecated QMTerm or QM installed on a PDA can detect and process mouse clicks.

Enabling the Mouse

Mouse click detection is disabled by default. The QMBasic MOUSE statement can be used to enable this

This action sends a control code to the terminal emulator asking it to pass mouse click information to the server.

Detecting a Mouse Click

The code sent to the server is different depending on the terminal emulator in use. The QMBasic KEYCODE() and KEYCODEV() functions use the terminfo definitions to parse the incoming code into a common form, returning a value of char(K$MOUSE) or KV$MOUSE respectively if a mouse click is detected.

Additional data relating to the mouse click is stored in three system variables, @MBUTTON, @MROW and @MCOL and can be used by the application to determine which button was pressed and where the mouse was positioned on the screen.

the @MBUTTON variable is set to 1 for the left button, 2 for the right button and 4 for the centre button. Pressing multiple buttons simultaneously forms an additive value from the individual button numbers. Some terminal types can only return mouse clicks for the left button.

The @MROW and @MCOL variables are set to the row and column positions, numbered from zero in the same way as cursor positions.


The following example shows how an application can recognise multibyte control key sequences and mouse clicks in a common code path.

   K = KEYCODEV() 
      CASE K = KV$LEFT   ;* Cursor left key 
         DISPLAY 'Seen cursor left key' 
      CASE K = KV$RIGHT  ;* Cursor right key 
         DISPLAY 'Seen cursor right key' 
      CASE K = KV$MOUSE  ;* Mouse click 
         DISPLAY 'Mouse clicked at ' : @MCOL : ',' : @MROW 

Beyond the Mouse

The mouse click detection method described above is adequate for many uses. The SUI (Smart User Interface) of AccuTerm provides a great way to introduce additional GUI features into a character mode application without needing to rewrite the user interface.

Related Articles


Please tell us if this article was helpful
Very     Slightly     Not at all
Email (optional)