Browse Source

* Add php binding for 15 new functions

* Add new sample program "examples/drivers.php"
tags/v0.99.beta17
Nicolas Vion nico 16 years ago
parent
commit
400175be4f
2 changed files with 108 additions and 3 deletions
  1. +8
    -0
      caca-php/examples/drivers.php
  2. +100
    -3
      caca-php/php_caca.c

+ 8
- 0
caca-php/examples/drivers.php View File

@@ -0,0 +1,8 @@
#!/usr/bin/php5
<?

echo "libcaca version: ".caca_get_version()."\n";
echo "Available drivers:\n";
$list = caca_get_display_driver_list();
foreach($list as $type => $name)
echo "* $name ($type)\n";

+ 100
- 3
caca-php/php_caca.c View File

@@ -327,6 +327,11 @@ PHP_MINIT_FUNCTION(caca) {
} \
ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event);

#define FETCH_LONG(l) \
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &l) == FAILURE) { \
RETURN_FALSE; \
}

#define RETURN_CHAR(c) \
char *str = emalloc(2); \
str[0] = c; \
@@ -390,13 +395,13 @@ PHP_FUNCTION(caca_get_canvas_height) {
PHP_FUNCTION(caca_get_canvas_chars) {
caca_canvas_t *canvas;
FETCH_CANVAS(canvas);
RETURN_STRING(estrdup(caca_get_canvas_chars(canvas)), 0); //TODO: check that return \0 terminated string
RETURN_STRING((char *) caca_get_canvas_chars(canvas), 1); //TODO: check that return \0 terminated string
}

PHP_FUNCTION(caca_get_canvas_attrs) {
caca_canvas_t *canvas;
FETCH_CANVAS(canvas);
RETURN_STRING(estrdup(caca_get_canvas_attrs(canvas)), 0); //TODO: check that return \0 terminated string
RETURN_STRING((char *) caca_get_canvas_attrs(canvas), 1); //TODO: check that return \0 terminated string
}

PHP_FUNCTION(caca_rand) {
@@ -408,7 +413,7 @@ PHP_FUNCTION(caca_rand) {
}

PHP_FUNCTION(caca_get_version) {
RETURN_STRING(estrdup(caca_get_version()), 0);
RETURN_STRING((char *) caca_get_version(), 1);
}

PHP_FUNCTION(caca_gotoxy) {
@@ -620,21 +625,44 @@ PHP_FUNCTION(caca_set_color_ansi) {
}

PHP_FUNCTION(caca_set_color_argb) {
zval *_zval;
long foreground, background = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &foreground, &background) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_SUCCESS(caca_set_color_argb(canvas, foreground, background));
}

PHP_FUNCTION(caca_attr_to_ansi) {
long l;
FETCH_LONG(l);
RETURN_LONG(caca_attr_to_ansi(l));
}

PHP_FUNCTION(caca_attr_to_ansi_fg) {
long l;
FETCH_LONG(l);
RETURN_LONG(caca_attr_to_ansi_fg(l));
}

PHP_FUNCTION(caca_attr_to_ansi_bg) {
long l;
FETCH_LONG(l);
RETURN_LONG(caca_attr_to_ansi_bg(l));
}

PHP_FUNCTION(caca_attr_to_rgb12_fg) {
long l;
FETCH_LONG(l);
RETURN_LONG(caca_attr_to_rgb12_fg(l));
}

PHP_FUNCTION(caca_attr_to_rgb12_bg) {
long l;
FETCH_LONG(l);
RETURN_LONG(caca_attr_to_rgb12_bg(l));
}

PHP_FUNCTION(caca_attr_to_argb64) {
@@ -840,18 +868,58 @@ PHP_FUNCTION(caca_fill_triangle) {
}

PHP_FUNCTION(caca_get_frame_count) {
zval *_zval;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_LONG(caca_get_canvas_count(canvas));
}

PHP_FUNCTION(caca_set_frame) {
zval *_zval;
long id;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &id) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_SUCCESS(caca_set_frame(canvas, id));
}

PHP_FUNCTION(caca_set_frame_name) {
zval *_zval;
char *str;
long str_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &_zval, &str, &str_len) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_SUCCESS(caca_set_frame_name(canvas, str));
}

PHP_FUNCTION(caca_create_frame) {
zval *_zval;
long id;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &id) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_SUCCESS(caca_create_frame(canvas, id));
}

PHP_FUNCTION(caca_free_frame) {
zval *_zval;
long id;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &id) == FAILURE) {
RETURN_FALSE;
}
caca_canvas_t *canvas;
ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
RETURN_SUCCESS(caca_free_frame(canvas, id));
}

PHP_FUNCTION(caca_set_dither_palette) {
@@ -1021,15 +1089,44 @@ PHP_FUNCTION(caca_create_display_with_driver) {
}

PHP_FUNCTION(caca_get_display_driver_list) {
char const * const *list = caca_get_display_driver_list();
int i;
array_init(return_value);
for(i = 0; list[i]; i += 2)
add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
}

PHP_FUNCTION(caca_get_display_driver) {
zval *_zval;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == 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_STRING((char *) caca_get_display_driver(display), 1);
}

PHP_FUNCTION(caca_set_display_driver) {
zval *_zval;
char *str;
long str_len;
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_SUCESS(caca_set_display_driver(display, str));
}

PHP_FUNCTION(caca_get_canvas) {
zval *_zval;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) {
RETURN_FALSE;
}
caca_display_t *display;
ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
caca_canvas_t *canvas = caca_get_canvas(display);
ZEND_REGISTER_RESOURCE(return_value, canvas, le_caca_canvas);
}

PHP_FUNCTION(caca_refresh_display) {


Loading…
Cancel
Save