Ignore:
Timestamp:
Dec 16, 2007, 12:54:02 PM (12 years ago)
Author:
Sam Hocevar
Message:
  • Implemented caca_set_display_driver() to change driver at runtime.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/examples/driver.c

    r2138 r2139  
    1717
    1818#if !defined(__KERNEL__)
     19#   include <string.h>
    1920#   include <stdio.h>
    2021#endif
     
    2526int main(int argc, char *argv[])
    2627{
    27     char const * const * list;
     28    char const * const *list;
    2829    caca_display_t *dp;
    2930    cucul_canvas_t *cv;
    3031
    3132    list = caca_get_display_driver_list();
    32     if(argc <= 1)
    33     {
    34         printf("Available drivers:\n");
    3533
    36         while(*list)
    37         {
    38             printf("  %s (%s)\n", list[0], list[1]);
    39             list += 2;
    40         }
    41 
    42         return 0;
    43     }
    44 
    45     cv = cucul_create_canvas(0, 0);
    46     if(cv == NULL)
    47     {
    48         printf("cannot create canvas\n");
    49         return -1;
    50     }
    51     dp = caca_create_display_with_driver(cv, argv[1]);
     34    dp = caca_create_display(NULL);
    5235    if(dp == NULL)
    5336    {
     
    5639    }
    5740
    58     cucul_set_color_ansi(cv, CUCUL_WHITE, CUCUL_BLUE);
    59     cucul_draw_line(cv, 0, 0, 9999, 0, ' ');
    60     cucul_printf(cv, 1, 0, "Current driver: %s", argv[1]);
     41    cv = caca_get_canvas(dp);
     42    cucul_set_color_ansi(cv, CUCUL_WHITE, CUCUL_BLACK);
    6143
    62     caca_refresh_display(dp);
     44    while(1)
     45    {
     46        char const *driver;
     47        int i, cur = 0;
    6348
    64     caca_get_event(dp, CACA_EVENT_KEY_PRESS, NULL, -1);
     49        cucul_put_str(cv, 1, 0, "Available drivers:");
     50
     51        driver = caca_get_display_driver(dp);
     52
     53        for(i = 0; list[i]; i += 2)
     54        {
     55            int match = !strcmp(list[i], driver);
     56
     57            if(match)
     58                cur = i;
     59            cucul_draw_line(cv, 0, i + 2, 9999, i + 2, ' ');
     60            cucul_printf(cv, 2, i + 2, "%c %s (%s)",
     61                         match ? '*' : ' ', list[i], list[i + 1]);
     62        }
     63
     64        cucul_put_str(cv, 1, i + 2, "Switching driver in 5 seconds");
     65
     66        caca_refresh_display(dp);
     67
     68        if(caca_get_event(dp, CACA_EVENT_KEY_PRESS, NULL, 5000000))
     69            break;
     70
     71        do
     72        {
     73            cur += 2;
     74            if(list[cur] && !strcmp(list[cur], "raw"))
     75                cur += 2;
     76            if(!list[cur])
     77                cur = 0;
     78        }
     79        while(caca_set_display_driver(dp, list[cur]));
     80    }
    6581
    6682    caca_free_display(dp);
    67     cucul_free_canvas(cv);
    6883
    6984    return 0;
Note: See TracChangeset for help on using the changeset viewer.