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.
 
 
 
 
 
 

798 rivejä
23 KiB

  1. /*
  2. * php-caca Php binding for Libcaca
  3. * Copyright (c) 2008 Vion Nicolas <nico@picapo.net>
  4. *
  5. *
  6. * This library is free software. It comes without any warranty, to
  7. * the extent permitted by applicable law. You can redistribute it
  8. * and/or modify it under the terms of the Do What The Fuck You Want
  9. * To Public License, Version 2, as published by Sam Hocevar. See
  10. * http://sam.zoy.org/wtfpl/COPYING for more details.
  11. */
  12. #ifdef HAVE_CONFIG_H
  13. #include "config.h"
  14. #endif
  15. #include "php.h"
  16. #include "php_caca.h"
  17. static function_entry caca_functions[] = {
  18. PHP_FE(caca_create_canvas, NULL)
  19. PHP_FE(caca_manage_canvas, NULL)
  20. PHP_FE(caca_unmanage_canvas, NULL)
  21. PHP_FE(caca_set_canvas_size, NULL)
  22. PHP_FE(caca_get_canvas_width, NULL)
  23. PHP_FE(caca_get_canvas_height, NULL)
  24. PHP_FE(caca_get_canvas_chars, NULL)
  25. PHP_FE(caca_get_canvas_attrs, NULL)
  26. PHP_FE(caca_rand, NULL)
  27. PHP_FE(caca_get_version, NULL)
  28. PHP_FE(caca_gotoxy, NULL)
  29. PHP_FE(caca_get_cursor_x, NULL)
  30. PHP_FE(caca_get_cursor_y, NULL)
  31. PHP_FE(caca_put_char, NULL)
  32. PHP_FE(caca_get_char, NULL)
  33. PHP_FE(caca_put_str, NULL)
  34. PHP_FE(caca_printf, NULL)
  35. PHP_FE(caca_clear_canvas, NULL)
  36. PHP_FE(caca_set_canvas_handle, NULL)
  37. PHP_FE(caca_get_canvas_handle_x, NULL)
  38. PHP_FE(caca_get_canvas_handle_y, NULL)
  39. PHP_FE(caca_blit, NULL)
  40. PHP_FE(caca_set_canvas_boundaries, NULL)
  41. PHP_FE(caca_invert, NULL)
  42. PHP_FE(caca_flip, NULL)
  43. PHP_FE(caca_flop, NULL)
  44. PHP_FE(caca_rotate_left, NULL)
  45. PHP_FE(caca_rotate_right, NULL)
  46. PHP_FE(caca_stretch_left, NULL)
  47. PHP_FE(caca_stretch_right, NULL)
  48. PHP_FE(caca_get_attr, NULL)
  49. PHP_FE(caca_set_attr, NULL)
  50. PHP_FE(caca_put_attr, NULL)
  51. PHP_FE(caca_set_color_ansi, NULL)
  52. PHP_FE(caca_set_color_argb, NULL)
  53. PHP_FE(caca_attr_to_ansi, NULL)
  54. PHP_FE(caca_attr_to_ansi_fg, NULL)
  55. PHP_FE(caca_attr_to_ansi_bg, NULL)
  56. PHP_FE(caca_draw_line, NULL)
  57. PHP_FE(caca_draw_polyline, NULL)
  58. PHP_FE(caca_draw_thin_line, NULL)
  59. PHP_FE(caca_draw_thin_polyline, NULL)
  60. PHP_FE(caca_draw_circle, NULL)
  61. PHP_FE(caca_draw_ellipse, NULL)
  62. PHP_FE(caca_draw_thin_ellipse, NULL)
  63. PHP_FE(caca_fill_ellipse, NULL)
  64. PHP_FE(caca_draw_box, NULL)
  65. PHP_FE(caca_draw_thin_box, NULL)
  66. PHP_FE(caca_fill_box, NULL)
  67. PHP_FE(caca_draw_triangle, NULL)
  68. PHP_FE(caca_draw_thin_triangle, NULL)
  69. PHP_FE(caca_fill_triangle, NULL)
  70. PHP_FE(caca_get_frame_count, NULL)
  71. PHP_FE(caca_set_frame, NULL)
  72. PHP_FE(caca_set_frame_name, NULL)
  73. PHP_FE(caca_create_frame, NULL)
  74. PHP_FE(caca_free_frame, NULL)
  75. PHP_FE(caca_set_dither_palette, NULL)
  76. PHP_FE(caca_set_dither_brightness, NULL)
  77. PHP_FE(caca_get_dither_brightness, NULL)
  78. PHP_FE(caca_set_dither_gamma, NULL)
  79. PHP_FE(caca_get_dither_gamma, NULL)
  80. PHP_FE(caca_set_dither_contrast, NULL)
  81. PHP_FE(caca_get_dither_contrast, NULL)
  82. PHP_FE(caca_set_dither_antialias, NULL)
  83. PHP_FE(caca_get_dither_antialias_list, NULL)
  84. PHP_FE(caca_get_dither_antialias, NULL)
  85. PHP_FE(caca_set_dither_color, NULL)
  86. PHP_FE(caca_get_dither_color_list, NULL)
  87. PHP_FE(caca_get_dither_color, NULL)
  88. PHP_FE(caca_set_dither_charset, NULL)
  89. PHP_FE(caca_get_dither_charset_list, NULL)
  90. PHP_FE(caca_get_dither_charset, NULL)
  91. PHP_FE(caca_set_dither_algorithm, NULL)
  92. PHP_FE(caca_get_dither_algorithm_list, NULL)
  93. PHP_FE(caca_get_dither_algorithm, NULL)
  94. PHP_FE(caca_dither_bitmap, NULL)
  95. PHP_FE(caca_get_font_list, NULL)
  96. PHP_FE(caca_get_font_width, NULL)
  97. PHP_FE(caca_get_font_height, NULL)
  98. PHP_FE(caca_render_canvas, NULL)
  99. PHP_FE(caca_canvas_set_figfont, NULL)
  100. PHP_FE(caca_put_figchar, NULL)
  101. PHP_FE(caca_flush_figlet, NULL)
  102. PHP_FE(caca_file_close, NULL)
  103. PHP_FE(caca_file_tell, NULL)
  104. PHP_FE(caca_file_read, NULL)
  105. PHP_FE(caca_file_write, NULL)
  106. PHP_FE(caca_file_gets, NULL)
  107. PHP_FE(caca_file_eof, NULL)
  108. PHP_FE(caca_import_memory, NULL)
  109. PHP_FE(caca_import_file, NULL)
  110. PHP_FE(caca_get_import_list, NULL)
  111. PHP_FE(caca_get_export_list, NULL)
  112. PHP_FE(caca_create_display, NULL)
  113. PHP_FE(caca_create_display_with_driver, NULL)
  114. PHP_FE(caca_get_display_driver_list, NULL)
  115. PHP_FE(caca_get_display_driver, NULL)
  116. PHP_FE(caca_set_display_driver, NULL)
  117. PHP_FE(caca_get_canvas, NULL)
  118. PHP_FE(caca_refresh_display, NULL)
  119. PHP_FE(caca_set_display_time, NULL)
  120. PHP_FE(caca_get_display_time, NULL)
  121. PHP_FE(caca_get_display_width, NULL)
  122. PHP_FE(caca_get_display_height, NULL)
  123. PHP_FE(caca_set_display_title, NULL)
  124. PHP_FE(caca_set_mouse, NULL)
  125. PHP_FE(caca_set_cursor, NULL)
  126. PHP_FE(caca_get_event, NULL)
  127. PHP_FE(caca_get_mouse_x, NULL)
  128. PHP_FE(caca_get_mouse_y, NULL)
  129. PHP_FE(caca_get_event_type, NULL)
  130. PHP_FE(caca_get_event_key_ch, NULL)
  131. PHP_FE(caca_get_event_mouse_button, NULL)
  132. PHP_FE(caca_get_event_mouse_x, NULL)
  133. PHP_FE(caca_get_event_mouse_y, NULL)
  134. PHP_FE(caca_get_event_resize_width, NULL)
  135. PHP_FE(caca_get_event_resize_height, NULL)
  136. {NULL, NULL, NULL}
  137. };
  138. zend_module_entry caca_module_entry = {
  139. #if ZEND_MODULE_API_NO >= 20010901
  140. STANDARD_MODULE_HEADER,
  141. #endif
  142. PHP_CACA_EXTNAME,
  143. caca_functions,
  144. PHP_MINIT(caca),
  145. NULL,
  146. NULL,
  147. NULL,
  148. PHP_MINFO(caca),
  149. #if ZEND_MODULE_API_NO >= 20010901
  150. PHP_CACA_VERSION,
  151. #endif
  152. STANDARD_MODULE_PROPERTIES
  153. };
  154. #ifdef COMPILE_DL_CACA
  155. ZEND_GET_MODULE(caca)
  156. #endif
  157. PHP_MINFO_FUNCTION(caca) {
  158. php_info_print_table_start();
  159. php_info_print_table_row(2, "Caca library version", caca_get_version());
  160. php_info_print_table_end();
  161. }
  162. //--------CACA'S RESSOURCES DESTRUCTORS-----------//
  163. static void php_caca_canvas_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  164. caca_free_canvas(rsrc->ptr);
  165. }
  166. static void php_caca_dither_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  167. caca_free_dither(rsrc->ptr);
  168. }
  169. static void php_caca_font_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  170. caca_free_font(rsrc->ptr);
  171. }
  172. static void php_caca_file_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  173. }
  174. static void php_caca_display_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  175. caca_free_display(rsrc->ptr);
  176. }
  177. static void php_caca_event_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  178. }
  179. //--------INITIALIZATION---------//
  180. PHP_MINIT_FUNCTION(caca) {
  181. le_caca_canvas = zend_register_list_destructors_ex(php_caca_canvas_dtor, NULL, PHP_CACA_CANVAS_RES_NAME, module_number);
  182. le_caca_dither = zend_register_list_destructors_ex(php_caca_dither_dtor, NULL, PHP_CACA_DITHER_RES_NAME, module_number);
  183. le_caca_font = zend_register_list_destructors_ex(php_caca_font_dtor, NULL, PHP_CACA_FONT_RES_NAME, module_number);
  184. le_caca_file = zend_register_list_destructors_ex(php_caca_file_dtor, NULL, PHP_CACA_FILE_RES_NAME, module_number);
  185. le_caca_display = zend_register_list_destructors_ex(php_caca_display_dtor, NULL, PHP_CACA_DISPLAY_RES_NAME, module_number);
  186. le_caca_event = zend_register_list_destructors_ex(php_caca_event_dtor, NULL, PHP_CACA_EVENT_RES_NAME, module_number);
  187. REGISTER_LONG_CONSTANT("CACA_BLACK", CACA_BLACK, CONST_CS | CONST_PERSISTENT);
  188. REGISTER_LONG_CONSTANT("CACA_BLUE", CACA_BLUE, CONST_CS | CONST_PERSISTENT);
  189. REGISTER_LONG_CONSTANT("CACA_GREEN", CACA_GREEN, CONST_CS | CONST_PERSISTENT);
  190. REGISTER_LONG_CONSTANT("CACA_CYAN", CACA_CYAN, CONST_CS | CONST_PERSISTENT);
  191. REGISTER_LONG_CONSTANT("CACA_RED", CACA_RED, CONST_CS | CONST_PERSISTENT);
  192. REGISTER_LONG_CONSTANT("CACA_MAGENTA", CACA_MAGENTA, CONST_CS | CONST_PERSISTENT);
  193. REGISTER_LONG_CONSTANT("CACA_BROWN", CACA_BROWN, CONST_CS | CONST_PERSISTENT);
  194. REGISTER_LONG_CONSTANT("CACA_LIGHTGRAY", CACA_LIGHTGRAY, CONST_CS | CONST_PERSISTENT);
  195. REGISTER_LONG_CONSTANT("CACA_DARKGRAY", CACA_DARKGRAY, CONST_CS | CONST_PERSISTENT);
  196. REGISTER_LONG_CONSTANT("CACA_LIGHTBLUE", CACA_LIGHTBLUE, CONST_CS | CONST_PERSISTENT);
  197. REGISTER_LONG_CONSTANT("CACA_LIGHTGREEN", CACA_LIGHTGREEN, CONST_CS | CONST_PERSISTENT);
  198. REGISTER_LONG_CONSTANT("CACA_LIGHTCYAN", CACA_LIGHTCYAN, CONST_CS | CONST_PERSISTENT);
  199. REGISTER_LONG_CONSTANT("CACA_LIGHTRED", CACA_LIGHTRED, CONST_CS | CONST_PERSISTENT);
  200. REGISTER_LONG_CONSTANT("CACA_LIGHTMAGENTA", CACA_LIGHTMAGENTA, CONST_CS | CONST_PERSISTENT);
  201. REGISTER_LONG_CONSTANT("CACA_YELLOW", CACA_YELLOW, CONST_CS | CONST_PERSISTENT);
  202. REGISTER_LONG_CONSTANT("CACA_WHITE", CACA_WHITE, CONST_CS | CONST_PERSISTENT);
  203. REGISTER_LONG_CONSTANT("CACA_DEFAULT", CACA_DEFAULT, CONST_CS | CONST_PERSISTENT);
  204. REGISTER_LONG_CONSTANT("CACA_TRANSPARENT", CACA_TRANSPARENT, CONST_CS | CONST_PERSISTENT);
  205. REGISTER_LONG_CONSTANT("CACA_BOLD", CACA_BOLD, CONST_CS | CONST_PERSISTENT);
  206. REGISTER_LONG_CONSTANT("CACA_ITALICS", CACA_ITALICS, CONST_CS | CONST_PERSISTENT);
  207. REGISTER_LONG_CONSTANT("CACA_UNDERLINE", CACA_UNDERLINE, CONST_CS | CONST_PERSISTENT);
  208. REGISTER_LONG_CONSTANT("CACA_BLINK", CACA_BLINK, CONST_CS | CONST_PERSISTENT);
  209. REGISTER_LONG_CONSTANT("CACA_EVENT_NONE", CACA_EVENT_NONE, CONST_CS | CONST_PERSISTENT);
  210. REGISTER_LONG_CONSTANT("CACA_EVENT_KEY_PRESS", CACA_EVENT_KEY_PRESS, CONST_CS | CONST_PERSISTENT);
  211. REGISTER_LONG_CONSTANT("CACA_EVENT_KEY_RELEASE", CACA_EVENT_KEY_RELEASE, CONST_CS | CONST_PERSISTENT);
  212. REGISTER_LONG_CONSTANT("CACA_EVENT_MOUSE_PRESS", CACA_EVENT_MOUSE_PRESS, CONST_CS | CONST_PERSISTENT);
  213. REGISTER_LONG_CONSTANT("CACA_EVENT_MOUSE_RELEASE", CACA_EVENT_MOUSE_RELEASE, CONST_CS | CONST_PERSISTENT);
  214. REGISTER_LONG_CONSTANT("CACA_EVENT_MOUSE_MOTION", CACA_EVENT_MOUSE_MOTION, CONST_CS | CONST_PERSISTENT);
  215. REGISTER_LONG_CONSTANT("CACA_EVENT_RESIZE", CACA_EVENT_RESIZE, CONST_CS | CONST_PERSISTENT);
  216. REGISTER_LONG_CONSTANT("CACA_EVENT_QUIT", CACA_EVENT_QUIT, CONST_CS | CONST_PERSISTENT);
  217. REGISTER_LONG_CONSTANT("CACA_EVENT_ANY", CACA_EVENT_ANY, CONST_CS | CONST_PERSISTENT);
  218. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_A", CACA_KEY_CTRL_A, CONST_CS | CONST_PERSISTENT);
  219. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_B", CACA_KEY_CTRL_B, CONST_CS | CONST_PERSISTENT);
  220. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_C", CACA_KEY_CTRL_C, CONST_CS | CONST_PERSISTENT);
  221. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_D", CACA_KEY_CTRL_D, CONST_CS | CONST_PERSISTENT);
  222. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_E", CACA_KEY_CTRL_E, CONST_CS | CONST_PERSISTENT);
  223. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_F", CACA_KEY_CTRL_F, CONST_CS | CONST_PERSISTENT);
  224. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_G", CACA_KEY_CTRL_G, CONST_CS | CONST_PERSISTENT);
  225. REGISTER_LONG_CONSTANT("CACA_KEY_BACKSPACE", CACA_KEY_BACKSPACE, CONST_CS | CONST_PERSISTENT);
  226. REGISTER_LONG_CONSTANT("CACA_KEY_TAB", CACA_KEY_TAB, CONST_CS | CONST_PERSISTENT);
  227. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_J", CACA_KEY_CTRL_J, CONST_CS | CONST_PERSISTENT);
  228. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_K", CACA_KEY_CTRL_K, CONST_CS | CONST_PERSISTENT);
  229. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_L", CACA_KEY_CTRL_L, CONST_CS | CONST_PERSISTENT);
  230. REGISTER_LONG_CONSTANT("CACA_KEY_RETURN", CACA_KEY_RETURN, CONST_CS | CONST_PERSISTENT);
  231. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_N", CACA_KEY_CTRL_N, CONST_CS | CONST_PERSISTENT);
  232. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_O", CACA_KEY_CTRL_O, CONST_CS | CONST_PERSISTENT);
  233. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_P", CACA_KEY_CTRL_P, CONST_CS | CONST_PERSISTENT);
  234. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_Q", CACA_KEY_CTRL_Q, CONST_CS | CONST_PERSISTENT);
  235. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_R", CACA_KEY_CTRL_R, CONST_CS | CONST_PERSISTENT);
  236. REGISTER_LONG_CONSTANT("CACA_KEY_PAUSE", CACA_KEY_PAUSE, CONST_CS | CONST_PERSISTENT);
  237. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_T", CACA_KEY_CTRL_T, CONST_CS | CONST_PERSISTENT);
  238. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_U", CACA_KEY_CTRL_U, CONST_CS | CONST_PERSISTENT);
  239. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_V", CACA_KEY_CTRL_V, CONST_CS | CONST_PERSISTENT);
  240. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_W", CACA_KEY_CTRL_W, CONST_CS | CONST_PERSISTENT);
  241. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_X", CACA_KEY_CTRL_X, CONST_CS | CONST_PERSISTENT);
  242. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_Y", CACA_KEY_CTRL_Y, CONST_CS | CONST_PERSISTENT);
  243. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_Z", CACA_KEY_CTRL_Z, CONST_CS | CONST_PERSISTENT);
  244. REGISTER_LONG_CONSTANT("CACA_KEY_ESCAPE", CACA_KEY_ESCAPE, CONST_CS | CONST_PERSISTENT);
  245. REGISTER_LONG_CONSTANT("CACA_KEY_DELETE", CACA_KEY_DELETE, CONST_CS | CONST_PERSISTENT);
  246. REGISTER_LONG_CONSTANT("CACA_KEY_UP", CACA_KEY_UP, CONST_CS | CONST_PERSISTENT);
  247. REGISTER_LONG_CONSTANT("CACA_KEY_DOWN", CACA_KEY_DOWN, CONST_CS | CONST_PERSISTENT);
  248. REGISTER_LONG_CONSTANT("CACA_KEY_LEFT", CACA_KEY_LEFT, CONST_CS | CONST_PERSISTENT);
  249. REGISTER_LONG_CONSTANT("CACA_KEY_RIGHT", CACA_KEY_RIGHT, CONST_CS | CONST_PERSISTENT);
  250. REGISTER_LONG_CONSTANT("CACA_KEY_INSERT", CACA_KEY_INSERT, CONST_CS | CONST_PERSISTENT);
  251. REGISTER_LONG_CONSTANT("CACA_KEY_HOME", CACA_KEY_HOME, CONST_CS | CONST_PERSISTENT);
  252. REGISTER_LONG_CONSTANT("CACA_KEY_END", CACA_KEY_END, CONST_CS | CONST_PERSISTENT);
  253. REGISTER_LONG_CONSTANT("CACA_KEY_PAGEUP", CACA_KEY_PAGEUP, CONST_CS | CONST_PERSISTENT);
  254. REGISTER_LONG_CONSTANT("CACA_KEY_PAGEDOWN", CACA_KEY_PAGEDOWN, CONST_CS | CONST_PERSISTENT);
  255. REGISTER_LONG_CONSTANT("CACA_KEY_F1", CACA_KEY_F1, CONST_CS | CONST_PERSISTENT);
  256. REGISTER_LONG_CONSTANT("CACA_KEY_F2", CACA_KEY_F2, CONST_CS | CONST_PERSISTENT);
  257. REGISTER_LONG_CONSTANT("CACA_KEY_F3", CACA_KEY_F3, CONST_CS | CONST_PERSISTENT);
  258. REGISTER_LONG_CONSTANT("CACA_KEY_F4", CACA_KEY_F4, CONST_CS | CONST_PERSISTENT);
  259. REGISTER_LONG_CONSTANT("CACA_KEY_F5", CACA_KEY_F5, CONST_CS | CONST_PERSISTENT);
  260. REGISTER_LONG_CONSTANT("CACA_KEY_F6", CACA_KEY_F6, CONST_CS | CONST_PERSISTENT);
  261. REGISTER_LONG_CONSTANT("CACA_KEY_F7", CACA_KEY_F7, CONST_CS | CONST_PERSISTENT);
  262. REGISTER_LONG_CONSTANT("CACA_KEY_F8", CACA_KEY_F8, CONST_CS | CONST_PERSISTENT);
  263. REGISTER_LONG_CONSTANT("CACA_KEY_F9", CACA_KEY_F9, CONST_CS | CONST_PERSISTENT);
  264. REGISTER_LONG_CONSTANT("CACA_KEY_F10", CACA_KEY_F10, CONST_CS | CONST_PERSISTENT);
  265. REGISTER_LONG_CONSTANT("CACA_KEY_F11", CACA_KEY_F11, CONST_CS | CONST_PERSISTENT);
  266. REGISTER_LONG_CONSTANT("CACA_KEY_F12", CACA_KEY_F12, CONST_CS | CONST_PERSISTENT);
  267. REGISTER_LONG_CONSTANT("CACA_KEY_F13", CACA_KEY_F13, CONST_CS | CONST_PERSISTENT);
  268. REGISTER_LONG_CONSTANT("CACA_KEY_F14", CACA_KEY_F14, CONST_CS | CONST_PERSISTENT);
  269. REGISTER_LONG_CONSTANT("CACA_KEY_F15", CACA_KEY_F15, CONST_CS | CONST_PERSISTENT);
  270. return SUCCESS;
  271. }
  272. //----------SOME USEFULL MACROS---------------//
  273. #define FETCH_CANVAS(canvas) \
  274. zval *_zval; \
  275. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  276. RETURN_FALSE; \
  277. } \
  278. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  279. #define FETCH_DISPLAY(display) \
  280. zval *_zval; \
  281. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  282. RETURN_FALSE; \
  283. } \
  284. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  285. #define FETCH_EVENT(event) \
  286. zval *_zval; \
  287. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  288. RETURN_FALSE; \
  289. } \
  290. ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event);
  291. //-------CACA'S FUNCTIONS----------------//
  292. PHP_FUNCTION(caca_create_canvas) {
  293. long width, height = 0;
  294. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) {
  295. RETURN_FALSE;
  296. }
  297. RETURN_BOOL(caca_create_canvas(width, height) == 0);
  298. }
  299. PHP_FUNCTION(caca_manage_canvas) {
  300. }
  301. PHP_FUNCTION(caca_unmanage_canvas) {
  302. }
  303. PHP_FUNCTION(caca_set_canvas_size) {
  304. }
  305. PHP_FUNCTION(caca_get_canvas_width) {
  306. caca_canvas_t *canvas;
  307. FETCH_CANVAS(canvas);
  308. RETURN_LONG(caca_get_canvas_width(canvas));
  309. }
  310. PHP_FUNCTION(caca_get_canvas_height) {
  311. caca_canvas_t *canvas;
  312. FETCH_CANVAS(canvas);
  313. RETURN_LONG(caca_get_canvas_height(canvas));
  314. }
  315. PHP_FUNCTION(caca_get_canvas_chars) {
  316. caca_canvas_t *canvas;
  317. FETCH_CANVAS(canvas);
  318. RETURN_STRING(estrdup(caca_get_canvas_chars(canvas)), 0); //TODO: check that return \0 terminated string
  319. }
  320. PHP_FUNCTION(caca_get_canvas_attrs) {
  321. caca_canvas_t *canvas;
  322. FETCH_CANVAS(canvas);
  323. RETURN_STRING(estrdup(caca_get_canvas_attrs(canvas)), 0); //TODO: check that return \0 terminated string
  324. }
  325. PHP_FUNCTION(caca_rand) {
  326. long min, max = 0;
  327. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &min, &max) == FAILURE) {
  328. RETURN_FALSE;
  329. }
  330. RETURN_LONG(caca_rand(min, max));
  331. }
  332. PHP_FUNCTION(caca_get_version) {
  333. RETURN_STRING(estrdup(caca_get_version()), 0);
  334. }
  335. PHP_FUNCTION(caca_gotoxy) {
  336. zval *_zval;
  337. long x, y = 0;
  338. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &x, &y) == FAILURE) {
  339. RETURN_FALSE;
  340. }
  341. caca_canvas_t *canvas;
  342. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  343. RETURN_BOOL(caca_gotoxy(canvas, x, y) == 0);
  344. }
  345. PHP_FUNCTION(caca_get_cursor_x) {
  346. caca_canvas_t *canvas;
  347. FETCH_CANVAS(canvas);
  348. RETURN_LONG(caca_get_cursor_x(canvas));
  349. }
  350. PHP_FUNCTION(caca_get_cursor_y) {
  351. caca_canvas_t *canvas;
  352. FETCH_CANVAS(canvas);
  353. RETURN_LONG(caca_get_cursor_y(canvas));
  354. }
  355. PHP_FUNCTION(caca_put_char) {
  356. }
  357. PHP_FUNCTION(caca_get_char) {
  358. }
  359. PHP_FUNCTION(caca_put_str) {
  360. }
  361. PHP_FUNCTION(caca_printf) {
  362. }
  363. PHP_FUNCTION(caca_clear_canvas) {
  364. }
  365. PHP_FUNCTION(caca_set_canvas_handle) {
  366. }
  367. PHP_FUNCTION(caca_get_canvas_handle_x) {
  368. caca_canvas_t *canvas;
  369. FETCH_CANVAS(canvas);
  370. RETURN_LONG(caca_get_canvas_handle_x(canvas));
  371. }
  372. PHP_FUNCTION(caca_get_canvas_handle_y) {
  373. caca_canvas_t *canvas;
  374. FETCH_CANVAS(canvas);
  375. RETURN_LONG(caca_get_canvas_handle_y(canvas));
  376. }
  377. PHP_FUNCTION(caca_blit) {
  378. }
  379. PHP_FUNCTION(caca_set_canvas_boundaries) {
  380. }
  381. PHP_FUNCTION(caca_invert) {
  382. caca_canvas_t *canvas;
  383. FETCH_CANVAS(canvas);
  384. RETURN_BOOL(caca_invert(canvas) == 0);
  385. }
  386. PHP_FUNCTION(caca_flip) {
  387. caca_canvas_t *canvas;
  388. FETCH_CANVAS(canvas);
  389. RETURN_BOOL(caca_flip(canvas) == 0);
  390. }
  391. PHP_FUNCTION(caca_flop) {
  392. caca_canvas_t *canvas;
  393. FETCH_CANVAS(canvas);
  394. RETURN_BOOL(caca_flop(canvas) == 0);
  395. }
  396. PHP_FUNCTION(caca_rotate_180) {
  397. caca_canvas_t *canvas;
  398. FETCH_CANVAS(canvas);
  399. RETURN_BOOL(caca_rotate_180(canvas) == 0);
  400. }
  401. PHP_FUNCTION(caca_rotate_left) {
  402. caca_canvas_t *canvas;
  403. FETCH_CANVAS(canvas);
  404. RETURN_BOOL(caca_rotate_left(canvas) == 0);
  405. }
  406. PHP_FUNCTION(caca_rotate_right) {
  407. caca_canvas_t *canvas;
  408. FETCH_CANVAS(canvas);
  409. RETURN_BOOL(caca_rotate_right(canvas) == 0);
  410. }
  411. PHP_FUNCTION(caca_stretch_left) {
  412. caca_canvas_t *canvas;
  413. FETCH_CANVAS(canvas);
  414. RETURN_BOOL(caca_stretch_left(canvas) == 0);
  415. }
  416. PHP_FUNCTION(caca_stretch_right) {
  417. caca_canvas_t *canvas;
  418. FETCH_CANVAS(canvas);
  419. RETURN_BOOL(caca_stretch_right(canvas) == 0);
  420. }
  421. PHP_FUNCTION(caca_get_attr) {
  422. }
  423. PHP_FUNCTION(caca_set_attr) {
  424. }
  425. PHP_FUNCTION(caca_put_attr) {
  426. }
  427. PHP_FUNCTION(caca_set_color_ansi) {
  428. }
  429. PHP_FUNCTION(caca_set_color_argb) {
  430. }
  431. PHP_FUNCTION(caca_attr_to_ansi) {
  432. }
  433. PHP_FUNCTION(caca_attr_to_ansi_fg) {
  434. }
  435. PHP_FUNCTION(caca_attr_to_ansi_bg) {
  436. }
  437. PHP_FUNCTION(caca_draw_line) {
  438. }
  439. PHP_FUNCTION(caca_draw_polyline) {
  440. }
  441. PHP_FUNCTION(caca_draw_thin_line) {
  442. }
  443. PHP_FUNCTION(caca_draw_thin_polyline) {
  444. }
  445. PHP_FUNCTION(caca_draw_circle) {
  446. }
  447. PHP_FUNCTION(caca_draw_ellipse) {
  448. }
  449. PHP_FUNCTION(caca_draw_thin_ellipse) {
  450. }
  451. PHP_FUNCTION(caca_fill_ellipse) {
  452. }
  453. PHP_FUNCTION(caca_draw_box) {
  454. }
  455. PHP_FUNCTION(caca_draw_thin_box) {
  456. }
  457. PHP_FUNCTION(caca_fill_box) {
  458. }
  459. PHP_FUNCTION(caca_draw_triangle) {
  460. }
  461. PHP_FUNCTION(caca_draw_thin_triangle) {
  462. }
  463. PHP_FUNCTION(caca_fill_triangle) {
  464. }
  465. PHP_FUNCTION(caca_get_frame_count) {
  466. }
  467. PHP_FUNCTION(caca_set_frame) {
  468. }
  469. PHP_FUNCTION(caca_set_frame_name) {
  470. }
  471. PHP_FUNCTION(caca_create_frame) {
  472. }
  473. PHP_FUNCTION(caca_free_frame) {
  474. }
  475. PHP_FUNCTION(caca_set_dither_palette) {
  476. }
  477. PHP_FUNCTION(caca_set_dither_brightness) {
  478. }
  479. PHP_FUNCTION(caca_get_dither_brightness) {
  480. }
  481. PHP_FUNCTION(caca_set_dither_gamma) {
  482. }
  483. PHP_FUNCTION(caca_get_dither_gamma) {
  484. }
  485. PHP_FUNCTION(caca_set_dither_contrast) {
  486. }
  487. PHP_FUNCTION(caca_get_dither_contrast) {
  488. }
  489. PHP_FUNCTION(caca_set_dither_antialias) {
  490. }
  491. PHP_FUNCTION(caca_get_dither_antialias_list) {
  492. }
  493. PHP_FUNCTION(caca_get_dither_antialias) {
  494. }
  495. PHP_FUNCTION(caca_set_dither_color) {
  496. }
  497. PHP_FUNCTION(caca_get_dither_color_list) {
  498. }
  499. PHP_FUNCTION(caca_get_dither_color) {
  500. }
  501. PHP_FUNCTION(caca_set_dither_charset) {
  502. }
  503. PHP_FUNCTION(caca_get_dither_charset_list) {
  504. }
  505. PHP_FUNCTION(caca_get_dither_charset) {
  506. }
  507. PHP_FUNCTION(caca_set_dither_algorithm) {
  508. }
  509. PHP_FUNCTION(caca_get_dither_algorithm_list) {
  510. }
  511. PHP_FUNCTION(caca_get_dither_algorithm) {
  512. }
  513. PHP_FUNCTION(caca_dither_bitmap) {
  514. }
  515. PHP_FUNCTION(caca_get_font_list) {
  516. }
  517. PHP_FUNCTION(caca_get_font_width) {
  518. }
  519. PHP_FUNCTION(caca_get_font_height) {
  520. }
  521. PHP_FUNCTION(caca_render_canvas) {
  522. }
  523. PHP_FUNCTION(caca_canvas_set_figfont) {
  524. }
  525. PHP_FUNCTION(caca_put_figchar) {
  526. }
  527. PHP_FUNCTION(caca_flush_figlet) {
  528. }
  529. PHP_FUNCTION(caca_file_close) {
  530. }
  531. PHP_FUNCTION(caca_file_tell) {
  532. }
  533. PHP_FUNCTION(caca_file_read) {
  534. }
  535. PHP_FUNCTION(caca_file_write) {
  536. }
  537. PHP_FUNCTION(caca_file_gets) {
  538. }
  539. PHP_FUNCTION(caca_file_eof) {
  540. }
  541. PHP_FUNCTION(caca_import_memory) {
  542. }
  543. PHP_FUNCTION(caca_import_file) {
  544. }
  545. PHP_FUNCTION(caca_get_import_list) {
  546. }
  547. PHP_FUNCTION(caca_get_export_list) {
  548. }
  549. PHP_FUNCTION(caca_create_display) {
  550. }
  551. PHP_FUNCTION(caca_create_display_with_driver) {
  552. }
  553. PHP_FUNCTION(caca_get_display_driver_list) {
  554. }
  555. PHP_FUNCTION(caca_get_display_driver) {
  556. }
  557. PHP_FUNCTION(caca_set_display_driver) {
  558. }
  559. PHP_FUNCTION(caca_get_canvas) {
  560. }
  561. PHP_FUNCTION(caca_refresh_display) {
  562. }
  563. PHP_FUNCTION(caca_set_display_time) {
  564. }
  565. PHP_FUNCTION(caca_get_display_time) {
  566. caca_display_t *display;
  567. FETCH_DISPLAY(display);
  568. RETURN_LONG(caca_get_display_time(display)); //TODO: check return value
  569. }
  570. PHP_FUNCTION(caca_get_display_width) {
  571. caca_display_t *display;
  572. FETCH_DISPLAY(display);
  573. RETURN_LONG(caca_get_display_width(display));
  574. }
  575. PHP_FUNCTION(caca_get_display_height) {
  576. caca_display_t *display;
  577. FETCH_DISPLAY(display);
  578. RETURN_LONG(caca_get_display_height(display));
  579. }
  580. PHP_FUNCTION(caca_set_display_title) {
  581. zval *_zval;
  582. char *str;
  583. long str_len = 0;
  584. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &_zval, &str, &str_len) == FAILURE) {
  585. RETURN_FALSE;
  586. }
  587. caca_display_t *display;
  588. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  589. RETURN_BOOL(caca_set_display(display, str) == 0);
  590. }
  591. PHP_FUNCTION(caca_set_mouse) {
  592. zval *_zval;
  593. long value = 0;
  594. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  595. RETURN_FALSE;
  596. }
  597. caca_display_t *display;
  598. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  599. RETURN_BOOL(caca_set_display(display, value) == 0);
  600. }
  601. PHP_FUNCTION(caca_set_cursor) {
  602. zval *_zval;
  603. long value = 0;
  604. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  605. RETURN_FALSE;
  606. }
  607. caca_display_t *display;
  608. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  609. RETURN_BOOL(caca_set_cursor(display, value) == 0);
  610. }
  611. PHP_FUNCTION(caca_get_event) {
  612. }
  613. PHP_FUNCTION(caca_get_mouse_x) {
  614. caca_display_t *display;
  615. FETCH_DISPLAY(display);
  616. RETURN_LONG(caca_get_mouse_x(display));
  617. }
  618. PHP_FUNCTION(caca_get_mouse_y) {
  619. caca_display_t *display;
  620. FETCH_DISPLAY(display);
  621. RETURN_LONG(caca_get_mouse_y(display));
  622. }
  623. PHP_FUNCTION(caca_get_event_type) {
  624. }
  625. PHP_FUNCTION(caca_get_event_key_ch) {
  626. }
  627. PHP_FUNCTION(caca_get_event_mouse_button) {
  628. caca_event_t *event;
  629. FETCH_EVENT(event);
  630. RETURN_LONG(caca_get_event_mouse_button(event));
  631. }
  632. PHP_FUNCTION(caca_get_event_mouse_x) {
  633. caca_event_t *event;
  634. FETCH_EVENT(event);
  635. RETURN_LONG(caca_get_event_mouse_x(event));
  636. }
  637. PHP_FUNCTION(caca_get_event_mouse_y) {
  638. caca_event_t *event;
  639. FETCH_EVENT(event);
  640. RETURN_LONG(caca_get_event_mouse_y(event));
  641. }
  642. PHP_FUNCTION(caca_get_event_resize_width) {
  643. caca_event_t *event;
  644. FETCH_EVENT(event);
  645. RETURN_LONG(caca_get_event_resize_width(event));
  646. }
  647. PHP_FUNCTION(caca_get_event_resize_height) {
  648. caca_event_t *event;
  649. FETCH_EVENT(event);
  650. RETURN_LONG(caca_get_event_resize_height(event));
  651. }