You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 18 години
преди 21 години
преди 21 години
преди 21 години
преди 18 години
преди 21 години
преди 21 години
преди 21 години
преди 19 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /*
  2. * libcaca Colour ASCII-Art library
  3. * Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org>
  4. * All Rights Reserved
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the Do What The Fuck You Want To
  8. * Public License, Version 2, as published by Sam Hocevar. See
  9. * http://sam.zoy.org/wtfpl/COPYING for more details.
  10. */
  11. /** \file caca.h
  12. * \version \$Id$
  13. * \author Sam Hocevar <sam@zoy.org>
  14. * \brief The \e libcaca public header.
  15. *
  16. * This header contains the public types and functions that applications
  17. * using \e libcaca may use.
  18. */
  19. /** \mainpage libcaca developer documentation
  20. *
  21. * \section intro Introduction
  22. *
  23. * \e libcaca is a graphics library that outputs text instead of pixels,
  24. * so that it can work on older video cards or text terminals. It is not
  25. * unlike the famous AAlib library. \e libcaca can use almost any virtual
  26. * terminal to work, thus it should work on all Unix systems (including
  27. * Mac OS X) using either the slang library or the ncurses library, on DOS
  28. * using the conio library, and on Windows systems using either slang or
  29. * ncurses (through Cygwin emulation) or conio. There is also a native X11
  30. * driver, and an OpenGL driver (through freeglut) that does not require a
  31. * text terminal. For machines without a screen, the raw driver can be used
  32. * to send the output to another machine, using for instance cacaserver.
  33. *
  34. * \e libcaca is free software, released under the Do What The Fuck You
  35. * Want To Public License. This ensures that no one, not even the \e libcaca
  36. * developers, will ever have anything to say about what you do with the
  37. * software. It used to be licensed under the GNU Lesser General Public
  38. * License, but that was not free enough.
  39. *
  40. * \section api The libcaca API
  41. *
  42. * \e libcaca relies on a low-level, device independent library, called
  43. * \e libcucul. \e libcucul can be used alone as a simple ASCII and/or
  44. * Unicode compositing canvas.
  45. *
  46. * The complete \e libcucul and \e libcaca programming interface is
  47. * available from the cucul.h and caca.h headers.
  48. *
  49. * \section env Environment variables
  50. *
  51. * Some environment variables can be used to change the behaviour of
  52. * \e libcaca without having to modify the program which uses them. These
  53. * variables are:
  54. *
  55. * \li \b CACA_DRIVER: set the backend video driver. In order of preference:
  56. * - \c conio uses the DOS conio.h interface.
  57. * - \c ncurses uses the ncurses library.
  58. * - \c slang uses the S-Lang library.
  59. * - \c x11 uses the native X11 driver.
  60. * - \c gl uses freeglut and opengl libraries.
  61. * - \c raw outputs to the standard output instead of rendering the
  62. * canvas. This is can be used together with cacaserver.
  63. *
  64. * \li \b CACA_GEOMETRY: set the video display size. The format of this
  65. * variable must be XxY, with X and Y being integer values. This option
  66. * currently works with the network, X11 and GL drivers.
  67. *
  68. * \li \b CACA_FONT: set the rendered font. The format of this variable is
  69. * implementation dependent, but since it currently only works with the
  70. * X11 driver, an X11 font name such as "fixed" or "5x7" is expected.
  71. */
  72. #ifndef __CACA_H__
  73. #define __CACA_H__
  74. #define CACA_API_VERSION_1
  75. #include <cucul.h>
  76. #ifdef __cplusplus
  77. extern "C"
  78. {
  79. #endif
  80. /** \brief User event types.
  81. *
  82. * Event types returned by caca_get_event().
  83. */
  84. enum caca_event_type
  85. {
  86. CACA_EVENT_NONE = 0x0000, /**< No event. */
  87. CACA_EVENT_KEY_PRESS = 0x0001, /**< A key was pressed. */
  88. CACA_EVENT_KEY_RELEASE = 0x0002, /**< A key was released. */
  89. CACA_EVENT_MOUSE_PRESS = 0x0004, /**< A mouse button was pressed. */
  90. CACA_EVENT_MOUSE_RELEASE = 0x0008, /**< A mouse button was released. */
  91. CACA_EVENT_MOUSE_MOTION = 0x0010, /**< The mouse was moved. */
  92. CACA_EVENT_RESIZE = 0x0020, /**< The window was resized. */
  93. CACA_EVENT_ANY = 0xffff /**< Bitmask for any event. */
  94. };
  95. /** \brief User events.
  96. *
  97. * This structure is filled by caca_get_event() when an event is received.
  98. * The \e type field is always valid. The validity of the \e data union
  99. * depends on the value of the \e type field:
  100. *
  101. * \li \b CACA_EVENT_NONE: no other field is valid.
  102. *
  103. * \li \b CACA_EVENT_KEY_PRESS, \b CACA_EVENT_KEY_RELEASE: the \e data.key.c
  104. * field is valid and contains either the ASCII value for the key, or
  105. * an \e enum \e caca_key value. If the value is a printable ASCII
  106. * character, the \e data.key.ucs4 and \e data.key.utf8 fields are
  107. * also filled and contain respectively the UCS-4/UTF-32 and the UTF-8
  108. * representations of the character. Otherwise, their content is
  109. * undefined.
  110. *
  111. * \li \b CACA_EVENT_MOUSE_PRESS, \b CACA_EVENT_MOUSE_RELEASE: the
  112. * \e data.mouse.button field is valid and contains the index of the
  113. * mouse button that was pressed.
  114. *
  115. * \li \b CACA_EVENT_MOUSE_MOTION: the \e data.mouse.x and \e data.mouse.y
  116. * fields are valid and contain the mouse coordinates in character
  117. * cells.
  118. *
  119. * \li \b CACA_EVENT_RESIZE: the \e data.resize.w and \e data.resize.h
  120. * fields are valid and contain the new width and height values of
  121. * the \e libcucul canvas attached to \e libcaca.
  122. *
  123. * The result of accessing data members outside the above conditions is
  124. * undefined.
  125. */
  126. struct caca_event
  127. {
  128. enum caca_event_type type;
  129. union
  130. {
  131. struct { unsigned int x, y, button; } mouse;
  132. struct { unsigned int w, h; } resize;
  133. struct { unsigned int c; unsigned long int ucs4; char utf8[8]; } key;
  134. } data;
  135. };
  136. /** \brief Special key values.
  137. *
  138. * Special key values returned by caca_get_event() for which there is no
  139. * ASCII equivalent.
  140. */
  141. enum caca_key
  142. {
  143. CACA_KEY_UNKNOWN = 0x00, /**< Unknown key. */
  144. /* The following keys have ASCII equivalents */
  145. CACA_KEY_BACKSPACE = 0x08, /**< The backspace key. */
  146. CACA_KEY_TAB = 0x09, /**< The tabulation key. */
  147. CACA_KEY_RETURN = 0x0d, /**< The return key. */
  148. CACA_KEY_PAUSE = 0x13, /**< The pause key. */
  149. CACA_KEY_ESCAPE = 0x1b, /**< The escape key. */
  150. CACA_KEY_DELETE = 0x7f, /**< The delete key. */
  151. /* The following keys do not have ASCII equivalents but have been
  152. * chosen to match the SDL equivalents */
  153. CACA_KEY_UP = 0x111, /**< The up arrow key. */
  154. CACA_KEY_DOWN = 0x112, /**< The down arrow key. */
  155. CACA_KEY_LEFT = 0x113, /**< The left arrow key. */
  156. CACA_KEY_RIGHT = 0x114, /**< The right arrow key. */
  157. CACA_KEY_INSERT = 0x115, /**< The insert key. */
  158. CACA_KEY_HOME = 0x116, /**< The home key. */
  159. CACA_KEY_END = 0x117, /**< The end key. */
  160. CACA_KEY_PAGEUP = 0x118, /**< The page up key. */
  161. CACA_KEY_PAGEDOWN = 0x119, /**< The page down key. */
  162. CACA_KEY_F1 = 0x11a, /**< The F1 key. */
  163. CACA_KEY_F2 = 0x11b, /**< The F2 key. */
  164. CACA_KEY_F3 = 0x11c, /**< The F3 key. */
  165. CACA_KEY_F4 = 0x11d, /**< The F4 key. */
  166. CACA_KEY_F5 = 0x11e, /**< The F5 key. */
  167. CACA_KEY_F6 = 0x11f, /**< The F6 key. */
  168. CACA_KEY_F7 = 0x120, /**< The F7 key. */
  169. CACA_KEY_F8 = 0x121, /**< The F8 key. */
  170. CACA_KEY_F9 = 0x122, /**< The F9 key. */
  171. CACA_KEY_F10 = 0x123, /**< The F10 key. */
  172. CACA_KEY_F11 = 0x124, /**< The F11 key. */
  173. CACA_KEY_F12 = 0x125, /**< The F12 key. */
  174. CACA_KEY_F13 = 0x126, /**< The F13 key. */
  175. CACA_KEY_F14 = 0x127, /**< The F14 key. */
  176. CACA_KEY_F15 = 0x128 /**< The F15 key. */
  177. };
  178. typedef struct caca_context caca_t;
  179. /** \defgroup basic Basic functions
  180. *
  181. * These functions provide the basic \e libcaca routines for driver
  182. * initialisation, system information retrieval and configuration.
  183. *
  184. * @{ */
  185. caca_t * caca_attach(cucul_t *qq);
  186. void caca_detach(caca_t *kk);
  187. void caca_set_delay(caca_t *kk, unsigned int);
  188. void caca_display(caca_t *kk);
  189. unsigned int caca_get_rendertime(caca_t *kk);
  190. unsigned int caca_get_window_width(caca_t *kk);
  191. unsigned int caca_get_window_height(caca_t *kk);
  192. int caca_set_window_title(caca_t *kk, char const *);
  193. /* @} */
  194. /** \defgroup event Event handling
  195. *
  196. * These functions handle user events such as keyboard input and mouse
  197. * clicks.
  198. *
  199. * @{ */
  200. int caca_get_event(caca_t *kk, unsigned int, struct caca_event *, int);
  201. unsigned int caca_get_mouse_x(caca_t *kk);
  202. unsigned int caca_get_mouse_y(caca_t *kk);
  203. void caca_set_mouse(caca_t *kk, int);
  204. /* @} */
  205. #ifdef __cplusplus
  206. }
  207. #endif
  208. #endif /* __CACA_H__ */