* first define protocol constants - see Nantucket docs for details
* Mode values
AC_IDLE = 0              && #define AC_IDLE   0
AC_TOP  = 1              && #define AC_TOP    1
AC_BOT  = 2              && #define AC_BOT    2
AC_EXCEP = 3             && #define AC_EXCEP  3
AC_NOITEM = 4            && #define AC_NOITEM 4
 
* return values
AC_ABORT = 0             && #define AC_ABORT    0
AC_SELECT = 1            && #define AC_SELECT   1
AC_CONTINUE = 2          && #define AC_CONTINUE 2
AC_GO_MATCH = 3          && #define AC_GO_MATCH 3
 
* A couple of keys it needs
ESC = 27                 && #define ESC    27
ENTER = 13               && #define ENTER  13
 
start_elem = 1           && start with element # 1
start_offset = 0         && relative offset inside window
reenter = .T.            && force entry first time through
 
DO WHILE reenter
 
    start_elem = achoice(t, l, b, r, ar, .T., "afunc", ;
                         start_elem, start_offset)
 
    reenter = ...       && some condition, usually
                        && involving lastkey()
ENDDO
 
FUNCTION afunc
 
PARAM mode, cur_elem, rel_pos
PRIVATE ret_val
 
    rel_start = rel_pos
    DO CASE
        CASE mode = AC_EXCEP
            key = lastkey()
 
            DO CASE
                CASE key = ESC
                  ret_val = AC_ABORT

                CASE key = ENTER
                    ret_val = AC_SELECT
 
                OTHERWISE
                    ret_val = AC_CONTINUE
            ENDCASE
 
        OTHERWISE
            ret_val = AC_CONTINUE
    ENDCASE
 
RETURN ret_val

