Release 10.1A: OpenEdge Development:
Progress 4GL Reference

> ## READKEY statement

> Reads one keystroke from an input source and sets the value of LASTKEY to the keycode of that keystroke. Use the READKEY statement when you want to look at each keystroke a user makes and take some action based on that keystroke.

> Note: Does not apply to SpeedScript programming.

> #### Syntax

>     READKEY [ STREAM stream ] [ PAUSE n ]

> `STREAM `stream``

> Specifies the name of a stream. If you do not name a stream, Progress uses the unnamed stream. See the DEFINE STREAM statement.

> `PAUSE `n``

> The READKEY statement waits up to `n` seconds for a keystroke. If you do not press a key during that amount of time, READKEY ends, and sets the value in LASTKEY to -1.

> PAUSE 0 causes READKEY to immediately return a value. If no character is available, READKEY sets the value of LASTKEY to -1. Use this form of READKEY to do polling through UNIX pipes or terminal ports.

> Example

> In the following procedure, when the user presses a key, the READKEY statement reads the keystroke and stores the character code value of that key (the key code) as the value of LASTKEY. The CHR function converts the character code value into a character value. If the character value is a Y, Progress deletes the customer. KEYFUNCTION determines the function of the LASTKEY. If that function is END-ERROR, Progress exits the block, ending the procedure.

> r-readky.p
>     FOR EACH customer:
>       DISPLAY cust-num name address city st WITH 1 DOWN.
>       MESSAGE "If you want to delete this customer, press Y".
>       MESSAGE "Otherwise, press any other key.".
>       READKEY.
>       IF CHR(LASTKEY) = "Y"
>       THEN DELETE customer.
>       ELSE IF KEYFUNCTION(LASTKEY) = "END-ERROR"
>       THEN LEAVE.
>     END.

> #### Notes

> - If you use READKEY, it intercepts any input from the user. Thus no widgets receive the input. To pass the input to a widget, you must use the APPLY statement.

> - The READKEY function is double-byte enabled. The READKEY function returns values only after the input method places the data in the keyboard buffer. It returns the key code of the most recent key sequence returned from the keyboard buffer. A key sequence is the set of keystrokes necessary to generate one character or function key event in Progress.

> - If the current input source is a file, then READKEY reads the next character from that file and returns the value of that character (1 to 255) to LASTKEY. READKEY does not translate periods (.) in the file into the ENDKEY value. It does translate end of line into RETURN (13), but it cannot read any special keys, such as function keys.

> When Progress reaches the end of the file, it sets the value of LASTKEY to -2, but does not close the input file. At that point, an APPLY LASTKEY (same as APPLY -2) raises the ENDKEY condition.

> - If the current input source is a UNIX pipe, any timer you set with the PAUSE option might expire before READKEY can read a character. If so, LASTKEY is set to -1.

> - If the last key typed is an invalid character sequence, READKEY sets the value of LASTKEY to -1.

> - On UNIX System V machines, if input is coming from a pipe, READKEY PAUSE 0 is treated as READKEY PAUSE 1. There is always a 1 second wait for input.

> - READKEY counts to determine whether an UNDO, RETRY should be treated as UNDO, NEXT, and whether UNDO, NEXT should be treated as UNDO, LEAVE . This presents infinite loops.

> - For more information on monitoring keystrokes, see OpenEdge Development: Programming Interfaces .

> #### See also

> DEFINE STREAM statement, LASTKEY function

Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095