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.
 
 
 
 
 
 

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