/* c.aiminput */
#include <string.h>
#include "swis.h"        /*  Software interrupts                      */
#include "wimp.h"        /*  access to WIMP SWIs                      */
#include "wimpt.h"       /*  access to WIMPT SWIs                     */
#include "menu.h"        /*  access to MENUS                          */
#include "event.h"       /*  poll loops, etc                          */
#include "image.h"

extern int cmd_window;
extern int max_image;
extern menu imgmenu;
extern menu winmenu;
extern menu main_menu;
extern WINDOW *wp[MAXIM];

extern void forcereturnkey(void);

char * decode_menu(wimp_menustr * menu,int sel[],char * str)
{
 os_regset r;
 r.r[1]=(int)menu;
 r.r[2]=(int)sel;
 r.r[3]=(int)str;
 wimpt_complain(os_swix(Wimp_DecodeMenu,&r)); 
 return(str);
 }


int wgetch(void)
 {
  wimp_eventstr *e;
  event_process();
  e = wimpt_last_event();
  if (e->e == wimp_EKEY) return(e->data.key.chcode);
 
  while(TRUE)
   {
    event_process();               /* Keep Windowmanager happy */
    e = wimpt_last_event();
    if (e->e == wimp_EKEY) break;
  }
 return(e->data.key.chcode);
 }


int wkey(void)
 {
  wimp_eventstr *e;
  os_regset regs;
  wimp_emask mask;
  int escape_state,key;

  regs.r[0] = 229; /* Programmers reference manual volume 2 page 522 */
  regs.r[1] = 1;   /* Programmers reference manual volume 3 page 1145 */
  regs.r[2] = 0;
  os_swi(OS_Byte,&regs);
  escape_state=regs.r[1]; 
  mask=event_getmask();
  event_setmask(~wimp_EMNULL &mask);

/*  wimpt_poll(0,e); */
  event_process();
  e=wimpt_last_event();
  event_setmask(mask);
  regs.r[0] = 229;
  regs.r[1] = escape_state;
  regs.r[2] = 0;
  os_swi(OS_Byte,&regs);
  regs.r[0] = 124;
  os_swi(OS_Byte,&regs);
  return(key);
 }
