( ekey )

\ this library is included
\ by os_events and gui

vect PreprocessEvent  ( -- f )
' 0 to PreprocessEvent

: (EKEY) ( u1 -- u2 )
   event >abs SWAP
   EvtGetEvent
   PreprocessEvent 0=
   IF
     event >abs SysHandleEvent 0=
     IF         
        0 event >abs menuErr >abs MenuHandleEvent 0=
        IF
          AppHandleEvent 0= 
          IF
             event >abs FrmDispatchEvent DROP
          THEN
        THEN
     THEN 
   THEN
   event W@ DUP 22 ( appStopEvent)
   = IF  -257 THROW  THEN
;

: EKEY ( -- u ) 20 (EKEY) ;

: WEKEY ( -- u ) -1 (ekey) ;

: WaitEvent ( ev -- )
begin
wekey over = until drop ;

: EKEY>CHAR ( u -- u 0 | c -1 )
   DUP 4 = DUP
   IF
     DROP event 8 + W@ 
     DUP 255 > IF DROP 0 ELSE NIP TRUE THEN
   THEN
;

: KEY ( -- c )
  BEGIN
    WEKEY EKEY>CHAR 0=
  WHILE
    DROP
  REPEAT
;
