int main(int argc, char *argv[]) { char const * const *list; caca_display_t *dp; caca_canvas_t *cv; list = caca_get_display_driver_list(); dp = caca_create_display(NULL); if(dp == NULL) { printf("cannot create display\n"); return -1; } cv = caca_get_canvas(dp); caca_set_color_ansi(cv, CACA_WHITE, CACA_BLACK); while(1) { char const *driver; int i, cur = 0; caca_put_str(cv, 1, 0, "Available drivers:"); driver = caca_get_display_driver(dp); for(i = 0; list[i]; i += 2) { int match = !strcmp(list[i], driver); if(match) cur = i; caca_draw_line(cv, 0, i + 2, 9999, i + 2, ' '); caca_printf(cv, 2, i + 2, "%c %s (%s)", match ? '*' : ' ', list[i], list[i + 1]); } caca_put_str(cv, 1, i + 2, "Switching driver in 5 seconds"); caca_refresh_display(dp); if(caca_get_event(dp, CACA_EVENT_KEY_PRESS, NULL, 5000000)) break; do { cur += 2; if(list[cur] && !strcmp(list[cur], "raw")) cur += 2; if(!list[cur]) cur = 0; } while(caca_set_display_driver(dp, list[cur])); } caca_free_display(dp); return 0; }
void list_driver() { pt.list = caca_get_display_driver_list(); int i, cur = 0; caca_printf(pt.cv, 2, 1, "Available drivers:"); char const *driver; driver = caca_get_display_driver(pt.dp); caca_set_color_ansi(pt.cv, CACA_WHITE, CACA_RED); for (i = 0; pt.list[i]; i += 2) { int match = !strcmp(pt.list[i], driver); if (match) { cur = i; } caca_printf(pt.cv, 2, i + 2, "%c %s (%s)", match ? '*' : ' ', pt.list[i], pt.list[i + 1]); } }
static VALUE get_driver(VALUE self) { return rb_str_new2(caca_get_display_driver(_SELF)); }