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.
 
 
 
 
 
 

1145 lines
35 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_event, NULL)
  19. PHP_FE(caca_create_canvas, NULL)
  20. PHP_FE(caca_manage_canvas, NULL)
  21. PHP_FE(caca_unmanage_canvas, NULL)
  22. PHP_FE(caca_set_canvas_size, NULL)
  23. PHP_FE(caca_get_canvas_width, NULL)
  24. PHP_FE(caca_get_canvas_height, NULL)
  25. PHP_FE(caca_get_canvas_chars, NULL)
  26. PHP_FE(caca_get_canvas_attrs, NULL)
  27. PHP_FE(caca_rand, NULL)
  28. PHP_FE(caca_get_version, NULL)
  29. PHP_FE(caca_gotoxy, NULL)
  30. PHP_FE(caca_get_cursor_x, NULL)
  31. PHP_FE(caca_get_cursor_y, NULL)
  32. PHP_FE(caca_put_char, NULL)
  33. PHP_FE(caca_get_char, NULL)
  34. PHP_FE(caca_put_str, 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_180, NULL)
  45. PHP_FE(caca_rotate_left, NULL)
  46. PHP_FE(caca_rotate_right, NULL)
  47. PHP_FE(caca_stretch_left, NULL)
  48. PHP_FE(caca_stretch_right, NULL)
  49. PHP_FE(caca_get_attr, NULL)
  50. PHP_FE(caca_set_attr, NULL)
  51. PHP_FE(caca_put_attr, NULL)
  52. PHP_FE(caca_set_color_ansi, NULL)
  53. PHP_FE(caca_set_color_argb, NULL)
  54. PHP_FE(caca_attr_to_ansi, NULL)
  55. PHP_FE(caca_attr_to_ansi_fg, NULL)
  56. PHP_FE(caca_attr_to_ansi_bg, NULL)
  57. PHP_FE(caca_attr_to_rgb12_fg, NULL)
  58. PHP_FE(caca_attr_to_rgb12_bg, NULL)
  59. PHP_FE(caca_attr_to_argb64, NULL)
  60. PHP_FE(caca_utf8_to_utf32, NULL)
  61. PHP_FE(caca_utf32_to_utf8, NULL)
  62. PHP_FE(caca_utf32_to_cp437, NULL)
  63. PHP_FE(caca_cp437_to_utf32, NULL)
  64. PHP_FE(caca_utf32_to_ascii, NULL)
  65. PHP_FE(caca_utf32_is_fullwidth, NULL)
  66. PHP_FE(caca_draw_line, NULL)
  67. PHP_FE(caca_draw_polyline, NULL)
  68. PHP_FE(caca_draw_thin_line, NULL)
  69. PHP_FE(caca_draw_thin_polyline, NULL)
  70. PHP_FE(caca_draw_circle, NULL)
  71. PHP_FE(caca_draw_ellipse, NULL)
  72. PHP_FE(caca_draw_thin_ellipse, NULL)
  73. PHP_FE(caca_fill_ellipse, NULL)
  74. PHP_FE(caca_draw_box, NULL)
  75. PHP_FE(caca_draw_thin_box, NULL)
  76. PHP_FE(caca_draw_cp437_box, NULL)
  77. PHP_FE(caca_fill_box, NULL)
  78. PHP_FE(caca_draw_triangle, NULL)
  79. PHP_FE(caca_draw_thin_triangle, NULL)
  80. PHP_FE(caca_fill_triangle, NULL)
  81. PHP_FE(caca_get_frame_count, NULL)
  82. PHP_FE(caca_set_frame, NULL)
  83. PHP_FE(caca_set_frame_name, NULL)
  84. PHP_FE(caca_create_frame, NULL)
  85. PHP_FE(caca_free_frame, NULL)
  86. PHP_FE(caca_set_dither_palette, NULL)
  87. PHP_FE(caca_set_dither_brightness, NULL)
  88. PHP_FE(caca_get_dither_brightness, NULL)
  89. PHP_FE(caca_set_dither_gamma, NULL)
  90. PHP_FE(caca_get_dither_gamma, NULL)
  91. PHP_FE(caca_set_dither_contrast, NULL)
  92. PHP_FE(caca_get_dither_contrast, NULL)
  93. PHP_FE(caca_set_dither_antialias, NULL)
  94. PHP_FE(caca_get_dither_antialias_list, NULL)
  95. PHP_FE(caca_get_dither_antialias, NULL)
  96. PHP_FE(caca_set_dither_color, NULL)
  97. PHP_FE(caca_get_dither_color_list, NULL)
  98. PHP_FE(caca_get_dither_color, NULL)
  99. PHP_FE(caca_set_dither_charset, NULL)
  100. PHP_FE(caca_get_dither_charset_list, NULL)
  101. PHP_FE(caca_get_dither_charset, NULL)
  102. PHP_FE(caca_set_dither_algorithm, NULL)
  103. PHP_FE(caca_get_dither_algorithm_list, NULL)
  104. PHP_FE(caca_get_dither_algorithm, NULL)
  105. PHP_FE(caca_dither_bitmap, NULL)
  106. PHP_FE(caca_get_font_list, NULL)
  107. PHP_FE(caca_get_font_width, NULL)
  108. PHP_FE(caca_get_font_height, NULL)
  109. PHP_FE(caca_render_canvas, NULL)
  110. PHP_FE(caca_canvas_set_figfont, NULL)
  111. PHP_FE(caca_put_figchar, NULL)
  112. PHP_FE(caca_flush_figlet, NULL)
  113. PHP_FE(caca_file_close, NULL)
  114. PHP_FE(caca_file_tell, NULL)
  115. PHP_FE(caca_file_read, NULL)
  116. PHP_FE(caca_file_write, NULL)
  117. PHP_FE(caca_file_gets, NULL)
  118. PHP_FE(caca_file_eof, NULL)
  119. PHP_FE(caca_import_memory, NULL)
  120. PHP_FE(caca_import_file, NULL)
  121. PHP_FE(caca_get_import_list, NULL)
  122. PHP_FE(caca_get_export_list, NULL)
  123. PHP_FE(caca_create_display, NULL)
  124. PHP_FE(caca_create_display_with_driver, NULL)
  125. PHP_FE(caca_get_display_driver_list, NULL)
  126. PHP_FE(caca_get_display_driver, NULL)
  127. PHP_FE(caca_set_display_driver, NULL)
  128. PHP_FE(caca_get_canvas, NULL)
  129. PHP_FE(caca_refresh_display, NULL)
  130. PHP_FE(caca_set_display_time, NULL)
  131. PHP_FE(caca_get_display_time, NULL)
  132. PHP_FE(caca_get_display_width, NULL)
  133. PHP_FE(caca_get_display_height, NULL)
  134. PHP_FE(caca_set_display_title, NULL)
  135. PHP_FE(caca_set_mouse, NULL)
  136. PHP_FE(caca_set_cursor, NULL)
  137. PHP_FE(caca_get_event, NULL)
  138. PHP_FE(caca_get_mouse_x, NULL)
  139. PHP_FE(caca_get_mouse_y, NULL)
  140. PHP_FE(caca_get_event_type, NULL)
  141. PHP_FE(caca_get_event_key_ch, NULL)
  142. PHP_FE(caca_get_event_mouse_button, NULL)
  143. PHP_FE(caca_get_event_mouse_x, NULL)
  144. PHP_FE(caca_get_event_mouse_y, NULL)
  145. PHP_FE(caca_get_event_resize_width, NULL)
  146. PHP_FE(caca_get_event_resize_height, NULL)
  147. {NULL, NULL, NULL}
  148. };
  149. zend_module_entry caca_module_entry = {
  150. #if ZEND_MODULE_API_NO >= 20010901
  151. STANDARD_MODULE_HEADER,
  152. #endif
  153. PHP_CACA_EXTNAME,
  154. caca_functions,
  155. PHP_MINIT(caca),
  156. NULL,
  157. NULL,
  158. NULL,
  159. PHP_MINFO(caca),
  160. #if ZEND_MODULE_API_NO >= 20010901
  161. PHP_CACA_VERSION,
  162. #endif
  163. STANDARD_MODULE_PROPERTIES
  164. };
  165. #ifdef COMPILE_DL_CACA
  166. ZEND_GET_MODULE(caca)
  167. #endif
  168. PHP_MINFO_FUNCTION(caca) {
  169. php_info_print_table_start();
  170. php_info_print_table_row(2, "Caca library version", caca_get_version());
  171. php_info_print_table_end();
  172. }
  173. //-------- Caca's ressources destructors -----------//
  174. static void php_caca_canvas_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  175. caca_free_canvas(rsrc->ptr);
  176. }
  177. static void php_caca_dither_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  178. caca_free_dither(rsrc->ptr);
  179. }
  180. static void php_caca_font_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  181. caca_free_font(rsrc->ptr);
  182. }
  183. static void php_caca_file_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  184. }
  185. static void php_caca_display_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  186. caca_free_display(rsrc->ptr);
  187. }
  188. static void php_caca_event_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  189. efree((caca_event_t *) rsrc->ptr);
  190. }
  191. //-------- Initialization ---------//
  192. PHP_MINIT_FUNCTION(caca) {
  193. le_caca_canvas = zend_register_list_destructors_ex(php_caca_canvas_dtor, NULL, PHP_CACA_CANVAS_RES_NAME, module_number);
  194. le_caca_dither = zend_register_list_destructors_ex(php_caca_dither_dtor, NULL, PHP_CACA_DITHER_RES_NAME, module_number);
  195. le_caca_font = zend_register_list_destructors_ex(php_caca_font_dtor, NULL, PHP_CACA_FONT_RES_NAME, module_number);
  196. le_caca_file = zend_register_list_destructors_ex(php_caca_file_dtor, NULL, PHP_CACA_FILE_RES_NAME, module_number);
  197. le_caca_display = zend_register_list_destructors_ex(php_caca_display_dtor, NULL, PHP_CACA_DISPLAY_RES_NAME, module_number);
  198. le_caca_event = zend_register_list_destructors_ex(php_caca_event_dtor, NULL, PHP_CACA_EVENT_RES_NAME, module_number);
  199. REGISTER_LONG_CONSTANT("CACA_BLACK", CACA_BLACK, CONST_CS | CONST_PERSISTENT);
  200. REGISTER_LONG_CONSTANT("CACA_BLUE", CACA_BLUE, CONST_CS | CONST_PERSISTENT);
  201. REGISTER_LONG_CONSTANT("CACA_GREEN", CACA_GREEN, CONST_CS | CONST_PERSISTENT);
  202. REGISTER_LONG_CONSTANT("CACA_CYAN", CACA_CYAN, CONST_CS | CONST_PERSISTENT);
  203. REGISTER_LONG_CONSTANT("CACA_RED", CACA_RED, CONST_CS | CONST_PERSISTENT);
  204. REGISTER_LONG_CONSTANT("CACA_MAGENTA", CACA_MAGENTA, CONST_CS | CONST_PERSISTENT);
  205. REGISTER_LONG_CONSTANT("CACA_BROWN", CACA_BROWN, CONST_CS | CONST_PERSISTENT);
  206. REGISTER_LONG_CONSTANT("CACA_LIGHTGRAY", CACA_LIGHTGRAY, CONST_CS | CONST_PERSISTENT);
  207. REGISTER_LONG_CONSTANT("CACA_DARKGRAY", CACA_DARKGRAY, CONST_CS | CONST_PERSISTENT);
  208. REGISTER_LONG_CONSTANT("CACA_LIGHTBLUE", CACA_LIGHTBLUE, CONST_CS | CONST_PERSISTENT);
  209. REGISTER_LONG_CONSTANT("CACA_LIGHTGREEN", CACA_LIGHTGREEN, CONST_CS | CONST_PERSISTENT);
  210. REGISTER_LONG_CONSTANT("CACA_LIGHTCYAN", CACA_LIGHTCYAN, CONST_CS | CONST_PERSISTENT);
  211. REGISTER_LONG_CONSTANT("CACA_LIGHTRED", CACA_LIGHTRED, CONST_CS | CONST_PERSISTENT);
  212. REGISTER_LONG_CONSTANT("CACA_LIGHTMAGENTA", CACA_LIGHTMAGENTA, CONST_CS | CONST_PERSISTENT);
  213. REGISTER_LONG_CONSTANT("CACA_YELLOW", CACA_YELLOW, CONST_CS | CONST_PERSISTENT);
  214. REGISTER_LONG_CONSTANT("CACA_WHITE", CACA_WHITE, CONST_CS | CONST_PERSISTENT);
  215. REGISTER_LONG_CONSTANT("CACA_DEFAULT", CACA_DEFAULT, CONST_CS | CONST_PERSISTENT);
  216. REGISTER_LONG_CONSTANT("CACA_TRANSPARENT", CACA_TRANSPARENT, CONST_CS | CONST_PERSISTENT);
  217. REGISTER_LONG_CONSTANT("CACA_BOLD", CACA_BOLD, CONST_CS | CONST_PERSISTENT);
  218. REGISTER_LONG_CONSTANT("CACA_ITALICS", CACA_ITALICS, CONST_CS | CONST_PERSISTENT);
  219. REGISTER_LONG_CONSTANT("CACA_UNDERLINE", CACA_UNDERLINE, CONST_CS | CONST_PERSISTENT);
  220. REGISTER_LONG_CONSTANT("CACA_BLINK", CACA_BLINK, CONST_CS | CONST_PERSISTENT);
  221. REGISTER_LONG_CONSTANT("CACA_EVENT_NONE", CACA_EVENT_NONE, CONST_CS | CONST_PERSISTENT);
  222. REGISTER_LONG_CONSTANT("CACA_EVENT_KEY_PRESS", CACA_EVENT_KEY_PRESS, CONST_CS | CONST_PERSISTENT);
  223. REGISTER_LONG_CONSTANT("CACA_EVENT_KEY_RELEASE", CACA_EVENT_KEY_RELEASE, CONST_CS | CONST_PERSISTENT);
  224. REGISTER_LONG_CONSTANT("CACA_EVENT_MOUSE_PRESS", CACA_EVENT_MOUSE_PRESS, CONST_CS | CONST_PERSISTENT);
  225. REGISTER_LONG_CONSTANT("CACA_EVENT_MOUSE_RELEASE", CACA_EVENT_MOUSE_RELEASE, CONST_CS | CONST_PERSISTENT);
  226. REGISTER_LONG_CONSTANT("CACA_EVENT_MOUSE_MOTION", CACA_EVENT_MOUSE_MOTION, CONST_CS | CONST_PERSISTENT);
  227. REGISTER_LONG_CONSTANT("CACA_EVENT_RESIZE", CACA_EVENT_RESIZE, CONST_CS | CONST_PERSISTENT);
  228. REGISTER_LONG_CONSTANT("CACA_EVENT_QUIT", CACA_EVENT_QUIT, CONST_CS | CONST_PERSISTENT);
  229. REGISTER_LONG_CONSTANT("CACA_EVENT_ANY", CACA_EVENT_ANY, CONST_CS | CONST_PERSISTENT);
  230. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_A", CACA_KEY_CTRL_A, CONST_CS | CONST_PERSISTENT);
  231. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_B", CACA_KEY_CTRL_B, CONST_CS | CONST_PERSISTENT);
  232. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_C", CACA_KEY_CTRL_C, CONST_CS | CONST_PERSISTENT);
  233. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_D", CACA_KEY_CTRL_D, CONST_CS | CONST_PERSISTENT);
  234. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_E", CACA_KEY_CTRL_E, CONST_CS | CONST_PERSISTENT);
  235. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_F", CACA_KEY_CTRL_F, CONST_CS | CONST_PERSISTENT);
  236. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_G", CACA_KEY_CTRL_G, CONST_CS | CONST_PERSISTENT);
  237. REGISTER_LONG_CONSTANT("CACA_KEY_BACKSPACE", CACA_KEY_BACKSPACE, CONST_CS | CONST_PERSISTENT);
  238. REGISTER_LONG_CONSTANT("CACA_KEY_TAB", CACA_KEY_TAB, CONST_CS | CONST_PERSISTENT);
  239. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_J", CACA_KEY_CTRL_J, CONST_CS | CONST_PERSISTENT);
  240. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_K", CACA_KEY_CTRL_K, CONST_CS | CONST_PERSISTENT);
  241. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_L", CACA_KEY_CTRL_L, CONST_CS | CONST_PERSISTENT);
  242. REGISTER_LONG_CONSTANT("CACA_KEY_RETURN", CACA_KEY_RETURN, CONST_CS | CONST_PERSISTENT);
  243. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_N", CACA_KEY_CTRL_N, CONST_CS | CONST_PERSISTENT);
  244. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_O", CACA_KEY_CTRL_O, CONST_CS | CONST_PERSISTENT);
  245. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_P", CACA_KEY_CTRL_P, CONST_CS | CONST_PERSISTENT);
  246. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_Q", CACA_KEY_CTRL_Q, CONST_CS | CONST_PERSISTENT);
  247. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_R", CACA_KEY_CTRL_R, CONST_CS | CONST_PERSISTENT);
  248. REGISTER_LONG_CONSTANT("CACA_KEY_PAUSE", CACA_KEY_PAUSE, CONST_CS | CONST_PERSISTENT);
  249. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_T", CACA_KEY_CTRL_T, CONST_CS | CONST_PERSISTENT);
  250. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_U", CACA_KEY_CTRL_U, CONST_CS | CONST_PERSISTENT);
  251. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_V", CACA_KEY_CTRL_V, CONST_CS | CONST_PERSISTENT);
  252. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_W", CACA_KEY_CTRL_W, CONST_CS | CONST_PERSISTENT);
  253. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_X", CACA_KEY_CTRL_X, CONST_CS | CONST_PERSISTENT);
  254. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_Y", CACA_KEY_CTRL_Y, CONST_CS | CONST_PERSISTENT);
  255. REGISTER_LONG_CONSTANT("CACA_KEY_CTRL_Z", CACA_KEY_CTRL_Z, CONST_CS | CONST_PERSISTENT);
  256. REGISTER_LONG_CONSTANT("CACA_KEY_ESCAPE", CACA_KEY_ESCAPE, CONST_CS | CONST_PERSISTENT);
  257. REGISTER_LONG_CONSTANT("CACA_KEY_DELETE", CACA_KEY_DELETE, CONST_CS | CONST_PERSISTENT);
  258. REGISTER_LONG_CONSTANT("CACA_KEY_UP", CACA_KEY_UP, CONST_CS | CONST_PERSISTENT);
  259. REGISTER_LONG_CONSTANT("CACA_KEY_DOWN", CACA_KEY_DOWN, CONST_CS | CONST_PERSISTENT);
  260. REGISTER_LONG_CONSTANT("CACA_KEY_LEFT", CACA_KEY_LEFT, CONST_CS | CONST_PERSISTENT);
  261. REGISTER_LONG_CONSTANT("CACA_KEY_RIGHT", CACA_KEY_RIGHT, CONST_CS | CONST_PERSISTENT);
  262. REGISTER_LONG_CONSTANT("CACA_KEY_INSERT", CACA_KEY_INSERT, CONST_CS | CONST_PERSISTENT);
  263. REGISTER_LONG_CONSTANT("CACA_KEY_HOME", CACA_KEY_HOME, CONST_CS | CONST_PERSISTENT);
  264. REGISTER_LONG_CONSTANT("CACA_KEY_END", CACA_KEY_END, CONST_CS | CONST_PERSISTENT);
  265. REGISTER_LONG_CONSTANT("CACA_KEY_PAGEUP", CACA_KEY_PAGEUP, CONST_CS | CONST_PERSISTENT);
  266. REGISTER_LONG_CONSTANT("CACA_KEY_PAGEDOWN", CACA_KEY_PAGEDOWN, CONST_CS | CONST_PERSISTENT);
  267. REGISTER_LONG_CONSTANT("CACA_KEY_F1", CACA_KEY_F1, CONST_CS | CONST_PERSISTENT);
  268. REGISTER_LONG_CONSTANT("CACA_KEY_F2", CACA_KEY_F2, CONST_CS | CONST_PERSISTENT);
  269. REGISTER_LONG_CONSTANT("CACA_KEY_F3", CACA_KEY_F3, CONST_CS | CONST_PERSISTENT);
  270. REGISTER_LONG_CONSTANT("CACA_KEY_F4", CACA_KEY_F4, CONST_CS | CONST_PERSISTENT);
  271. REGISTER_LONG_CONSTANT("CACA_KEY_F5", CACA_KEY_F5, CONST_CS | CONST_PERSISTENT);
  272. REGISTER_LONG_CONSTANT("CACA_KEY_F6", CACA_KEY_F6, CONST_CS | CONST_PERSISTENT);
  273. REGISTER_LONG_CONSTANT("CACA_KEY_F7", CACA_KEY_F7, CONST_CS | CONST_PERSISTENT);
  274. REGISTER_LONG_CONSTANT("CACA_KEY_F8", CACA_KEY_F8, CONST_CS | CONST_PERSISTENT);
  275. REGISTER_LONG_CONSTANT("CACA_KEY_F9", CACA_KEY_F9, CONST_CS | CONST_PERSISTENT);
  276. REGISTER_LONG_CONSTANT("CACA_KEY_F10", CACA_KEY_F10, CONST_CS | CONST_PERSISTENT);
  277. REGISTER_LONG_CONSTANT("CACA_KEY_F11", CACA_KEY_F11, CONST_CS | CONST_PERSISTENT);
  278. REGISTER_LONG_CONSTANT("CACA_KEY_F12", CACA_KEY_F12, CONST_CS | CONST_PERSISTENT);
  279. REGISTER_LONG_CONSTANT("CACA_KEY_F13", CACA_KEY_F13, CONST_CS | CONST_PERSISTENT);
  280. REGISTER_LONG_CONSTANT("CACA_KEY_F14", CACA_KEY_F14, CONST_CS | CONST_PERSISTENT);
  281. REGISTER_LONG_CONSTANT("CACA_KEY_F15", CACA_KEY_F15, CONST_CS | CONST_PERSISTENT);
  282. return SUCCESS;
  283. }
  284. //---------- Some usefull macros ---------------//
  285. #define FETCH_CANVAS(canvas) \
  286. zval *_zval; \
  287. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  288. RETURN_FALSE; \
  289. } \
  290. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  291. #define FETCH_DISPLAY(display) \
  292. zval *_zval; \
  293. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  294. RETURN_FALSE; \
  295. } \
  296. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  297. #define FETCH_EVENT(event) \
  298. zval *_zval; \
  299. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  300. RETURN_FALSE; \
  301. } \
  302. ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event);
  303. #define RETURN_CHAR(c) \
  304. char *str = emalloc(2); \
  305. str[0] = c; \
  306. str[1] = '\0'; \
  307. RETURN_STRING(str, 0);
  308. #define RETURN_SUCCESS(i) \
  309. RETURN_BOOL((i) == 0);
  310. //------- PHP Binding's specific functions ----------//
  311. PHP_FUNCTION(caca_create_event) {
  312. caca_event_t *event;
  313. event = emalloc(sizeof(caca_event_t));
  314. ZEND_REGISTER_RESOURCE(return_value, event, le_caca_event);
  315. }
  316. //------- Caca's functions ----------------//
  317. PHP_FUNCTION(caca_create_canvas) {
  318. long width, height = 0;
  319. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) {
  320. RETURN_FALSE;
  321. }
  322. caca_canvas_t *canvas = caca_create_canvas(width, height);
  323. if (!canvas) {
  324. RETURN_FALSE;
  325. }
  326. ZEND_REGISTER_RESOURCE(return_value, canvas, le_caca_canvas);
  327. }
  328. PHP_FUNCTION(caca_manage_canvas) {
  329. }
  330. PHP_FUNCTION(caca_unmanage_canvas) {
  331. }
  332. PHP_FUNCTION(caca_set_canvas_size) {
  333. zval *_zval;
  334. long width, height = 0;
  335. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &width, &height) == FAILURE) {
  336. RETURN_FALSE;
  337. }
  338. caca_canvas_t *canvas;
  339. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  340. RETURN_SUCCESS(caca_set_canvas_size(canvas, width, height));
  341. }
  342. PHP_FUNCTION(caca_get_canvas_width) {
  343. caca_canvas_t *canvas;
  344. FETCH_CANVAS(canvas);
  345. RETURN_LONG(caca_get_canvas_width(canvas));
  346. }
  347. PHP_FUNCTION(caca_get_canvas_height) {
  348. caca_canvas_t *canvas;
  349. FETCH_CANVAS(canvas);
  350. RETURN_LONG(caca_get_canvas_height(canvas));
  351. }
  352. PHP_FUNCTION(caca_get_canvas_chars) {
  353. caca_canvas_t *canvas;
  354. FETCH_CANVAS(canvas);
  355. RETURN_STRING(estrdup(caca_get_canvas_chars(canvas)), 0); //TODO: check that return \0 terminated string
  356. }
  357. PHP_FUNCTION(caca_get_canvas_attrs) {
  358. caca_canvas_t *canvas;
  359. FETCH_CANVAS(canvas);
  360. RETURN_STRING(estrdup(caca_get_canvas_attrs(canvas)), 0); //TODO: check that return \0 terminated string
  361. }
  362. PHP_FUNCTION(caca_rand) {
  363. long min, max = 0;
  364. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &min, &max) == FAILURE) {
  365. RETURN_FALSE;
  366. }
  367. RETURN_LONG(caca_rand(min, max));
  368. }
  369. PHP_FUNCTION(caca_get_version) {
  370. RETURN_STRING(estrdup(caca_get_version()), 0);
  371. }
  372. PHP_FUNCTION(caca_gotoxy) {
  373. zval *_zval;
  374. long x, y = 0;
  375. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &x, &y) == FAILURE) {
  376. RETURN_FALSE;
  377. }
  378. caca_canvas_t *canvas;
  379. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  380. RETURN_SUCCESS(caca_gotoxy(canvas, x, y));
  381. }
  382. PHP_FUNCTION(caca_get_cursor_x) {
  383. caca_canvas_t *canvas;
  384. FETCH_CANVAS(canvas);
  385. RETURN_LONG(caca_get_cursor_x(canvas));
  386. }
  387. PHP_FUNCTION(caca_get_cursor_y) {
  388. caca_canvas_t *canvas;
  389. FETCH_CANVAS(canvas);
  390. RETURN_LONG(caca_get_cursor_y(canvas));
  391. }
  392. PHP_FUNCTION(caca_put_char) {
  393. zval *_zval;
  394. char *str;
  395. long str_len, x, y = 0;
  396. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlls", &_zval, &x, &y, &str, &str_len) == FAILURE) {
  397. RETURN_FALSE;
  398. }
  399. caca_canvas_t *canvas;
  400. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  401. if (str_len != 1) {
  402. RETURN_FALSE;
  403. }
  404. RETURN_SUCCESS(caca_put_char(canvas, x, y, str[0]));
  405. }
  406. PHP_FUNCTION(caca_get_char) {
  407. zval *_zval;
  408. long x, y = 0;
  409. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &x, &y) == FAILURE) {
  410. RETURN_FALSE;
  411. }
  412. caca_canvas_t *canvas;
  413. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  414. RETURN_CHAR(caca_get_char(canvas, x, y));
  415. }
  416. PHP_FUNCTION(caca_put_str) {
  417. zval *_zval;
  418. char *str;
  419. long x, y, str_len = 0;
  420. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlls", &_zval, &x, &y, &str, &str_len) == FAILURE) {
  421. RETURN_FALSE;
  422. }
  423. caca_canvas_t *canvas;
  424. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  425. RETURN_SUCCESS(caca_put_str(canvas, x, y, str));
  426. }
  427. PHP_FUNCTION(caca_clear_canvas) {
  428. caca_canvas_t *canvas;
  429. FETCH_CANVAS(canvas);
  430. RETURN_LONG(caca_clear_canvas(canvas));
  431. }
  432. PHP_FUNCTION(caca_set_canvas_handle) {
  433. zval *_zval;
  434. long x, y = 0;
  435. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &x, &y) == FAILURE) {
  436. RETURN_FALSE;
  437. }
  438. caca_canvas_t *canvas;
  439. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  440. RETURN_SUCCESS(caca_set_canvas_handle(canvas, x, y));
  441. }
  442. PHP_FUNCTION(caca_get_canvas_handle_x) {
  443. caca_canvas_t *canvas;
  444. FETCH_CANVAS(canvas);
  445. RETURN_LONG(caca_get_canvas_handle_x(canvas));
  446. }
  447. PHP_FUNCTION(caca_get_canvas_handle_y) {
  448. caca_canvas_t *canvas;
  449. FETCH_CANVAS(canvas);
  450. RETURN_LONG(caca_get_canvas_handle_y(canvas));
  451. }
  452. PHP_FUNCTION(caca_blit) {
  453. zval *_zval1, *_zval2, *_zval3 = NULL;
  454. long x, y = 0;
  455. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllr|r", &_zval1, &x, &y, &_zval2, &_zval3) == FAILURE) {
  456. RETURN_FALSE;
  457. }
  458. caca_canvas_t *dst, *src, *mask = NULL;
  459. ZEND_FETCH_RESOURCE(dst, caca_canvas_t*, &_zval1, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  460. ZEND_FETCH_RESOURCE(src, caca_canvas_t*, &_zval2, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  461. if (_zval3) {
  462. ZEND_FETCH_RESOURCE(mask, caca_canvas_t*, &_zval3, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  463. }
  464. RETURN_SUCCESS(caca_blit(dst, x, y, src, NULL));
  465. }
  466. PHP_FUNCTION(caca_set_canvas_boundaries) {
  467. zval *_zval;
  468. long x, y, width, height = 0;
  469. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &x, &y, &width, &height) == FAILURE) {
  470. RETURN_FALSE;
  471. }
  472. caca_canvas_t *canvas;
  473. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  474. RETURN_SUCCESS(caca_set_canvas_boundaries(canvas, x, y, width, height));
  475. }
  476. PHP_FUNCTION(caca_invert) {
  477. caca_canvas_t *canvas;
  478. FETCH_CANVAS(canvas);
  479. RETURN_SUCCESS(caca_invert(canvas));
  480. }
  481. PHP_FUNCTION(caca_flip) {
  482. caca_canvas_t *canvas;
  483. FETCH_CANVAS(canvas);
  484. RETURN_SUCCESS(caca_flip(canvas));
  485. }
  486. PHP_FUNCTION(caca_flop) {
  487. caca_canvas_t *canvas;
  488. FETCH_CANVAS(canvas);
  489. RETURN_SUCCESS(caca_flop(canvas));
  490. }
  491. PHP_FUNCTION(caca_rotate_180) {
  492. caca_canvas_t *canvas;
  493. FETCH_CANVAS(canvas);
  494. RETURN_SUCCESS(caca_rotate_180(canvas));
  495. }
  496. PHP_FUNCTION(caca_rotate_left) {
  497. caca_canvas_t *canvas;
  498. FETCH_CANVAS(canvas);
  499. RETURN_SUCCESS(caca_rotate_left(canvas));
  500. }
  501. PHP_FUNCTION(caca_rotate_right) {
  502. caca_canvas_t *canvas;
  503. FETCH_CANVAS(canvas);
  504. RETURN_SUCCESS(caca_rotate_right(canvas));
  505. }
  506. PHP_FUNCTION(caca_stretch_left) {
  507. caca_canvas_t *canvas;
  508. FETCH_CANVAS(canvas);
  509. RETURN_SUCCESS(caca_stretch_left(canvas));
  510. }
  511. PHP_FUNCTION(caca_stretch_right) {
  512. caca_canvas_t *canvas;
  513. FETCH_CANVAS(canvas);
  514. RETURN_SUCCESS(caca_stretch_right(canvas));
  515. }
  516. PHP_FUNCTION(caca_get_attr) {
  517. zval *_zval;
  518. long x, y = 0;
  519. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &x, &y) == FAILURE) {
  520. RETURN_FALSE;
  521. }
  522. caca_canvas_t *canvas;
  523. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  524. RETURN_LONG(caca_get_attr(canvas, x, y));
  525. }
  526. PHP_FUNCTION(caca_set_attr) {
  527. }
  528. PHP_FUNCTION(caca_put_attr) {
  529. zval *_zval;
  530. long x, y, attr = 0;
  531. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlll", &_zval, &x, &y, &attr) == FAILURE) {
  532. RETURN_FALSE;
  533. }
  534. caca_canvas_t *canvas;
  535. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  536. RETURN_SUCCESS(caca_put_attr(canvas, x, y, attr));
  537. }
  538. PHP_FUNCTION(caca_set_color_ansi) {
  539. zval *_zval;
  540. long foreground, background = 0;
  541. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &foreground, &background) == FAILURE) {
  542. RETURN_FALSE;
  543. }
  544. caca_canvas_t *canvas;
  545. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  546. RETURN_SUCCESS(caca_set_color_ansi(canvas, foreground, background));
  547. }
  548. PHP_FUNCTION(caca_set_color_argb) {
  549. }
  550. PHP_FUNCTION(caca_attr_to_ansi) {
  551. }
  552. PHP_FUNCTION(caca_attr_to_ansi_fg) {
  553. }
  554. PHP_FUNCTION(caca_attr_to_ansi_bg) {
  555. }
  556. PHP_FUNCTION(caca_attr_to_rgb12_fg) {
  557. }
  558. PHP_FUNCTION(caca_attr_to_rgb12_bg) {
  559. }
  560. PHP_FUNCTION(caca_attr_to_argb64) {
  561. }
  562. PHP_FUNCTION(caca_utf8_to_utf32) {
  563. }
  564. PHP_FUNCTION(caca_utf32_to_utf8) {
  565. }
  566. PHP_FUNCTION(caca_utf32_to_cp437) {
  567. }
  568. PHP_FUNCTION(caca_cp437_to_utf32) {
  569. }
  570. PHP_FUNCTION(caca_utf32_to_ascii) {
  571. }
  572. PHP_FUNCTION(caca_utf32_is_fullwidth) {
  573. }
  574. PHP_FUNCTION(caca_draw_line) {
  575. zval *_zval;
  576. char *str;
  577. long str_len, xa, ya, xb, yb = 0;
  578. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
  579. RETURN_FALSE;
  580. }
  581. caca_canvas_t *canvas;
  582. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  583. if (str_len != 1) {
  584. RETURN_FALSE;
  585. }
  586. RETURN_SUCCESS(caca_draw_line(canvas, xa, ya, xb, yb, str[0]));
  587. }
  588. PHP_FUNCTION(caca_draw_polyline) {
  589. }
  590. PHP_FUNCTION(caca_draw_thin_line) {
  591. zval *_zval;
  592. long xa, ya, xb, yb = 0;
  593. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &xa, &ya, &xb, &yb) == FAILURE) {
  594. RETURN_FALSE;
  595. }
  596. caca_canvas_t *canvas;
  597. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  598. RETURN_SUCCESS(caca_draw_thin_line(canvas, xa, ya, xb, yb));
  599. }
  600. PHP_FUNCTION(caca_draw_thin_polyline) {
  601. }
  602. PHP_FUNCTION(caca_draw_circle) {
  603. zval *_zval;
  604. char *str;
  605. long str_len, x, y, r = 0;
  606. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllls", &_zval, &x, &y, &r, &str, &str_len) == FAILURE) {
  607. RETURN_FALSE;
  608. }
  609. caca_canvas_t *canvas;
  610. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  611. if (str_len != 1) {
  612. RETURN_FALSE;
  613. }
  614. RETURN_SUCCESS(caca_draw_circle(canvas, x, y, r, str[0]));
  615. }
  616. PHP_FUNCTION(caca_draw_ellipse) {
  617. zval *_zval;
  618. char *str;
  619. long str_len, xa, ya, xb, yb = 0;
  620. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
  621. RETURN_FALSE;
  622. }
  623. caca_canvas_t *canvas;
  624. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  625. if (str_len != 1) {
  626. RETURN_FALSE;
  627. }
  628. RETURN_SUCCESS(caca_draw_ellipse(canvas, xa, ya, xb, yb, str[0]));
  629. }
  630. PHP_FUNCTION(caca_draw_thin_ellipse) {
  631. zval *_zval;
  632. long xa, ya, xb, yb = 0;
  633. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &xa, &ya, &xb, &yb) == FAILURE) {
  634. RETURN_FALSE;
  635. }
  636. caca_canvas_t *canvas;
  637. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  638. RETURN_SUCCESS(caca_draw_thin_ellipse(canvas, xa, ya, xb, yb));
  639. }
  640. PHP_FUNCTION(caca_fill_ellipse) {
  641. zval *_zval;
  642. char *str;
  643. long str_len, xa, ya, xb, yb = 0;
  644. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
  645. RETURN_FALSE;
  646. }
  647. caca_canvas_t *canvas;
  648. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  649. if (str_len != 1) {
  650. RETURN_FALSE;
  651. }
  652. RETURN_SUCCESS(caca_fill_ellipse(canvas, xa, ya, xb, yb, str[0]));
  653. }
  654. PHP_FUNCTION(caca_draw_box) {
  655. zval *_zval;
  656. char *str;
  657. long str_len, xa, ya, xb, yb = 0;
  658. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
  659. RETURN_FALSE;
  660. }
  661. caca_canvas_t *canvas;
  662. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  663. if (str_len != 1) {
  664. RETURN_FALSE;
  665. }
  666. RETURN_SUCCESS(caca_draw_box(canvas, xa, ya, xb, yb, str[0]));
  667. }
  668. PHP_FUNCTION(caca_draw_thin_box) {
  669. zval *_zval;
  670. long xa, ya, xb, yb = 0;
  671. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &xa, &ya, &xb, &yb) == FAILURE) {
  672. RETURN_FALSE;
  673. }
  674. caca_canvas_t *canvas;
  675. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  676. RETURN_SUCCESS(caca_draw_thin_box(canvas, xa, ya, xb, yb));
  677. }
  678. PHP_FUNCTION(caca_draw_cp437_box) {
  679. zval *_zval;
  680. long xa, ya, xb, yb = 0;
  681. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &xa, &ya, &xb, &yb) == FAILURE) {
  682. RETURN_FALSE;
  683. }
  684. caca_canvas_t *canvas;
  685. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  686. RETURN_SUCCESS(caca_draw_cp437_box(canvas, xa, ya, xb, yb));
  687. }
  688. PHP_FUNCTION(caca_fill_box) {
  689. zval *_zval;
  690. char *str;
  691. long str_len, xa, ya, xb, yb = 0;
  692. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
  693. RETURN_FALSE;
  694. }
  695. caca_canvas_t *canvas;
  696. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  697. if (str_len != 1) {
  698. RETURN_FALSE;
  699. }
  700. RETURN_SUCCESS(caca_fill_box(canvas, xa, ya, xb, yb, str[0]));
  701. }
  702. PHP_FUNCTION(caca_draw_triangle) {
  703. zval *_zval;
  704. char *str;
  705. long str_len, xa, ya, xb, yb, xc, yc = 0;
  706. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllllls", &_zval, &xa, &ya, &xb, &yb, &xc, &yc, &str, &str_len) == FAILURE) {
  707. RETURN_FALSE;
  708. }
  709. caca_canvas_t *canvas;
  710. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  711. if (str_len != 1) {
  712. RETURN_FALSE;
  713. }
  714. RETURN_SUCCESS(caca_draw_triangle(canvas, xa, ya, xb, yb, xc, yc, str[0]));
  715. }
  716. PHP_FUNCTION(caca_draw_thin_triangle) {
  717. zval *_zval;
  718. long xa, ya, xb, yb, xc, yc = 0;
  719. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllllll", &_zval, &xa, &ya, &xb, &yb, &xc, &yc) == FAILURE) {
  720. RETURN_FALSE;
  721. }
  722. caca_canvas_t *canvas;
  723. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  724. RETURN_SUCCESS(caca_draw_thin_triangle(canvas, xa, ya, xb, yb, xc, yc));
  725. }
  726. PHP_FUNCTION(caca_fill_triangle) {
  727. zval *_zval;
  728. char *str;
  729. long str_len, xa, ya, xb, yb, xc, yc = 0;
  730. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllllls", &_zval, &xa, &ya, &xb, &yb, &xc, &yc, &str, &str_len) == FAILURE) {
  731. RETURN_FALSE;
  732. }
  733. caca_canvas_t *canvas;
  734. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  735. if (str_len != 1) {
  736. RETURN_FALSE;
  737. }
  738. RETURN_SUCCESS(caca_fill_triangle(canvas, xa, ya, xb, yb, xc, yc, str[0]));
  739. }
  740. PHP_FUNCTION(caca_get_frame_count) {
  741. }
  742. PHP_FUNCTION(caca_set_frame) {
  743. }
  744. PHP_FUNCTION(caca_set_frame_name) {
  745. }
  746. PHP_FUNCTION(caca_create_frame) {
  747. }
  748. PHP_FUNCTION(caca_free_frame) {
  749. }
  750. PHP_FUNCTION(caca_set_dither_palette) {
  751. }
  752. PHP_FUNCTION(caca_set_dither_brightness) {
  753. }
  754. PHP_FUNCTION(caca_get_dither_brightness) {
  755. }
  756. PHP_FUNCTION(caca_set_dither_gamma) {
  757. }
  758. PHP_FUNCTION(caca_get_dither_gamma) {
  759. }
  760. PHP_FUNCTION(caca_set_dither_contrast) {
  761. }
  762. PHP_FUNCTION(caca_get_dither_contrast) {
  763. }
  764. PHP_FUNCTION(caca_set_dither_antialias) {
  765. }
  766. PHP_FUNCTION(caca_get_dither_antialias_list) {
  767. }
  768. PHP_FUNCTION(caca_get_dither_antialias) {
  769. }
  770. PHP_FUNCTION(caca_set_dither_color) {
  771. }
  772. PHP_FUNCTION(caca_get_dither_color_list) {
  773. }
  774. PHP_FUNCTION(caca_get_dither_color) {
  775. }
  776. PHP_FUNCTION(caca_set_dither_charset) {
  777. }
  778. PHP_FUNCTION(caca_get_dither_charset_list) {
  779. }
  780. PHP_FUNCTION(caca_get_dither_charset) {
  781. }
  782. PHP_FUNCTION(caca_set_dither_algorithm) {
  783. }
  784. PHP_FUNCTION(caca_get_dither_algorithm_list) {
  785. }
  786. PHP_FUNCTION(caca_get_dither_algorithm) {
  787. }
  788. PHP_FUNCTION(caca_dither_bitmap) {
  789. }
  790. PHP_FUNCTION(caca_get_font_list) {
  791. }
  792. PHP_FUNCTION(caca_get_font_width) {
  793. }
  794. PHP_FUNCTION(caca_get_font_height) {
  795. }
  796. PHP_FUNCTION(caca_render_canvas) {
  797. }
  798. PHP_FUNCTION(caca_canvas_set_figfont) {
  799. }
  800. PHP_FUNCTION(caca_put_figchar) {
  801. }
  802. PHP_FUNCTION(caca_flush_figlet) {
  803. }
  804. PHP_FUNCTION(caca_file_close) {
  805. }
  806. PHP_FUNCTION(caca_file_tell) {
  807. }
  808. PHP_FUNCTION(caca_file_read) {
  809. }
  810. PHP_FUNCTION(caca_file_write) {
  811. }
  812. PHP_FUNCTION(caca_file_gets) {
  813. }
  814. PHP_FUNCTION(caca_file_eof) {
  815. }
  816. PHP_FUNCTION(caca_import_memory) {
  817. zval *_zval;
  818. char *src, *type;
  819. long src_len, type_len = 0;
  820. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &_zval, &src, &src_len, &type, &type_len) == FAILURE) {
  821. RETURN_FALSE;
  822. }
  823. caca_canvas_t *canvas;
  824. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  825. RETURN_LONG(caca_import_memory(canvas, src, src_len, type));
  826. }
  827. PHP_FUNCTION(caca_import_file) {
  828. }
  829. PHP_FUNCTION(caca_get_import_list) {
  830. }
  831. PHP_FUNCTION(caca_get_export_list) {
  832. }
  833. PHP_FUNCTION(caca_create_display) {
  834. caca_canvas_t *canvas;
  835. FETCH_CANVAS(canvas);
  836. caca_display_t *display = caca_create_display(canvas);
  837. ZEND_REGISTER_RESOURCE(return_value, display, le_caca_display);
  838. }
  839. PHP_FUNCTION(caca_create_display_with_driver) {
  840. zval *_zval;
  841. char *str;
  842. long str_len = 0;
  843. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &_zval, &str, &str_len) == FAILURE) {
  844. RETURN_FALSE;
  845. }
  846. caca_canvas_t *canvas;
  847. ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
  848. caca_display_t *display = caca_create_display_with_driver(canvas, str);
  849. if (!display) {
  850. RETURN_FALSE;
  851. }
  852. ZEND_REGISTER_RESOURCE(return_value, display, le_caca_display);
  853. }
  854. PHP_FUNCTION(caca_get_display_driver_list) {
  855. }
  856. PHP_FUNCTION(caca_get_display_driver) {
  857. }
  858. PHP_FUNCTION(caca_set_display_driver) {
  859. }
  860. PHP_FUNCTION(caca_get_canvas) {
  861. }
  862. PHP_FUNCTION(caca_refresh_display) {
  863. caca_display_t *display;
  864. FETCH_DISPLAY(display);
  865. RETURN_SUCCESS(caca_refresh_display(display));
  866. }
  867. PHP_FUNCTION(caca_set_display_time) {
  868. zval *_zval;
  869. long value = 0;
  870. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  871. RETURN_FALSE;
  872. }
  873. caca_display_t *display;
  874. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  875. RETURN_SUCCESS(caca_set_display_time(display, value));
  876. }
  877. PHP_FUNCTION(caca_get_display_time) {
  878. caca_display_t *display;
  879. FETCH_DISPLAY(display);
  880. RETURN_LONG(caca_get_display_time(display)); //TODO: check return value
  881. }
  882. PHP_FUNCTION(caca_get_display_width) {
  883. caca_display_t *display;
  884. FETCH_DISPLAY(display);
  885. RETURN_LONG(caca_get_display_width(display));
  886. }
  887. PHP_FUNCTION(caca_get_display_height) {
  888. caca_display_t *display;
  889. FETCH_DISPLAY(display);
  890. RETURN_LONG(caca_get_display_height(display));
  891. }
  892. PHP_FUNCTION(caca_set_display_title) {
  893. zval *_zval;
  894. char *str;
  895. long str_len = 0;
  896. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &_zval, &str, &str_len) == FAILURE) {
  897. RETURN_FALSE;
  898. }
  899. caca_display_t *display;
  900. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  901. RETURN_SUCCESS(caca_set_display(display, str));
  902. }
  903. PHP_FUNCTION(caca_set_mouse) {
  904. zval *_zval;
  905. long value = 0;
  906. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  907. RETURN_FALSE;
  908. }
  909. caca_display_t *display;
  910. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  911. RETURN_SUCCESS(caca_set_mouse(display, value));
  912. }
  913. PHP_FUNCTION(caca_set_cursor) {
  914. zval *_zval;
  915. long value = 0;
  916. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  917. RETURN_FALSE;
  918. }
  919. caca_display_t *display;
  920. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  921. RETURN_SUCCESS(caca_set_cursor(display, value));
  922. }
  923. PHP_FUNCTION(caca_get_event) {
  924. zval *_zval1, *_zval2 = NULL;
  925. long g, aa = 0;
  926. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|rl", &_zval1, &g, &_zval2, &aa) == FAILURE) {
  927. RETURN_FALSE;
  928. }
  929. caca_display_t *display;
  930. ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval1, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
  931. caca_event_t *event = NULL;
  932. if (_zval2) {
  933. ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval2, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event);
  934. }
  935. RETURN_LONG(caca_get_event(display, g, event, aa));
  936. }
  937. PHP_FUNCTION(caca_get_mouse_x) {
  938. caca_display_t *display;
  939. FETCH_DISPLAY(display);
  940. RETURN_LONG(caca_get_mouse_x(display));
  941. }
  942. PHP_FUNCTION(caca_get_mouse_y) {
  943. caca_display_t *display;
  944. FETCH_DISPLAY(display);
  945. RETURN_LONG(caca_get_mouse_y(display));
  946. }
  947. PHP_FUNCTION(caca_get_event_type) {
  948. caca_event_t *event;
  949. FETCH_EVENT(event);
  950. RETURN_LONG(caca_get_event_type(event));
  951. }
  952. PHP_FUNCTION(caca_get_event_key_ch) {
  953. caca_event_t *event;
  954. FETCH_EVENT(event);
  955. RETURN_LONG(caca_get_event_key_ch(event));
  956. }
  957. PHP_FUNCTION(caca_get_event_mouse_button) {
  958. caca_event_t *event;
  959. FETCH_EVENT(event);
  960. RETURN_LONG(caca_get_event_mouse_button(event));
  961. }
  962. PHP_FUNCTION(caca_get_event_mouse_x) {
  963. caca_event_t *event;
  964. FETCH_EVENT(event);
  965. RETURN_LONG(caca_get_event_mouse_x(event));
  966. }
  967. PHP_FUNCTION(caca_get_event_mouse_y) {
  968. caca_event_t *event;
  969. FETCH_EVENT(event);
  970. RETURN_LONG(caca_get_event_mouse_y(event));
  971. }
  972. PHP_FUNCTION(caca_get_event_resize_width) {
  973. caca_event_t *event;
  974. FETCH_EVENT(event);
  975. RETURN_LONG(caca_get_event_resize_width(event));
  976. }
  977. PHP_FUNCTION(caca_get_event_resize_height) {
  978. caca_event_t *event;
  979. FETCH_EVENT(event);
  980. RETURN_LONG(caca_get_event_resize_height(event));
  981. }