Reads values from any of the AutoCAD input devices

(grread [track] [allkeys [curtype]]) 

Only specialized AutoLISP routines need this function. Most input to AutoLISP should be obtained through the various getxxx functions.



If supplied and not nil, this argument enables the return of coordinates from a pointing device as it is moved.


An integer representing a code that tells grread what functions to perform. The allkeys bit code values can be added together for combined functionality. The following values can be specified:

1 (bit 0) Return drag mode coordinates. If this bit is set and the user moves the pointing device instead of selecting a button or pressing a key, grread returns a list where the first member is a type 5 and the second member is the (X,Y) coordinates of the current pointing device (mouse or digitizer) location. This is how AutoCAD implements dragging.

2 (bit 1) Return all key values, including function and cursor key codes, and don't move the cursor when the user presses a cursor key.

4 (bit 2) Use the value passed in the curtype argument to control the cursor display.

8 (bit 3) Don't display the error: console break message when the user presses ESC.


An integer indicating the type of cursor to be displayed. The allkeys value for bit 2 must be set for the curtype values to take effect. The curtype argument affects only the cursor type during the current grread function call. You can specify one of the following values for curtype:

0 Display the normal crosshairs.

1 Do not display a cursor (no crosshairs).

2 Display the object-selection “target” cursor.

Return Values

The grread function returns a list whose first element is a code specifying the type of input. The second element of the list is either an integer or a point, depending on the type of input. The return values are listed in the following table:

grread return values

First element

Second element


Type of input




Keyboard input


Character code


Selected point

3D point

Point coordinates


Screen/pull-down menu

item (from pointing


0 to 999

1001 to 1999

2001 to 2999

3001 to 3999

… and so on, to

16001 to 16999

Screen menu box no.

POP1 menu box no.

POP2 menu box no.

POP3 menu box no.

... and so on, to

POP16 menu box no.


Pointing device (returned only if tracking is enabled)

3D point

Drag mode coordinate


BUTTONS menu item

0 to 999

1000 to 1999

2000 to 2999

3000 to 3999

BUTTONS1 menu button no.

BUTTONS2 menu button no.

BUTTONS3 menu button no.

BUTTONS4 menu button no.


TABLET1 menu item

0 to 32767

Digitized box no.


TABLET2 menu item

0 to 32767

Digitized box no.


TABLET3 menu item

0 to 32767

Digitized box no.


TABLET4 menu item

0 to 32767

Digitized box no.


AUX menu item

0 to 999

1000 to 1999

2000 to 2999

3000 to 3999

AUX1 menu button no.

AUX2 menu button no.

AUX3 menu button no.

AUX4 menu button no.


Pointer button (follows a

type 6 or type 11 return)

3D point

Point coordinates

Handling User Input with grread

Entering ESC while a grread is active aborts the AutoLISP program with a keyboard break (unless the allkeys argument has disallowed this). Any other input is passed directly to grread, giving the application complete control over the input devices.

If the user presses the pointer button within a screen menu or pull-down menu box, grread returns a type 6 or type 11 code, but in a subsequent call, it does not return a type 12 code: the type 12 code follows type 6 or type 11 only when the pointer button is pressed while it is in the drawing area.

It is important to clear the code 12 data from the buffer before attempting another operation with a pointer button or an auxiliary button. To accomplish this, perform a nested grread like this:

(setq code_12 (grread (setq code (grread))))

This sequence captures the value of the code 12 list as streaming input from the device.