Changeset 329


Ignore:
Timestamp:
Jan 8, 2004, 11:22:14 AM (19 years ago)
Author:
Sam Hocevar
Message:
  • src/io.c: + Use SLkp_getkey instead of SLang_getkey so that escape sequences are

directly interpreted.

+ Major rehandling of the event code. All output drivers are now

correctly separated.

  • src/graphics.c: + Fixed a compilation warning.
  • test/event.c: + More human-readable event printing.
Location:
libcaca/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/graphics.c

    r324 r329  
    4848#if defined(USE_X11)
    4949#   include <X11/Xlib.h>
     50#   if defined(HAVE_X11_XKBLIB_H)
     51#       include <X11/XKBlib.h>
     52#   endif
    5053#endif
    5154
  • libcaca/trunk/src/io.c

    r325 r329  
    5555
    5656static unsigned int _get_next_event(void);
    57 static void _push_key(unsigned int);
    58 static unsigned int _pop_key(void);
    59 static unsigned int _read_key(void);
     57static void _push_event(unsigned int);
     58static unsigned int _pop_event(void);
    6059
    6160#if !defined(_DOXYGEN_SKIP_ME)
    62 #define KEY_BUFLEN 10
    63 #endif
    64 static unsigned int keybuf[KEY_BUFLEN + 1]; /* zero-terminated */
    65 static int keys = 0;
     61#define EVENTBUF_LEN 10
     62#endif
     63static unsigned int eventbuf[EVENTBUF_LEN];
     64static int events = 0;
    6665
    6766/** \brief Get the next mouse or keyboard input event.
     
    116115static unsigned int _get_next_event(void)
    117116{
    118     unsigned int event = 0;
     117    unsigned int event = _pop_event();
     118
     119    if(event)
     120        return event;
    119121
    120122#if defined(USE_X11)
     
    201203        return 0;
    202204    }
    203 #endif
    204 
    205     /* Read all available key events and push them into the buffer */
    206     while(keys < KEY_BUFLEN)
    207     {
    208         unsigned int key = _read_key();
    209         if(!key)
    210             break;
    211         _push_key(key);
    212     }
    213 
    214     /* If no keys were read, return */
    215     if(!keys)
    216         return 0;
    217 
     205    else
     206#endif
    218207#if defined(USE_NCURSES)
    219208    if(_caca_driver == CACA_DRIVER_NCURSES)
    220209    {
    221         if(keybuf[0] == KEY_MOUSE)
     210        int intkey = getch();
     211        if(intkey == ERR)
     212            return 0;
     213
     214        if(intkey < 0x100)
     215        {
     216            _push_event(CACA_EVENT_KEY_RELEASE | intkey);
     217            return CACA_EVENT_KEY_PRESS | intkey;
     218        }
     219
     220        if(intkey == KEY_MOUSE)
    222221        {
    223222            MEVENT mevent;
    224             _pop_key();
    225223            getmouse(&mevent);
    226224
     
    228226            {
    229227                case BUTTON1_PRESSED:
    230                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
     228                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    231229                    break;
    232230                case BUTTON1_RELEASED:
    233                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
     231                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    234232                    break;
    235233                case BUTTON1_CLICKED:
    236                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    237                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
     234                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     235                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    238236                    break;
    239237                case BUTTON1_DOUBLE_CLICKED:
    240                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    241                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
    242                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    243                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
     238                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     239                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     240                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     241                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    244242                    break;
    245243                case BUTTON1_TRIPLE_CLICKED:
    246                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    247                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
    248                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    249                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
    250                     _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    251                     _push_key(CACA_EVENT_MOUSE_RELEASE | 1);
     244                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     245                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     246                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     247                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     248                    _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     249                    _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    252250                    break;
    253251                case BUTTON1_RESERVED_EVENT:
     
    255253
    256254                case BUTTON2_PRESSED:
    257                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
     255                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    258256                    break;
    259257                case BUTTON2_RELEASED:
    260                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
     258                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    261259                    break;
    262260                case BUTTON2_CLICKED:
    263                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
    264                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
     261                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     262                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    265263                    break;
    266264                case BUTTON2_DOUBLE_CLICKED:
    267                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
    268                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
    269                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
    270                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
     265                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     266                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     267                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     268                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    271269                    break;
    272270                case BUTTON2_TRIPLE_CLICKED:
    273                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
    274                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
    275                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
    276                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
    277                     _push_key(CACA_EVENT_MOUSE_PRESS | 2);
    278                     _push_key(CACA_EVENT_MOUSE_RELEASE | 2);
     271                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     272                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     273                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     274                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     275                    _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     276                    _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    279277                    break;
    280278                case BUTTON2_RESERVED_EVENT:
     
    282280
    283281                case BUTTON3_PRESSED:
    284                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
     282                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    285283                    break;
    286284                case BUTTON3_RELEASED:
    287                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
     285                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    288286                    break;
    289287                case BUTTON3_CLICKED:
    290                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
    291                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
     288                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     289                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    292290                    break;
    293291                case BUTTON3_DOUBLE_CLICKED:
    294                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
    295                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
    296                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
    297                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
     292                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     293                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     294                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     295                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    298296                    break;
    299297                case BUTTON3_TRIPLE_CLICKED:
    300                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
    301                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
    302                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
    303                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
    304                     _push_key(CACA_EVENT_MOUSE_PRESS | 3);
    305                     _push_key(CACA_EVENT_MOUSE_RELEASE | 3);
     298                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     299                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     300                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     301                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     302                    _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     303                    _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    306304                    break;
    307305                case BUTTON3_RESERVED_EVENT:
     
    309307
    310308                case BUTTON4_PRESSED:
    311                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
     309                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    312310                    break;
    313311                case BUTTON4_RELEASED:
    314                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
     312                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    315313                    break;
    316314                case BUTTON4_CLICKED:
    317                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
    318                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
     315                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     316                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    319317                    break;
    320318                case BUTTON4_DOUBLE_CLICKED:
    321                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
    322                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
    323                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
    324                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
     319                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     320                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     321                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     322                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    325323                    break;
    326324                case BUTTON4_TRIPLE_CLICKED:
    327                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
    328                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
    329                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
    330                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
    331                     _push_key(CACA_EVENT_MOUSE_PRESS | 4);
    332                     _push_key(CACA_EVENT_MOUSE_RELEASE | 4);
     325                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     326                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     327                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     328                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     329                    _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     330                    _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    333331                    break;
    334332                case BUTTON4_RESERVED_EVENT:
     
    342340        }
    343341
    344         switch(keybuf[0])
    345         {
    346             case KEY_UP: event = CACA_EVENT_KEY_PRESS | CACA_KEY_UP; break;
    347             case KEY_DOWN: event = CACA_EVENT_KEY_PRESS | CACA_KEY_DOWN; break;
    348             case KEY_LEFT: event = CACA_EVENT_KEY_PRESS | CACA_KEY_LEFT; break;
    349             case KEY_RIGHT: event = CACA_EVENT_KEY_PRESS | CACA_KEY_RIGHT; break;
    350 
    351             case KEY_F(1): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F1; break;
    352             case KEY_F(2): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F2; break;
    353             case KEY_F(3): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F3; break;
    354             case KEY_F(4): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F4; break;
    355             case KEY_F(5): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F5; break;
    356             case KEY_F(6): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F6; break;
    357             case KEY_F(7): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F7; break;
    358             case KEY_F(8): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F8; break;
    359             case KEY_F(9): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F9; break;
    360             case KEY_F(10): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F10; break;
    361             case KEY_F(11): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F11; break;
    362             case KEY_F(12): event = CACA_EVENT_KEY_PRESS | CACA_KEY_F12; break;
    363         }
    364 
    365         if(event)
    366         {
    367             _pop_key();
    368             if(event & CACA_EVENT_KEY_PRESS)
    369                 _push_key(CACA_EVENT_KEY_RELEASE
    370                            | (event & ~CACA_EVENT_KEY_PRESS));
    371             return event;
    372         }
    373     }
    374 #endif
    375 
    376     /* If it's already a special event, return it */
    377     if((keybuf[0] & ~0xff) != 0)
    378         return _pop_key();
    379 
    380     /* If it's not an escape sequence, return the key */
    381     if(keybuf[0] != '\x1b')
    382     {
    383         event = _pop_key();
    384         _push_key(CACA_EVENT_KEY_RELEASE | event);
     342        switch(intkey)
     343        {
     344            case KEY_UP: event = CACA_KEY_UP; break;
     345            case KEY_DOWN: event = CACA_KEY_DOWN; break;
     346            case KEY_LEFT: event = CACA_KEY_LEFT; break;
     347            case KEY_RIGHT: event = CACA_KEY_RIGHT; break;
     348
     349            case KEY_F(1): event = CACA_KEY_F1; break;
     350            case KEY_F(2): event = CACA_KEY_F2; break;
     351            case KEY_F(3): event = CACA_KEY_F3; break;
     352            case KEY_F(4): event = CACA_KEY_F4; break;
     353            case KEY_F(5): event = CACA_KEY_F5; break;
     354            case KEY_F(6): event = CACA_KEY_F6; break;
     355            case KEY_F(7): event = CACA_KEY_F7; break;
     356            case KEY_F(8): event = CACA_KEY_F8; break;
     357            case KEY_F(9): event = CACA_KEY_F9; break;
     358            case KEY_F(10): event = CACA_KEY_F10; break;
     359            case KEY_F(11): event = CACA_KEY_F11; break;
     360            case KEY_F(12): event = CACA_KEY_F12; break;
     361        }
     362
     363        _push_event(CACA_EVENT_KEY_RELEASE | event);
    385364        return CACA_EVENT_KEY_PRESS | event;
    386365    }
    387 
    388     /*
    389      * Handle known escape sequences
    390      */
    391 
    392     _pop_key();
    393 
    394     if(keybuf[0] == 'O' && keybuf[1] >= 'P' && keybuf[1] <= 'S')
    395     {
    396         /* ^[OP ^[OQ ^[OR ^[OS */
    397         static unsigned int keylist[] =
    398             { CACA_KEY_F1, CACA_KEY_F2, CACA_KEY_F3, CACA_KEY_F4 };
    399         _pop_key();
    400         event = keylist[_pop_key() - 'P'];
    401         _push_key(CACA_EVENT_KEY_RELEASE | event);
     366    else
     367#endif
     368#if defined(USE_SLANG)
     369    if(_caca_driver == CACA_DRIVER_SLANG)
     370    {
     371        int intkey;
     372
     373        if(!SLang_input_pending(0))
     374            return 0;
     375
     376        intkey = SLkp_getkey();
     377
     378        if(intkey < 0x100)
     379        {
     380            _push_event(CACA_EVENT_KEY_RELEASE | intkey);
     381            return CACA_EVENT_KEY_PRESS | intkey;
     382        }
     383
     384        if(intkey == 0x3e9)
     385        {
     386            int button = (SLang_getkey() - ' ' + 1) & 0xf;
     387            int x = SLang_getkey() - '!';
     388            int y = SLang_getkey() - '!';
     389            _push_event(CACA_EVENT_MOUSE_PRESS | button);
     390            _push_event(CACA_EVENT_MOUSE_RELEASE | button);
     391            return CACA_EVENT_MOUSE_MOTION | (x << 12) | (y << 0);
     392        }
     393
     394        switch(intkey)
     395        {
     396            case SL_KEY_UP: event = CACA_KEY_UP; break;
     397            case SL_KEY_DOWN: event = CACA_KEY_DOWN; break;
     398            case SL_KEY_LEFT: event = CACA_KEY_LEFT; break;
     399            case SL_KEY_RIGHT: event = CACA_KEY_RIGHT; break;
     400
     401            case SL_KEY_F(1): event = CACA_KEY_F1; break;
     402            case SL_KEY_F(2): event = CACA_KEY_F2; break;
     403            case SL_KEY_F(3): event = CACA_KEY_F3; break;
     404            case SL_KEY_F(4): event = CACA_KEY_F4; break;
     405            case SL_KEY_F(5): event = CACA_KEY_F5; break;
     406            case SL_KEY_F(6): event = CACA_KEY_F6; break;
     407            case SL_KEY_F(7): event = CACA_KEY_F7; break;
     408            case SL_KEY_F(8): event = CACA_KEY_F8; break;
     409            case SL_KEY_F(9): event = CACA_KEY_F9; break;
     410            case SL_KEY_F(10): event = CACA_KEY_F10; break;
     411            case SL_KEY_F(11): event = CACA_KEY_F11; break;
     412            case SL_KEY_F(12): event = CACA_KEY_F12; break;
     413        }
     414
     415        _push_event(CACA_EVENT_KEY_RELEASE | event);
    402416        return CACA_EVENT_KEY_PRESS | event;
    403417    }
    404     else if(keybuf[0] == '[' && keybuf[1] >= 'A' && keybuf[1] <= 'D')
    405     {
    406         /* ^[[A ^[[B ^[[C ^[[D */
    407         static unsigned int keylist[] =
    408             { CACA_KEY_UP, CACA_KEY_DOWN, CACA_KEY_RIGHT, CACA_KEY_LEFT };
    409         _pop_key();
    410         event = keylist[_pop_key() - 'A'];
    411         _push_key(CACA_EVENT_KEY_RELEASE | event);
     418    else
     419#endif
     420#if defined(USE_CONIO)
     421    if(_caca_driver == CACA_DRIVER_CONIO)
     422    {
     423        if(!_conio_kbhit())
     424            return 0;
     425
     426        event = getch();
     427        _push_event(CACA_EVENT_KEY_RELEASE | event);
    412428        return CACA_EVENT_KEY_PRESS | event;
    413429    }
    414     else if(keybuf[0] == '[' && keybuf[1] == 'M' &&
    415             keybuf[2] && keybuf[3] && keybuf[3])
    416     {
    417         int button;
    418 
    419         /* ^[[Mxxx */
    420         _pop_key();
    421         _pop_key();
    422         button = (1 + _pop_key() - ' ') & 0xf;
    423         _push_key(CACA_EVENT_MOUSE_PRESS | button);
    424         _push_key(CACA_EVENT_MOUSE_RELEASE | button);
    425         return CACA_EVENT_MOUSE_MOTION
    426                 | ((_pop_key() - '!') << 12) | ((_pop_key() - '!') << 0);
    427     }
    428     else if(keybuf[0] == '[' && keybuf[1] == '1' && keybuf[3] == '~' &&
    429             keybuf[2] >= '5' && keybuf[2] != '6' && keybuf[2] <= '9')
    430     {
    431         /* ^[[15~ ^[[17~ ^[[18~ ^[[19~ */
    432         static unsigned int keylist[] =
    433             { CACA_KEY_F5, 0, CACA_KEY_F6, CACA_KEY_F7, CACA_KEY_F8 };
    434         _pop_key();
    435         _pop_key();
    436         event = keylist[_pop_key() - '5'];
    437         _pop_key();
    438         _push_key(CACA_EVENT_KEY_RELEASE | event);
    439         return CACA_EVENT_KEY_PRESS | event;
    440     }
    441     else if(keybuf[0] == '[' && keybuf[1] == '2' && keybuf[3] == '~' &&
    442             keybuf[2] >= '0' && keybuf[2] != '2' && keybuf[2] <= '4')
    443     {
    444         /* ^[[20~ ^[[21~ ^[[23~ ^[[24~ */
    445         static unsigned int keylist[] =
    446             { CACA_KEY_F9, CACA_KEY_F10, 0, CACA_KEY_F11, CACA_KEY_F12 };
    447         _pop_key();
    448         _pop_key();
    449         event = keylist[_pop_key() - '0'];
    450         _pop_key();
    451         _push_key(CACA_EVENT_KEY_RELEASE | event);
    452         return CACA_EVENT_KEY_PRESS | event;
    453     }
    454 
    455     /* Unknown escape sequence: return the ESC key */
    456     _push_key(CACA_EVENT_KEY_RELEASE | '\x1b');
    457     return CACA_EVENT_KEY_PRESS | '\x1b';
     430    else
     431#endif
     432    {
     433        /* Dummy */
     434    }
     435
     436    return 0;
    458437}
    459438
    460 static void _push_key(unsigned int key)
     439static void _push_event(unsigned int event)
    461440{
    462     if(keys == KEY_BUFLEN)
     441    if(events == EVENTBUF_LEN)
    463442        return;
    464     keybuf[keys] = key;
    465     keys++;
    466     keybuf[keys] = 0;
     443    eventbuf[events] = event;
     444    events++;
    467445}
    468446
    469 static unsigned int _pop_key(void)
     447static unsigned int _pop_event(void)
    470448{
    471449    int i;
    472     unsigned int key = keybuf[0];
    473     keys--;
    474     for(i = 0; i < keys; i++)
    475         keybuf[i] = keybuf[i + 1];
    476     keybuf[keys] = 0;
    477 
    478     return key;
     450    unsigned int event;
     451
     452    if(events == 0)
     453        return 0;
     454
     455    event = eventbuf[0];
     456    for(i = 1; i < events; i++)
     457        eventbuf[i - 1] = eventbuf[i];
     458    events--;
     459
     460    return event;
    479461}
    480462
    481 static unsigned int _read_key(void)
    482 {
    483 #if defined(USE_NCURSES)
    484     int intkey;
    485 #endif
    486 #if defined(USE_X11)
    487 #endif
    488 
    489     switch(_caca_driver)
    490     {
    491 #if defined(USE_SLANG)
    492     case CACA_DRIVER_SLANG:
    493         return SLang_input_pending(0) ? SLang_getkey() : 0;
    494 #endif
    495 #if defined(USE_NCURSES)
    496     case CACA_DRIVER_NCURSES:
    497         intkey = getch();
    498         return (intkey == ERR) ? 0 : intkey;
    499 #endif
    500 #if defined(USE_CONIO)
    501     case CACA_DRIVER_CONIO:
    502         return _conio_kbhit() ? getch() : 0;
    503 #endif
    504 #if defined(USE_X11)
    505     case CACA_DRIVER_X11:
    506 #endif
    507     default:
    508         break;
    509     }
    510 
    511     return 0;
    512 }
    513 
  • libcaca/trunk/test/event.c

    r324 r329  
    9292        break;
    9393    case CACA_EVENT_KEY_PRESS:
    94         caca_printf(x, y, "CACA_EVENT_KEY_PRESS 0x%06x",
     94        caca_printf(x, y, "CACA_EVENT_KEY_PRESS 0x%x",
    9595                    event & 0x00ffffff);
    9696        break;
    9797    case CACA_EVENT_KEY_RELEASE:
    98         caca_printf(x, y, "CACA_EVENT_KEY_RELEASE 0x%06x",
     98        caca_printf(x, y, "CACA_EVENT_KEY_RELEASE 0x%x",
    9999                    event & 0x00ffffff);
    100100        break;
    101101    case CACA_EVENT_MOUSE_MOTION:
    102         caca_printf(x, y, "CACA_EVENT_MOUSE_MOTION 0x%03x 0x%03x",
     102        caca_printf(x, y, "CACA_EVENT_MOUSE_MOTION %u %u",
    103103                    (event & 0x00fff000) >> 12, event & 0x00000fff);
    104104        break;
    105105    case CACA_EVENT_MOUSE_PRESS:
    106         caca_printf(x, y, "CACA_EVENT_MOUSE_PRESS 0x%06x",
     106        caca_printf(x, y, "CACA_EVENT_MOUSE_PRESS %u",
    107107                    event & 0x00ffffff);
    108108        break;
    109109    case CACA_EVENT_MOUSE_RELEASE:
    110         caca_printf(x, y, "CACA_EVENT_MOUSE_RELEASE 0x%06x",
     110        caca_printf(x, y, "CACA_EVENT_MOUSE_RELEASE %u",
    111111                    event & 0x00ffffff);
    112112        break;
Note: See TracChangeset for help on using the changeset viewer.