@@ -122,92 +122,56 @@ static int caca_init_driver(caca_t *kk) | |||||
if(var && *var) | if(var && *var) | ||||
{ | { | ||||
#if defined(USE_WIN32) | #if defined(USE_WIN32) | ||||
if(!strcasecmp(var, "win32")) | if(!strcasecmp(var, "win32")) return win32_install(kk); | ||||
win32_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_CONIO) | #if defined(USE_CONIO) | ||||
if(!strcasecmp(var, "conio")) | if(!strcasecmp(var, "conio")) return conio_install(kk); | ||||
conio_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_X11) | #if defined(USE_X11) | ||||
if(!strcasecmp(var, "x11")) | if(!strcasecmp(var, "x11")) return x11_install(kk); | ||||
x11_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_GL) | #if defined(USE_GL) | ||||
if(!strcasecmp(var, "gl")) | if(!strcasecmp(var, "gl")) return gl_install(kk); | ||||
gl_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_SLANG) | #if defined(USE_SLANG) | ||||
if(!strcasecmp(var, "slang")) | if(!strcasecmp(var, "slang")) return slang_install(kk); | ||||
slang_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_NCURSES) | #if defined(USE_NCURSES) | ||||
if(!strcasecmp(var, "ncurses")) | if(!strcasecmp(var, "ncurses")) return ncurses_install(kk); | ||||
ncurses_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_NETWORK) | #if defined(USE_NETWORK) | ||||
if(!strcasecmp(var, "network")) | if(!strcasecmp(var, "network")) return network_install(kk); | ||||
network_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
#if defined(USE_VGA) | #if defined(USE_VGA) | ||||
if(!strcasecmp(var, "vga")) | if(!strcasecmp(var, "vga")) return vga_install(kk); | ||||
vga_init_driver(kk); | |||||
else | |||||
#endif | #endif | ||||
return -1; | return -1; | ||||
return 0; | |||||
} | } | ||||
#endif | #endif | ||||
#if defined(USE_WIN32) | #if defined(USE_WIN32) | ||||
win32_init_driver(kk); | if(win32_install(kk) == 0) return 0; | ||||
return 0; | |||||
#endif | #endif | ||||
#if defined(USE_CONIO) | #if defined(USE_CONIO) | ||||
conio_init_driver(kk); | if(conio_install(kk) == 0) return 0; | ||||
return 0; | |||||
#endif | #endif | ||||
#if defined(USE_VGA) | #if defined(USE_VGA) | ||||
vga_init_driver(kk); | if(vga_install(kk) == 0) return 0; | ||||
return 0; | |||||
#endif | #endif | ||||
#if defined(USE_X11) | #if defined(USE_X11) | ||||
#if defined(HAVE_GETENV) | if(x11_install(kk) == 0) return 0; | ||||
if(getenv("DISPLAY") && *(getenv("DISPLAY"))) | |||||
#endif | |||||
{ | |||||
x11_init_driver(kk); | |||||
return 0; | |||||
} | |||||
#endif | #endif | ||||
#if defined(USE_GL) | #if defined(USE_GL) | ||||
#if defined(HAVE_GETENV) && defined(GLUT_XLIB_IMPLEMENTATION) | if(gl_install(kk) == 0) return 0; | ||||
if(getenv("DISPLAY") && *(getenv("DISPLAY"))) | |||||
#endif | |||||
{ | |||||
gl_init_driver(kk); | |||||
return 0; | |||||
} | |||||
#endif | #endif | ||||
#if defined(USE_SLANG) | #if defined(USE_SLANG) | ||||
slang_init_driver(kk); | if(slang_install(kk) == 0) return 0; | ||||
return 0; | |||||
#endif | #endif | ||||
#if defined(USE_NCURSES) | #if defined(USE_NCURSES) | ||||
ncurses_init_driver(kk); | if(ncurses_install(kk) == 0) return 0; | ||||
return 0; | |||||
#endif | #endif | ||||
#if defined(USE_NETWORK) | #if defined(USE_NETWORK) | ||||
network_init_driver(kk); | if(network_install(kk) == 0) return 0; | ||||
return 0; | |||||
#endif | #endif | ||||
return -1; | return -1; | ||||
@@ -38,6 +38,7 @@ typedef long unsigned int uintptr_t; | |||||
/* Graphics driver */ | /* Graphics driver */ | ||||
enum caca_driver | enum caca_driver | ||||
{ | { | ||||
CACA_DRIVER_NONE = 0, | |||||
#if defined(USE_CONIO) | #if defined(USE_CONIO) | ||||
CACA_DRIVER_CONIO = 1, | CACA_DRIVER_CONIO = 1, | ||||
#endif | #endif | ||||
@@ -62,34 +63,34 @@ enum caca_driver | |||||
#if defined(USE_VGA) | #if defined(USE_VGA) | ||||
CACA_DRIVER_VGA = 8, | CACA_DRIVER_VGA = 8, | ||||
#endif | #endif | ||||
CACA_DRIVER_NONE = 0 | |||||
}; | }; | ||||
/* Available drivers */ | /* Available drivers */ | ||||
#if defined(USE_CONIO) | #if defined(USE_CONIO) | ||||
void conio_init_driver(caca_t *); | int conio_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_GL) | #if defined(USE_GL) | ||||
void gl_init_driver(caca_t *); | int gl_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_NCURSES) | #if defined(USE_NCURSES) | ||||
void ncurses_init_driver(caca_t *); | int ncurses_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_SLANG) | #if defined(USE_SLANG) | ||||
void slang_init_driver(caca_t *); | int slang_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_WIN32) | #if defined(USE_WIN32) | ||||
void win32_init_driver(caca_t *); | int win32_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_X11) | #if defined(USE_X11) | ||||
void x11_init_driver(caca_t *); | int x11_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_NETWORK) | #if defined(USE_NETWORK) | ||||
void network_init_driver(caca_t *); | int network_install(caca_t *); | ||||
#endif | #endif | ||||
#if defined(USE_VGA) | #if defined(USE_VGA) | ||||
void vga_init_driver(caca_t *); | int vga_install(caca_t *); | ||||
#endif | #endif | ||||
/* Timer structure */ | /* Timer structure */ | ||||
struct caca_timer | struct caca_timer | ||||
{ | { | ||||
@@ -128,7 +129,6 @@ struct caca_context | |||||
struct resize | struct resize | ||||
{ | { | ||||
int resized; /* A resize event was requested */ | int resized; /* A resize event was requested */ | ||||
//int acked; /* The event has been acknowledged by the user */ | |||||
unsigned w, h; /* Requested width and height */ | unsigned w, h; /* Requested width and height */ | ||||
} resize; | } resize; | ||||
@@ -151,7 +151,7 @@ static int conio_get_event(caca_t *kk, struct caca_event *ev) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void conio_init_driver(caca_t *kk) | int conio_install(caca_t *kk) | ||||
{ | { | ||||
kk->drv.driver = CACA_DRIVER_CONIO; | kk->drv.driver = CACA_DRIVER_CONIO; | ||||
@@ -163,6 +163,8 @@ void conio_init_driver(caca_t *kk) | |||||
kk->drv.display = conio_display; | kk->drv.display = conio_display; | ||||
kk->drv.handle_resize = conio_handle_resize; | kk->drv.handle_resize = conio_handle_resize; | ||||
kk->drv.get_event = conio_get_event; | kk->drv.get_event = conio_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_CONIO */ | #endif /* USE_CONIO */ | ||||
@@ -106,9 +106,11 @@ static int gl_init_graphics(caca_t *kk) | |||||
gl_kk = kk; | gl_kk = kk; | ||||
#if defined(HAVE_GETENV) | |||||
geometry = getenv("CACA_GEOMETRY"); | geometry = getenv("CACA_GEOMETRY"); | ||||
if(geometry && *geometry) | if(geometry && *geometry) | ||||
sscanf(geometry, "%ux%u", &width, &height); | sscanf(geometry, "%ux%u", &width, &height); | ||||
#endif | |||||
if(width && height) | if(width && height) | ||||
_cucul_set_size(kk->qq, width, height); | _cucul_set_size(kk->qq, width, height); | ||||
@@ -445,8 +447,13 @@ static void gl_handle_mouse_motion(int x, int y) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void gl_init_driver(caca_t *kk) | int gl_install(caca_t *kk) | ||||
{ | { | ||||
#if defined(HAVE_GETENV) && defined(GLUT_XLIB_IMPLEMENTATION) | |||||
if(!getenv("DISPLAY") || !*(getenv("DISPLAY"))) | |||||
return -1; | |||||
#endif | |||||
kk->drv.driver = CACA_DRIVER_GL; | kk->drv.driver = CACA_DRIVER_GL; | ||||
kk->drv.init_graphics = gl_init_graphics; | kk->drv.init_graphics = gl_init_graphics; | ||||
@@ -457,6 +464,8 @@ void gl_init_driver(caca_t *kk) | |||||
kk->drv.display = gl_display; | kk->drv.display = gl_display; | ||||
kk->drv.handle_resize = gl_handle_resize; | kk->drv.handle_resize = gl_handle_resize; | ||||
kk->drv.get_event = gl_get_event; | kk->drv.get_event = gl_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_GL */ | #endif /* USE_GL */ | ||||
@@ -530,7 +530,7 @@ static void ncurses_write_utf32(uint32_t c) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void ncurses_init_driver(caca_t *kk) | int ncurses_install(caca_t *kk) | ||||
{ | { | ||||
kk->drv.driver = CACA_DRIVER_NCURSES; | kk->drv.driver = CACA_DRIVER_NCURSES; | ||||
@@ -542,6 +542,8 @@ void ncurses_init_driver(caca_t *kk) | |||||
kk->drv.display = ncurses_display; | kk->drv.display = ncurses_display; | ||||
kk->drv.handle_resize = ncurses_handle_resize; | kk->drv.handle_resize = ncurses_handle_resize; | ||||
kk->drv.get_event = ncurses_get_event; | kk->drv.get_event = ncurses_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_NCURSES */ | #endif /* USE_NCURSES */ | ||||
@@ -550,7 +550,7 @@ ssize_t nonblock_write(int fd, void *buf, size_t len) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void network_init_driver(caca_t *kk) | int network_install(caca_t *kk) | ||||
{ | { | ||||
kk->drv.driver = CACA_DRIVER_NETWORK; | kk->drv.driver = CACA_DRIVER_NETWORK; | ||||
@@ -562,6 +562,8 @@ void network_init_driver(caca_t *kk) | |||||
kk->drv.display = network_display; | kk->drv.display = network_display; | ||||
kk->drv.handle_resize = network_handle_resize; | kk->drv.handle_resize = network_handle_resize; | ||||
kk->drv.get_event = network_get_event; | kk->drv.get_event = network_get_event; | ||||
return 0; | |||||
} | } | ||||
@@ -468,7 +468,7 @@ static void slang_check_terminal(void) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void slang_init_driver(caca_t *kk) | int slang_install(caca_t *kk) | ||||
{ | { | ||||
kk->drv.driver = CACA_DRIVER_SLANG; | kk->drv.driver = CACA_DRIVER_SLANG; | ||||
@@ -480,6 +480,8 @@ void slang_init_driver(caca_t *kk) | |||||
kk->drv.display = slang_display; | kk->drv.display = slang_display; | ||||
kk->drv.handle_resize = slang_handle_resize; | kk->drv.handle_resize = slang_handle_resize; | ||||
kk->drv.get_event = slang_get_event; | kk->drv.get_event = slang_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_SLANG */ | #endif /* USE_SLANG */ | ||||
@@ -145,7 +145,7 @@ static int vga_get_event(caca_t *kk, struct caca_event *ev) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void vga_init_driver(caca_t *kk) | int vga_install(caca_t *kk) | ||||
{ | { | ||||
kk->drv.driver = CACA_DRIVER_VGA; | kk->drv.driver = CACA_DRIVER_VGA; | ||||
@@ -157,6 +157,8 @@ void vga_init_driver(caca_t *kk) | |||||
kk->drv.display = vga_display; | kk->drv.display = vga_display; | ||||
kk->drv.handle_resize = vga_handle_resize; | kk->drv.handle_resize = vga_handle_resize; | ||||
kk->drv.get_event = vga_get_event; | kk->drv.get_event = vga_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_VGA */ | #endif /* USE_VGA */ | ||||
@@ -333,7 +333,7 @@ static int win32_get_event(caca_t *kk, struct caca_event *ev) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void win32_init_driver(caca_t *kk) | int win32_install(caca_t *kk) | ||||
{ | { | ||||
kk->drv.driver = CACA_DRIVER_WIN32; | kk->drv.driver = CACA_DRIVER_WIN32; | ||||
@@ -345,6 +345,8 @@ void win32_init_driver(caca_t *kk) | |||||
kk->drv.display = win32_display; | kk->drv.display = win32_display; | ||||
kk->drv.handle_resize = win32_handle_resize; | kk->drv.handle_resize = win32_handle_resize; | ||||
kk->drv.get_event = win32_get_event; | kk->drv.get_event = win32_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_WIN32 */ | #endif /* USE_WIN32 */ | ||||
@@ -92,9 +92,11 @@ static int x11_init_graphics(caca_t *kk) | |||||
kk->drv.p = malloc(sizeof(struct driver_private)); | kk->drv.p = malloc(sizeof(struct driver_private)); | ||||
#if defined(HAVE_GETENV) | |||||
geometry = getenv("CACA_GEOMETRY"); | geometry = getenv("CACA_GEOMETRY"); | ||||
if(geometry && *geometry) | if(geometry && *geometry) | ||||
sscanf(geometry, "%ux%u", &width, &height); | sscanf(geometry, "%ux%u", &width, &height); | ||||
#endif | |||||
if(width && height) | if(width && height) | ||||
_cucul_set_size(kk->qq, width, height); | _cucul_set_size(kk->qq, width, height); | ||||
@@ -103,10 +105,12 @@ static int x11_init_graphics(caca_t *kk) | |||||
if(kk->drv.p->dpy == NULL) | if(kk->drv.p->dpy == NULL) | ||||
return -1; | return -1; | ||||
#if defined(HAVE_GETENV) | |||||
fonts[0] = getenv("CACA_FONT"); | fonts[0] = getenv("CACA_FONT"); | ||||
if(fonts[0] && *fonts[0]) | if(fonts[0] && *fonts[0]) | ||||
parser = fonts; | parser = fonts; | ||||
else | else | ||||
#endif | |||||
parser = fonts + 1; | parser = fonts + 1; | ||||
/* Ignore font errors */ | /* Ignore font errors */ | ||||
@@ -543,8 +547,13 @@ static int x11_error_handler(Display *dpy, XErrorEvent *xevent) | |||||
* Driver initialisation | * Driver initialisation | ||||
*/ | */ | ||||
void x11_init_driver(caca_t *kk) | int x11_install(caca_t *kk) | ||||
{ | { | ||||
#if defined(HAVE_GETENV) | |||||
if(!getenv("DISPLAY") || !*(getenv("DISPLAY"))) | |||||
return -1; | |||||
#endif | |||||
kk->drv.driver = CACA_DRIVER_X11; | kk->drv.driver = CACA_DRIVER_X11; | ||||
kk->drv.init_graphics = x11_init_graphics; | kk->drv.init_graphics = x11_init_graphics; | ||||
@@ -555,6 +564,8 @@ void x11_init_driver(caca_t *kk) | |||||
kk->drv.display = x11_display; | kk->drv.display = x11_display; | ||||
kk->drv.handle_resize = x11_handle_resize; | kk->drv.handle_resize = x11_handle_resize; | ||||
kk->drv.get_event = x11_get_event; | kk->drv.get_event = x11_get_event; | ||||
return 0; | |||||
} | } | ||||
#endif /* USE_X11 */ | #endif /* USE_X11 */ | ||||