瀏覽代碼

* Allow the driver initialisation to fail, for instance when $DISPLAY = "".

tags/v0.99.beta14
Sam Hocevar sam 19 年之前
父節點
當前提交
70cb2ab916
共有 10 個檔案被更改,包括 67 行新增71 行删除
  1. +17
    -53
      caca/caca.c
  2. +10
    -10
      caca/caca_internals.h
  3. +3
    -1
      caca/driver_conio.c
  4. +10
    -1
      caca/driver_gl.c
  5. +3
    -1
      caca/driver_ncurses.c
  6. +3
    -1
      caca/driver_network.c
  7. +3
    -1
      caca/driver_slang.c
  8. +3
    -1
      caca/driver_vga.c
  9. +3
    -1
      caca/driver_win32.c
  10. +12
    -1
      caca/driver_x11.c

+ 17
- 53
caca/caca.c 查看文件

@@ -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;


+ 10
- 10
caca/caca_internals.h 查看文件

@@ -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;




+ 3
- 1
caca/driver_conio.c 查看文件

@@ -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 */


+ 10
- 1
caca/driver_gl.c 查看文件

@@ -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 */


+ 3
- 1
caca/driver_ncurses.c 查看文件

@@ -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 */


+ 3
- 1
caca/driver_network.c 查看文件

@@ -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;
} }






+ 3
- 1
caca/driver_slang.c 查看文件

@@ -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 */


+ 3
- 1
caca/driver_vga.c 查看文件

@@ -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 */


+ 3
- 1
caca/driver_win32.c 查看文件

@@ -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 */


+ 12
- 1
caca/driver_x11.c 查看文件

@@ -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 */


||||||
x
 
000:0
Loading…
取消
儲存