Beispiel #1
0
        short IZMachineIO.ReadKey(int time, TimedInputCallback callback, CharTranslator translator)
        {
            PerformSplit(targetSplit);

            if (unicode)
            {
                Glk.glk_request_char_event_uni(currentWin);
            }
            else
            {
                Glk.glk_request_char_event(currentWin);
            }

            Glk.glk_request_timer_events((uint)(time * 100));

            event_t ev;
            bool    done   = false;
            short   result = 0;

            do
            {
                Glk.glk_select(out ev);

                switch (ev.type)
                {
                case EvType.CharInput:
                    if (ev.win == currentWin)
                    {
                        if (ev.val1 <= 255 || (unicode && ev.val1 <= 0x10000))
                        {
                            result = translator((char)ev.val1);
                        }
                        else
                        {
                            result = GlkKeyToZSCII((KeyCode)ev.val1);
                        }

                        if (result != 0)
                        {
                            done = true;
                        }
                        else if (unicode)
                        {
                            Glk.glk_request_char_event_uni(currentWin);
                        }
                        else
                        {
                            Glk.glk_request_char_event(currentWin);
                        }
                    }
                    break;

                case EvType.Timer:
                    if (callback() == true)
                    {
                        Glk.glk_cancel_char_event(currentWin);
                        done = true;
                    }
                    break;

                case EvType.Arrange:
                    UpdateScreenSize();
                    break;

                case EvType.SoundNotify:
                    SoundNotify();
                    break;
                }
            }while (!done);

            Glk.glk_request_timer_events(0);

            return(result);
        }