diff --git a/caca-php/php_caca.c b/caca-php/php_caca.c index ea50e67..f61b69f 100644 --- a/caca-php/php_caca.c +++ b/caca-php/php_caca.c @@ -300,6 +300,19 @@ PHP_MINIT_FUNCTION(caca) { } \ ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas); +#define FETCH_DISPLAY(display) \ + zval *_zval; \ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \ + RETURN_FALSE; \ + } \ + ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display); + +#define FETCH_EVENT(event) \ + zval *_zval; \ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \ + RETURN_FALSE; \ + } \ + ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event); //-------CACA'S FUNCTIONS----------------// @@ -680,30 +693,70 @@ PHP_FUNCTION(caca_set_display_time) { } PHP_FUNCTION(caca_get_display_time) { + caca_display_t *display; + FETCH_DISPLAY(display); + RETURN_LONG(caca_get_display_time(display)); //TODO: check return value } PHP_FUNCTION(caca_get_display_width) { + caca_display_t *display; + FETCH_DISPLAY(display); + RETURN_LONG(caca_get_display_width(display)); } PHP_FUNCTION(caca_get_display_height) { + caca_display_t *display; + FETCH_DISPLAY(display); + RETURN_LONG(caca_get_display_height(display)); } PHP_FUNCTION(caca_set_display_title) { + zval *_zval; + char *str; + long str_len = 0; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &_zval, &str, &str_len) == FAILURE) { + RETURN_FALSE; + } + caca_display_t *display; + ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display); + RETURN_BOOL(caca_set_display(display, str) == 0); } PHP_FUNCTION(caca_set_mouse) { + zval *_zval; + long value = 0; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) { + RETURN_FALSE; + } + caca_display_t *display; + ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display); + RETURN_BOOL(caca_set_display(display, value) == 0); } PHP_FUNCTION(caca_set_cursor) { + zval *_zval; + long value = 0; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) { + RETURN_FALSE; + } + caca_display_t *display; + ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display); + RETURN_BOOL(caca_set_cursor(display, value) == 0); } PHP_FUNCTION(caca_get_event) { } PHP_FUNCTION(caca_get_mouse_x) { + caca_display_t *display; + FETCH_DISPLAY(display); + RETURN_LONG(caca_get_mouse_x(display)); } PHP_FUNCTION(caca_get_mouse_y) { + caca_display_t *display; + FETCH_DISPLAY(display); + RETURN_LONG(caca_get_mouse_y(display)); } PHP_FUNCTION(caca_get_event_type) { @@ -713,17 +766,32 @@ PHP_FUNCTION(caca_get_event_key_ch) { } PHP_FUNCTION(caca_get_event_mouse_button) { + caca_event_t *event; + FETCH_EVENT(event); + RETURN_LONG(caca_get_event_mouse_button(event)); } PHP_FUNCTION(caca_get_event_mouse_x) { + caca_event_t *event; + FETCH_EVENT(event); + RETURN_LONG(caca_get_event_mouse_x(event)); } PHP_FUNCTION(caca_get_event_mouse_y) { + caca_event_t *event; + FETCH_EVENT(event); + RETURN_LONG(caca_get_event_mouse_y(event)); } PHP_FUNCTION(caca_get_event_resize_width) { + caca_event_t *event; + FETCH_EVENT(event); + RETURN_LONG(caca_get_event_resize_width(event)); } PHP_FUNCTION(caca_get_event_resize_height) { + caca_event_t *event; + FETCH_EVENT(event); + RETURN_LONG(caca_get_event_resize_height(event)); }