diff --git a/caca/Makefile.am b/caca/Makefile.am index 30e372b..7a0e4a5 100644 --- a/caca/Makefile.am +++ b/caca/Makefile.am @@ -1,117 +1,119 @@ -# $Id$ - -EXTRA_DIST = caca_types.h.in caca.pc.in \ - mono9.data monobold12.data \ - libcaca.vcproj libcaca.def -DISTCLEANFILES = caca_types.h caca.pc - -AM_CPPFLAGS = -I$(top_srcdir) -DPLUGINDIR=\"$(plugindir)\" - -pkgconfig_DATA = caca.pc -pkgconfigdir = $(libdir)/pkgconfig - -include_HEADERS = caca.h caca_types.h caca0.h - -lib_LTLIBRARIES = libcaca.la - -libcaca_la_SOURCES = \ - caca.c \ - caca.h \ - caca_types.h \ - caca_internals.h \ - caca_stubs.h \ - caca0.c \ - caca0.h \ - canvas.c \ - dirty.c \ - string.c \ - legacy.c \ - transform.c \ - charset.c \ - attr.c \ - line.c \ - box.c \ - conic.c \ - triangle.c \ - frame.c \ - dither.c \ - font.c \ - file.c \ - figfont.c \ - graphics.c \ - event.c \ - time.c \ - $(codec_source) \ - $(driver_source) \ - $(NULL) -libcaca_la_DEPENDENCIES = \ - mono9.data \ - monobold12.data \ - $(NULL) -libcaca_la_CPPFLAGS = $(AM_CPPFLAGS) @CACA_CFLAGS@ -D__LIBCACA__ -libcaca_la_LDFLAGS = -no-undefined -version-number @LT_VERSION@ -libcaca_la_LIBADD = @CACA_LIBS@ $(ZLIB_LIBS) - -codec_source = \ - codec/import.c \ - codec/export.c \ - codec/codec.h \ - codec/text.c \ - $(NULL) - -driver_source = \ - driver/conio.c \ - driver/ncurses.c \ - driver/null.c \ - driver/raw.c \ - driver/slang.c \ - driver/vga.c \ - driver/win32.c \ - $(NULL) - -install-exec-local: - $(mkinstalldirs) $(DESTDIR)$(libdir) - . libcaca.la; \ - for x in $$library_names; do \ - ln -sf $$x $(DESTDIR)$(libdir)/$$(echo $$x | sed 's/caca/cucul/g'); \ - done - ln -sf libcaca.la $(DESTDIR)$(libdir)/libcucul.la - -install-data-local: - $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) - ln -sf caca.pc $(DESTDIR)$(pkgconfigdir)/cucul.pc - $(mkinstalldirs) $(DESTDIR)$(includedir) - ln -sf caca.h $(DESTDIR)$(includedir)/cucul.h - -uninstall-local: - . libcaca.la; \ - for x in $$library_names; do \ - rm -f $(DESTDIR)$(libdir)/$$(echo $$x | sed 's/caca/cucul/g'); \ - done - rm -f $(DESTDIR)$(libdir)/libcucul.la - rmdir $(DESTDIR)$(libdir) 2>/dev/null || true - rm -f $(DESTDIR)$(pkgconfigdir)/cucul.pc - rmdir $(DESTDIR)$(pkgconfigdir) 2>/dev/null || true - rm -f $(DESTDIR)$(includedir)/cucul.h - -if USE_PLUGINS -plugin_LTLIBRARIES = libx11_plugin.la libgl_plugin.la -plugindir = $(libdir)/caca - -libx11_plugin_la_SOURCES = driver/x11.c -libx11_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(X11_CFLAGS) -libx11_plugin_la_LDFLAGS = -no-undefined -module -no-version -libx11_plugin_la_LIBADD = libcaca.la $(X11_LIBS) - -libgl_plugin_la_SOURCES = driver/gl.c -libgl_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(GL_CFLAGS) #$(FTGL_CFLAGS) -libgl_plugin_la_LDFLAGS = -no-undefined -module -no-version -libgl_plugin_la_LIBADD = libcaca.la $(GL_LIBS) #$(FTGL_LIBS) -else -driver_source += driver/x11.c driver/gl.c -endif - -if USE_COCOA -driver_source += driver/cocoa.m -endif - +# $Id$ + +EXTRA_DIST = caca_types.h.in caca.pc.in \ + mono9.data monobold12.data \ + libcaca.vcproj libcaca.def +DISTCLEANFILES = caca_types.h caca.pc + +AM_CPPFLAGS = -I$(top_srcdir) -DPLUGINDIR=\"$(plugindir)\" + +pkgconfig_DATA = caca.pc +pkgconfigdir = $(libdir)/pkgconfig + +include_HEADERS = caca.h caca_types.h caca_conio.h caca0.h + +lib_LTLIBRARIES = libcaca.la + +libcaca_la_SOURCES = \ + caca.c \ + caca.h \ + caca_types.h \ + caca_internals.h \ + caca_stubs.h \ + caca_conio.c \ + caca_conio.h \ + caca0.c \ + caca0.h \ + canvas.c \ + dirty.c \ + string.c \ + legacy.c \ + transform.c \ + charset.c \ + attr.c \ + line.c \ + box.c \ + conic.c \ + triangle.c \ + frame.c \ + dither.c \ + font.c \ + file.c \ + figfont.c \ + graphics.c \ + event.c \ + time.c \ + $(codec_source) \ + $(driver_source) \ + $(NULL) +libcaca_la_DEPENDENCIES = \ + mono9.data \ + monobold12.data \ + $(NULL) +libcaca_la_CPPFLAGS = $(AM_CPPFLAGS) @CACA_CFLAGS@ -D__LIBCACA__ +libcaca_la_LDFLAGS = -no-undefined -version-number @LT_VERSION@ +libcaca_la_LIBADD = @CACA_LIBS@ $(ZLIB_LIBS) + +codec_source = \ + codec/import.c \ + codec/export.c \ + codec/codec.h \ + codec/text.c \ + $(NULL) + +driver_source = \ + driver/conio.c \ + driver/ncurses.c \ + driver/null.c \ + driver/raw.c \ + driver/slang.c \ + driver/vga.c \ + driver/win32.c \ + $(NULL) + +install-exec-local: + $(mkinstalldirs) $(DESTDIR)$(libdir) + . libcaca.la; \ + for x in $$library_names; do \ + ln -sf $$x $(DESTDIR)$(libdir)/$$(echo $$x | sed 's/caca/cucul/g'); \ + done + ln -sf libcaca.la $(DESTDIR)$(libdir)/libcucul.la + +install-data-local: + $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) + ln -sf caca.pc $(DESTDIR)$(pkgconfigdir)/cucul.pc + $(mkinstalldirs) $(DESTDIR)$(includedir) + ln -sf caca.h $(DESTDIR)$(includedir)/cucul.h + +uninstall-local: + . libcaca.la; \ + for x in $$library_names; do \ + rm -f $(DESTDIR)$(libdir)/$$(echo $$x | sed 's/caca/cucul/g'); \ + done + rm -f $(DESTDIR)$(libdir)/libcucul.la + rmdir $(DESTDIR)$(libdir) 2>/dev/null || true + rm -f $(DESTDIR)$(pkgconfigdir)/cucul.pc + rmdir $(DESTDIR)$(pkgconfigdir) 2>/dev/null || true + rm -f $(DESTDIR)$(includedir)/cucul.h + +if USE_PLUGINS +plugin_LTLIBRARIES = libx11_plugin.la libgl_plugin.la +plugindir = $(libdir)/caca + +libx11_plugin_la_SOURCES = driver/x11.c +libx11_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(X11_CFLAGS) +libx11_plugin_la_LDFLAGS = -no-undefined -module -no-version +libx11_plugin_la_LIBADD = libcaca.la $(X11_LIBS) + +libgl_plugin_la_SOURCES = driver/gl.c +libgl_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(GL_CFLAGS) #$(FTGL_CFLAGS) +libgl_plugin_la_LDFLAGS = -no-undefined -module -no-version +libgl_plugin_la_LIBADD = libcaca.la $(GL_LIBS) #$(FTGL_LIBS) +else +driver_source += driver/x11.c driver/gl.c +endif + +if USE_COCOA +driver_source += driver/cocoa.m +endif + diff --git a/caca/caca_conio.c b/caca/caca_conio.c new file mode 100644 index 0000000..0228e75 --- /dev/null +++ b/caca/caca_conio.c @@ -0,0 +1,392 @@ +/* + * libcaca Colour ASCII-Art library + * Copyright (c) 2002-2009 Sam Hocevar + * All Rights Reserved + * + * $Id$ + * + * This library is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. + */ + +/* + * This file contains a full conio.h reimplementation. More information + * on conio.h can be found on http://poli.cs.vsb.cz/c/help/conio.htm + */ + +#include "config.h" + +#if !defined(__KERNEL__) +# include +# include +#endif + +#include "caca.h" +#include "caca_internals.h" +#include "caca_conio.h" + +static caca_canvas_t *cv; +static caca_display_t *dp; + +static int unget_ch = -1; +static char pass_buffer[BUFSIZ]; +static char cgets_buffer[BUFSIZ]; + +static void conio_init(void); +static void conio_refresh(void); +static void conio_fini(void); + +/** \brief DOS conio.h cgets() equivalent */ +char * caca_conio_cgets(char *str) +{ + conio_init(); + + /* TODO: implement this function */ + cgets_buffer[0] = '\0'; + + return cgets_buffer; +} + +/** \brief DOS conio.h clreol() equivalent */ +void caca_conio_clreol(void) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h clrscr() equivalent */ +void caca_conio_clrscr(void) +{ + conio_init(); + + caca_clear_canvas(cv); + + conio_refresh(); +} + +/** \brief DOS conio.h cprintf() equivalent */ +int caca_conio_cprintf(const char *format, ...) +{ + va_list args; + + conio_init(); + + va_start(args, format); + caca_vprintf(cv, caca_wherex(cv), caca_wherey(cv), format, args); + va_end(args); + + conio_refresh(); + + /* FIXME: we should fix caca_vprintf so that it returns the number of + * characters that were printed. */ + return 0; +} + +/** \brief DOS conio.h cputs() equivalent */ +int caca_conio_cputs(const char *str) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h cscanf() equivalent */ +int caca_conio_cscanf(char *format, ...) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h delline() equivalent */ +void caca_conio_delline(void) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h getch() equivalent */ +int caca_conio_getch(void) +{ + caca_event_t ev; + int ch; + + conio_init(); + + if(unget_ch >= 0) + { + int tmp = unget_ch; + unget_ch = -1; + return tmp; + } + + caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, -1); + ch = caca_get_event_key_ch(&ev); + + switch(ch) + { + case CACA_KEY_LEFT: ch = 75; break; + case CACA_KEY_RIGHT: ch = 77; break; + default: break; + } + + return ch; +} + +/** \brief DOS conio.h getche() equivalent */ +int caca_conio_getche(void) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h getpass() equivalent */ +char * caca_conio_getpass(const char *prompt) +{ + conio_init(); + + /* TODO: implement this function */ + pass_buffer[0] = '\0'; + + return pass_buffer; +} + +/** \brief DOS conio.h gettext() equivalent */ +int caca_conio_gettext(int left, int top, int right, int bottom, void *destin) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h gettextinfo() equivalent */ +void caca_conio_gettextinfo(struct caca_conio_text_info *r) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h gotoxy() equivalent */ +void caca_conio_gotoxy(int x, int y) +{ + conio_init(); + + caca_gotoxy(cv, x - 1, y - 1); + + conio_refresh(); +} + +/** \brief DOS conio.h highvideo() equivalent */ +void caca_conio_highvideo(void) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h insline() equivalent */ +void caca_conio_insline(void) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h kbhit() equivalent */ +int caca_conio_kbhit(void) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h lowvideo() equivalent */ +void caca_conio_lowvideo(void) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h movetext() equivalent */ +int caca_conio_movetext(int left, int top, int right, int bottom, + int destleft, int desttop) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h normvideo() equivalent */ +void caca_conio_normvideo(void) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS stdio.h printf() equivalent */ +int caca_conio_printf(const char *format, ...) +{ + va_list args; + + conio_init(); + + va_start(args, format); + caca_vprintf(cv, caca_wherex(cv), caca_wherey(cv), format, args); + va_end(args); + + conio_refresh(); + + /* FIXME: we should fix caca_vprintf so that it returns the number of + * characters that were printed. */ + return 0; +} + +/** \brief DOS conio.h putch() equivalent */ +int caca_conio_putch(int ch) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h puttext() equivalent */ +int caca_conio_puttext(int left, int top, int right, int bottom, void *destin) +{ + conio_init(); + + /* TODO: implement this function */ + + return 0; +} + +/** \brief DOS conio.h _setcursortype() equivalent */ +void caca_conio__setcursortype(int cur_t) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h textattr() equivalent */ +void caca_conio_textattr(int newattr) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h textbackground() equivalent */ +void caca_conio_textbackground(int newcolor) +{ + conio_init(); + + caca_set_color_ansi(cv, caca_attr_to_ansi_fg(caca_get_attr(cv, -1, -1)), + newcolor); +} + +/** \brief DOS conio.h textcolor() equivalent */ +void caca_conio_textcolor(int newcolor) +{ + conio_init(); + + caca_set_color_ansi(cv, newcolor, + caca_attr_to_ansi_bg(caca_get_attr(cv, -1, -1))); +} + +/** \brief DOS conio.h textmode() equivalent */ +void caca_conio_textmode(int newmode) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/** \brief DOS conio.h ungetch() equivalent */ +int caca_conio_ungetch(int ch) +{ + conio_init(); + + if(unget_ch >= 0) + return EOF; + + unget_ch = ch; + + return ch; +} + +/** \brief DOS conio.h wherex() equivalent */ +int caca_conio_wherex(void) +{ + conio_init(); + + return caca_wherex(cv) + 1; +} + +/** \brief DOS conio.h wherey() equivalent */ +int caca_conio_wherey(void) +{ + conio_init(); + + return caca_wherey(cv) + 1; +} + +/** \brief DOS conio.h window() equivalent */ +void caca_conio_window(int left, int top, int right, int bottom) +{ + conio_init(); + + /* TODO: implement this function */ +} + +/* XXX: the following functions are local. */ + +static void conio_init(void) +{ + if(!cv) + cv = caca_create_canvas(80, 25); + if(!dp) + { + dp = caca_create_display(cv); + caca_set_cursor(dp, 1); +#if defined HAVE_ATEXIT + atexit(conio_fini); +#endif + } +} + +static void conio_refresh(void) +{ + caca_refresh_display(dp); +} + +static void conio_fini(void) +{ + caca_free_display(dp); + dp = NULL; + caca_free_canvas(cv); + cv = NULL; +} + diff --git a/caca/caca_conio.h b/caca/caca_conio.h new file mode 100644 index 0000000..2c20ba7 --- /dev/null +++ b/caca/caca_conio.h @@ -0,0 +1,255 @@ +/* + * libcaca Colour ASCII-Art library + * Copyright (c) 2002-2009 Sam Hocevar + * All Rights Reserved + * + * $Id$ + * + * This library is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. + */ + +/* + * This header contains a conio.h reimplementation. + */ + +#ifndef __CACA_CONIO_H__ +#define __CACA_CONIO_H__ + +#include + +#if !defined(__KERNEL__) +# include +#endif + +#undef __extern +#if defined(_DOXYGEN_SKIP_ME) +#elif defined(_WIN32) && defined(__LIBCACA__) +# define __extern extern __declspec(dllexport) +#else +# define __extern extern +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* conio.h defines and global variables */ +#define CACA_CONIO_BLINK 128 +#define CACA_CONIO_BLACK 0 +#define CACA_CONIO_BLUE 1 +#define CACA_CONIO_GREEN 2 +#define CACA_CONIO_CYAN 3 +#define CACA_CONIO_RED 4 +#define CACA_CONIO_MAGENTA 5 +#define CACA_CONIO_BROWN 6 +#define CACA_CONIO_LIGHTGRAY 7 +#define CACA_CONIO_DARKGRAY 8 +#define CACA_CONIO_LIGHTBLUE 9 +#define CACA_CONIO_LIGHTGREEN 10 +#define CACA_CONIO_LIGHTCYAN 11 +#define CACA_CONIO_LIGHTRED 12 +#define CACA_CONIO_LIGHTMAGENTA 13 +#define CACA_CONIO_YELLOW 14 +#define CACA_CONIO_WHITE 15 +__extern int caca_conio_directvideo; +#define CACA_CONIO__NOCURSOR 0 +#define CACA_CONIO__SOLIDCURSOR 1 +#define CACA_CONIO__NORMALCURSOR 2 +struct caca_conio_text_info +{ + unsigned char winleft; /* left window coordinate */ + unsigned char wintop; /* top window coordinate */ + unsigned char winright; /* right window coordinate */ + unsigned char winbottom; /* bottom window coordinate */ + unsigned char attribute; /* text attribute */ + unsigned char normattr; /* normal attribute */ + unsigned char currmode; /* current video mode: + BW40, BW80, C40, C80, or C4350 */ + unsigned char screenheight; /* text screen's height */ + unsigned char screenwidth; /* text screen's width */ + unsigned char curx; /* x-coordinate in current window */ + unsigned char cury; /* y-coordinate in current window */ +}; +#define CACA_CONIO_LASTMODE -1 +#define CACA_CONIO_BW40 0 +#define CACA_CONIO_C40 1 +#define CACA_CONIO_BW80 2 +#define CACA_CONIO_C80 3 +#define CACA_CONIO_MONO 7 +#define CACA_CONIO_C4350 64 +__extern int caca_conio__wscroll; + +#if !defined _DOXYGEN_SKIP_ME && !defined __LIBCACA__ +# undef BLINK +# define BLINK CACA_CONIO_BLINK +# undef BLACK +# define BLACK CACA_CONIO_BLACK +# undef BLUE +# define BLUE CACA_CONIO_BLUE +# undef GREEN +# define GREEN CACA_CONIO_GREEN +# undef CYAN +# define CYAN CACA_CONIO_CYAN +# undef RED +# define RED CACA_CONIO_RED +# undef MAGENTA +# define MAGENTA CACA_CONIO_MAGENTA +# undef BROWN +# define BROWN CACA_CONIO_BROWN +# undef LIGHTGRAY +# define LIGHTGRAY CACA_CONIO_LIGHTGRAY +# undef DARKGRAY +# define DARKGRAY CACA_CONIO_DARKGRAY +# undef LIGHTBLUE +# define LIGHTBLUE CACA_CONIO_LIGHTBLUE +# undef LIGHTGREEN +# define LIGHTGREEN CACA_CONIO_LIGHTGREEN +# undef LIGHTCYAN +# define LIGHTCYAN CACA_CONIO_LIGHTCYAN +# undef LIGHTRED +# define LIGHTRED CACA_CONIO_LIGHTRED +# undef LIGHTMAGENTA +# define LIGHTMAGENTA CACA_CONIO_LIGHTMAGENTA +# undef YELLOW +# define YELLOW CACA_CONIO_YELLOW +# undef WHITE +# define WHITE CACA_CONIO_WHITE +# undef directvideo +# define directvideo caca_conio_directvideo +# undef _NOCURSOR +# define _NOCURSOR CACA_CONIO__NOCURSOR +# undef _SOLIDCURSOR +# define _SOLIDCURSOR CACA_CONIO__SOLIDCURSOR +# undef _NORMALCURSOR +# define _NORMALCURSOR CACA_CONIO__NORMALCURSOR +# undef text_info +# define text_info caca_conio_text_info +# undef LASTMODE +# define LASTMODE CACA_CONIO_LASTMODE +# undef BW40 +# define BW40 CACA_CONIO_BW40 +# undef C40 +# define C40 CACA_CONIO_C40 +# undef BW80 +# define BW80 CACA_CONIO_BW80 +# undef C80 +# define C80 CACA_CONIO_C80 +# undef MONO +# define MONO CACA_CONIO_MONO +# undef C4350 +# define C4350 CACA_CONIO_C4350 +# undef _wscroll +# define _wscroll caca_conio__wscroll +#endif + +/* conio.h functions */ +__extern char * caca_conio_cgets(char *str); +__extern void caca_conio_clreol(void); +__extern void caca_conio_clrscr(void); +__extern int caca_conio_cprintf(const char *format, ...); +__extern int caca_conio_cputs(const char *str); +__extern int caca_conio_cscanf(char *format, ...); +__extern void caca_conio_delline(void); +__extern int caca_conio_getch(void); +__extern int caca_conio_getche(void); +__extern char * caca_conio_getpass(const char *prompt); +__extern int caca_conio_gettext(int left, int top, int right, int bottom, + void *destin); +__extern void caca_conio_gettextinfo(struct caca_conio_text_info *r); +__extern void caca_conio_gotoxy(int x, int y); +__extern void caca_conio_highvideo(void); +__extern void caca_conio_insline(void); +__extern int caca_conio_kbhit(void); +__extern void caca_conio_lowvideo(void); +__extern int caca_conio_movetext(int left, int top, int right, int bottom, + int destleft, int desttop); +__extern void caca_conio_normvideo(void); +__extern int caca_conio_printf(const char *format, ...); +__extern int caca_conio_putch(int ch); +__extern int caca_conio_puttext(int left, int top, int right, int bottom, + void *destin); +__extern void caca_conio__setcursortype(int cur_t); +__extern void caca_conio_textattr(int newattr); +__extern void caca_conio_textbackground(int newcolor); +__extern void caca_conio_textcolor(int newcolor); +__extern void caca_conio_textmode(int newmode); +__extern int caca_conio_ungetch(int ch); +__extern int caca_conio_wherex(void); +__extern int caca_conio_wherey(void); +__extern void caca_conio_window(int left, int top, int right, int bottom); + +#if !defined _DOXYGEN_SKIP_ME && !defined __LIBCACA__ +# undef cgets +# define cgets caca_conio_cgets +# undef clreol +# define clreol caca_conio_clreol +# undef clrscr +# define clrscr caca_conio_clrscr +# undef cprintf +# define cprintf caca_conio_cprintf +# undef cputs +# define cputs caca_conio_cputs +# undef cscanf +# define cscanf caca_conio_cscanf +# undef delline +# define delline caca_conio_delline +# undef getch +# define getch caca_conio_getch +# undef getche +# define getche caca_conio_getche +# undef getpass +# define getpass caca_conio_getpass +# undef gettext +# define gettext caca_conio_gettext +# undef gettextinfo +# define gettextinfo caca_conio_gettextinfo +# undef gotoxy +# define gotoxy caca_conio_gotoxy +# undef highvideo +# define highvideo caca_conio_highvideo +# undef insline +# define insline caca_conio_insline +# undef kbhit +# define kbhit caca_conio_kbhit +# undef lowvideo +# define lowvideo caca_conio_lowvideo +# undef movetext +# define movetext caca_conio_movetext +# undef normvideo +# define normvideo caca_conio_normvideo +# undef printf +# define printf caca_conio_printf +# undef putch +# define putch caca_conio_putch +# undef puttext +# define puttext caca_conio_puttext +# undef _setcursortype +# define _setcursortype caca_conio__setcursortype +# undef textattr +# define textattr caca_conio_textattr +# undef textbackground +# define textbackground caca_conio_textbackground +# undef textcolor +# define textcolor caca_conio_textcolor +# undef textmode +# define textmode caca_conio_textmode +# undef ungetch +# define ungetch caca_conio_ungetch +# undef wherex +# define wherex caca_conio_wherex +# undef wherey +# define wherey caca_conio_wherey +# undef window +# define window caca_conio_window +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __CACA_CONIO_H__ */ diff --git a/configure.ac b/configure.ac index 75552a1..69e3e24 100644 --- a/configure.ac +++ b/configure.ac @@ -103,7 +103,7 @@ AC_ARG_ENABLE(zzuf, AC_CHECK_HEADERS(stdio.h stdarg.h signal.h sys/ioctl.h sys/time.h endian.h unistd.h arpa/inet.h netinet/in.h winsock2.h errno.h locale.h getopt.h dlfcn.h termios.h) AC_CHECK_FUNCS(signal ioctl snprintf vsnprintf getenv putenv strcasecmp htons) -AC_CHECK_FUNCS(usleep gettimeofday) +AC_CHECK_FUNCS(usleep gettimeofday atexit) ac_cv_have_getopt_long="no" AC_CHECK_FUNCS(getopt_long, diff --git a/examples/.gitignore b/examples/.gitignore index a871bcc..74a466e 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -1,6 +1,7 @@ blit canvas colors +conio demo demo0 dithering diff --git a/examples/Makefile.am b/examples/Makefile.am index f35f4ef..10b1e81 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -2,7 +2,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/caca -I$(top_builddir)/caca -noinst_PROGRAMS = blit canvas colors demo demo0 dithering driver event export figfont font font2tga frames fullwidth gamma hsv input spritedit swallow text transform truecolor unicode import +noinst_PROGRAMS = blit canvas colors conio demo demo0 dithering driver event export figfont font font2tga frames fullwidth gamma hsv input spritedit swallow text transform truecolor unicode import blit_SOURCES = blit.c blit_LDADD = ../caca/libcaca.la @@ -13,6 +13,9 @@ canvas_LDADD = ../caca/libcaca.la colors_SOURCES = colors.c colors_LDADD = ../caca/libcaca.la +conio_SOURCES = conio.c +conio_LDADD = ../caca/libcaca.la + demo_SOURCES = demo.c demo_LDADD = ../caca/libcaca.la demo_LDFLAGS = @MATH_LIBS@ diff --git a/examples/conio.c b/examples/conio.c new file mode 100644 index 0000000..0a6d3cd --- /dev/null +++ b/examples/conio.c @@ -0,0 +1,682 @@ +/*4il.c (4 in line) - compiled under Borland C++ 5.0. + *Version : Beta + *Author : Cheok Yan Cheng + *Date started coding : 11/10/2000 + *Date finished coding : 13/10/2000 + */ + +/*If you had encounted any problem, bugs or comment on this source code + *you are welcomed to contact me by my e-mail : yccheok@yahoo.com + */ + +/*Some terms in this source code that you encounted may looked strange to you. + *However, I have no time to include the explaination in detail. + *If you really want to know, please contact me through e-mail. + *Sorry for the inconvenience + */ + +#include "config.h" + +#include +#include +#include + +#include "caca_conio.h" + +#undef max + +#define X_BOARD 8 +#define Y_BOARD 8 +#define BOARD_SIZE X_BOARD*Y_BOARD + +#define BOOLEAN int +#define TRUE 1 +#define FALSE 0 + +#define WIN 1 +#define LOSE -1 +#define DRAW 0 +#define OK 2 + +#define COMPUTER 0 +#define HUMAN 1 +#define EMPTY -1 +#define BASE -2 + +#define WIN_MESSAGE "I Win! Press Any Key To Continue...\n" +#define LOSE_MESSAGE "You Win! Press Any Key To Continue...\n" +#define DRAW_MESSAGE "Draw! Press Any Key To Continue...\n" + +BOOLEAN computerMove(void); +BOOLEAN doubleHaed(int, int [Y_BOARD][X_BOARD]); +BOOLEAN humanMove(int); +BOOLEAN isFull(void); +BOOLEAN isWon(int, int [Y_BOARD][X_BOARD]); +BOOLEAN twoSnake(int, int, int [Y_BOARD][X_BOARD]); +int bestmove(void); +int max(int [X_BOARD]); +int status(void); +int xDoubleHead(int, int [Y_BOARD][X_BOARD]); +int xTwoSnake(int, int [Y_BOARD][X_BOARD]); +int xWon(int, int [Y_BOARD][X_BOARD]); +int y_Base(int, int [Y_BOARD][X_BOARD]); +void duplicate(int [Y_BOARD][X_BOARD], int [Y_BOARD][X_BOARD]); +void drawBoard(void); +void drawPiece(void); +void genNumWin(int [X_BOARD]); +void getHumanMove(void); +void init(void); +void makeMove(int, int, int [Y_BOARD][X_BOARD]); +void sorting(int n[X_BOARD]); + +int move[X_BOARD] = {3, 4, 2, 5, 1, 6, 0, 7}; +int col[X_BOARD] = {-1,-1,-1,-1,-1,-1,-1,-1}; +int square[Y_BOARD][X_BOARD] = + { {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-2, -2, -2, -2, -2, -2, -2, -2}, + }; + +BOOLEAN computerMove(void) +{ + int x_best; + if (isFull()) + return FALSE; + x_best = bestmove(); + gotoxy(52,2); + printf("x:%d, y:%d\n" ,x_best+1 ,Y_BOARD-y_Base(x_best,square)); + makeMove(COMPUTER, x_best, square); + return TRUE; +} + +BOOLEAN doubleHead(int who, int xsquare[Y_BOARD][X_BOARD]) +{ + int x,y; + for(y=0; y= X_BOARD) + return FALSE; + if (y_Base(x, square) == -1) /*indicate no base at that x-coulomb*/ + return FALSE; + if (isFull()) /*the board is full*/ + return FALSE; + gotoxy(52,5); + printf("x:%d, y:%d\n" ,x+1 ,Y_BOARD-y_Base(x,square)); + makeMove(HUMAN,x,square); + return TRUE; +} + +BOOLEAN isFull() +{ + int x; + for(x=0; x=0 + ) + return TRUE; + } + } + return FALSE; +} + +BOOLEAN twoSnake(int who, int x, int xsquare[Y_BOARD][X_BOARD]) +{ + int xxsquare[Y_BOARD][X_BOARD]; + int n[Y_BOARD] = {0,0,0,0,0,0,0,0}; + int i; + + for(i=0; ibig) + big = n[i]; + } + return big; +} + +int status() +{ + if (isWon(COMPUTER, square)) + return WIN; + else + if (isWon(HUMAN, square)) + return LOSE; + else + if (isFull()) + return DRAW; + else + return OK; +} + +int xDoubleHead(int who, int xsquare[Y_BOARD][X_BOARD]) +{ + int x; + int xxsquare[Y_BOARD][X_BOARD]; + for(x=0; x0) + x--; + break; + case 77:/*RIGHT*/ + if(x<(X_BOARD-1)) + x++; + break; + case 27:/*ESC*/ + textcolor(7); + textbackground(0); + clrscr(); + printf("Thank You For Playing 4 in line by Cheok Yan Cheng!\n"); + exit(0); + break; + case 32:/*SPACE*/ + if(humanMove(x)) + { + drawPiece(); + return; + } + else + { + gotoxy(1,20); + textcolor(4); + cprintf("OOPs! Wrong Move! \n"); + } + } + } +} + +void init() +{ + int x,y; + for(x=0; x0) + xsquare[y-1][x] = BASE; +} + +void sorting(int n[]) +{ + int i, index, alpha; + int tmp[X_BOARD]; + int store[X_BOARD]; + + for(index=0; index