Changeset 3108 for libcaca/trunk


Ignore:
Timestamp:
Oct 26, 2008, 1:29:10 PM (12 years ago)
Author:
nico
Message:
  • Add php binding for 9 new functions
  • Improve examples/demo.php
Location:
libcaca/trunk/caca-php
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca-php/examples/demo.php

    r3107 r3108  
    11#!/usr/bin/php5
    22<?
     3
     4function main() {
     5        $cv = caca_create_canvas(0, 0);
     6        if (!$cv) {
     7                die("Error while creating canvas\n");
     8        }
     9
     10        $dp = caca_create_display($cv);
     11        if (!$dp) {
     12                die("Error while attaching canvas to display\n");
     13        }
     14
     15        display_menu($cv, $dp);
     16
     17        caca_set_display_time($dp, 40000);
     18
     19        /* Disable cursor */
     20        caca_set_mouse($dp, 0);
     21
     22        /* Main menu */
     23        display_menu($cv, $dp);
     24        caca_refresh_display($dp);
     25
     26
     27        /* Go ! */
     28        $bounds = $outline = $dithering = 0;
     29
     30        $ev = caca_create_event();
     31        while(!$quit) {
     32                $menu = $mouse = $xmouse = $ymouse = 0;
     33
     34                while (caca_get_event($dp, CACA_EVENT_ANY, $ev, 0)) {
     35                        if ($demo and (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS)) {
     36                                $menu = 1;
     37                                $demo = false;
     38                        }
     39                        else if (caca_get_event_type($ev) & CACA_EVENT_KEY_PRESS) {
     40                                switch (caca_get_event_key_ch($ev)) {
     41                                        case ord('q'):
     42                                        case ord('Q'):
     43                                        case CACA_KEY_ESCAPE:
     44                                                $demo = false;
     45                                                $quit = 1;
     46                                                break;
     47                                        case ord('o'):
     48                                        case ord('O'):
     49                                                $outline = ($outline + 1) % 3;
     50                                                display_menu($cv, $dp);
     51                                                break;
     52                                        case ord('b'):
     53                                        case ord('B'):
     54                                                $bounds = ($bounds + 1) % 2;
     55                                                display_menu($cv, $dp);
     56                                                break;
     57                                        case ord('d'):
     58                                        case ord('D'):
     59                                                $dithering = ($dithering + 1) % 5;
     60                                                caca_set_feature($cv, $dithering);
     61                                                display_menu($cv, $dp);
     62                                                break;
     63                                        case ord('f'):
     64                                        case ord('F'):
     65                                                $demo = "demo_all";
     66                                                break;
     67                                        case ord('1'):
     68                                                $demo = "demo_dots";
     69                                                break;
     70                                        case ord('2'):
     71                                                $demo = "demo_lines";
     72                                                break;
     73                                        case ord('3'):
     74                                                $demo = "demo_boxes";
     75                                                break;
     76                                        case ord('4'):
     77                                                $demo = "demo_triangles";
     78                                                break;
     79                                        case ord('5'):
     80                                                $demo = "demo_ellipses";
     81                                                break;
     82                                        case ord('s'):
     83                                        case ord('S'):
     84                                                $demo = "demo_sprites";
     85                                                break;
     86                                        case ord('r'):
     87                                        case ord('R'):
     88                                                $demo = "demo_render";
     89                                                break;
     90                                }
     91
     92                                if ($demo) {
     93                                        caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
     94                                        caca_clear_canvas($cv);
     95                                }
     96                        }
     97                        else if(caca_get_event_type($ev) & CACA_EVENT_MOUSE_MOTION) {
     98                                $mouse = 1;
     99                                $xmouse = caca_get_event_mouse_x($ev);
     100                                $ymouse = caca_get_event_mouse_y($ev);
     101                        }
     102                        else if(caca_get_event_type($ev) & CACA_EVENT_RESIZE) {
     103                                $mouse = 1; /* old hack */
     104                        }
     105                }
     106
     107                if ($menu || ($mouse && !$demo)) {
     108                        display_menu($cv, $dp);
     109                        if ($mouse && !$demo) {
     110                                caca_set_color_ansi($cv, CACA_RED, CACA_BLACK);
     111                                caca_put_str($cv, $xmouse, $ymouse,".");
     112                                caca_put_str($cv, $xmouse, $ymouse + 1, "|\\");
     113                        }
     114                        caca_refresh_display($dp);
     115                        $mouse = $menu = 0;
     116                }
     117
     118                if ($demo) {
     119                        $demo($cv, $bounds, $outline, $dithering);
     120
     121                        caca_set_color_ansi($cv, CACA_LIGHTGRAY, CACA_BLACK);
     122                        caca_draw_thin_box($cv, 1, 1, caca_get_canvas_width($cv) - 2, caca_get_canvas_height($cv) - 2);
     123                        $rate = (1000000 / caca_get_display_time($dp)).".".((10000000 / caca_get_display_time($dp)) % 10);
     124                        caca_put_str($cv, 4, 1, "[$rate fps]----");
     125                        caca_refresh_display($dp);
     126                }
     127        }
     128}
    3129
    4130function display_menu($cv, $dp) {
     
    34160}
    35161
    36 function main() {
    37         $cv = caca_create_canvas(0, 0);
    38         if (!$cv) {
    39                 die("Error while creating canvas\n");
    40         }
    41 
    42         $dp = caca_create_display($cv);
    43         if (!$dp) {
    44                 die("Error while attaching canvas to display\n");
    45         }
    46 
    47         display_menu($cv, $dp);
    48 
    49         caca_set_display_time($dp, 40000);
    50 
    51         /* Disable cursor */
    52         caca_set_mouse($dp, 0);
    53 
    54         /* Main menu */
    55         display_menu($cv, $dp);
    56         caca_refresh_display($dp);
    57 
    58         sleep(1);
    59 
    60         for ($i = 0; $i < 100; $i++) {
    61                 demo_lines($cv, true, 2);
    62                 caca_refresh_display($dp);
    63         }
    64 
    65 }
    66 
    67 function demo_lines($cv, $bounds = true, $outline = 1) {
     162function demo_dots($cv, $bounds, $outline, $dithering) {
     163        $xmax = caca_get_canvas_width($cv);
     164        $ymax = caca_get_canvas_height($cv);
     165
     166        $chars = array('+', '-', '*', '#', 'X', '@', '%', '$', 'M', 'W');
     167
     168        for ($i = 1000; $i--;) {
     169                /* Putpixel */
     170                caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
     171                caca_put_char($cv, caca_rand(0, $xmax), caca_rand(0, $ymax), $chars[caca_rand(0, 9)]);
     172        }
     173}
     174
     175function demo_lines($cv, $bounds, $outline, $dithering) {
    68176        $w = caca_get_canvas_width($cv);
    69177        $h = caca_get_canvas_height($cv);
     
    85193}
    86194
     195function demo_boxes($cv, $bounds, $outline, $dithering) {
     196        $w = caca_get_canvas_width($cv);
     197        $h = caca_get_canvas_height($cv);
     198
     199        if ($bounds) {
     200                $xa = caca_rand(- $w, 2 * $w); $ya = caca_rand(- $h, 2 * $h);
     201                $xb = caca_rand(- $w, 2 * $w); $yb = caca_rand(- $h, 2 * $h);
     202        }
     203        else {
     204                $xa = caca_rand(0, $w); $ya = caca_rand(0, $h);
     205                $xb = caca_rand(0, $w); $yb = caca_rand(0, $h);
     206        }
     207
     208        caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
     209        caca_fill_box($cv, $xa, $ya, $xb, $yb, '#');
     210
     211        caca_set_color_ansi($cv, caca_rand(0, 16), CACA_BLACK);
     212        if($outline == 2)
     213                caca_draw_thin_box($cv, $xa, $ya, $xb, $yb);
     214        else if($outline == 1)
     215                caca_draw_box($cv, $xa, $ya, $xb, $yb, '#');
     216}
     217
     218function demo_ellipses($cv, $bounds, $outline, $dithering) {
     219        $w = caca_get_canvas_width($cv);
     220        $h = caca_get_canvas_height($cv);
     221
     222        if ($bounds) {
     223                $x = caca_rand(- $w, 2 * $w); $y = caca_rand(- $h, 2 * $h);
     224                $a = caca_rand(0, $w); $b = caca_rand(0, $h);
     225        }
     226        else {
     227                do {
     228                        $x = caca_rand(0, $w); $y = caca_rand(0, $h);
     229                        $a = caca_rand(0, $w); $b = caca_rand(0, $h);
     230                } while ($x - $a < 0 || $x + $a >= $w || $y - $b < 0 || $y + $b >= $h);
     231        }
     232
     233        caca_set_color_ansi($cv, caca_rand(0, 16), caca_rand(0, 16));
     234        caca_fill_ellipse($cv, $x, $y, $a, $b, '#');
     235
     236        caca_set_color_ansi($cv, caca_rand(0, 16), CACA_BLACK);
     237        if ($outline == 2)
     238                caca_draw_thin_ellipse($cv, $x, $y, $a, $b);
     239        else if ($outline == 1)
     240                caca_draw_ellipse($cv, $x, $y, $a, $b, '#');
     241}
     242
     243
    87244
    88245main();
  • libcaca/trunk/caca-php/php_caca.c

    r3107 r3108  
    1919
    2020static function_entry caca_functions[] = {
     21        PHP_FE(caca_create_event, NULL)
    2122        PHP_FE(caca_create_canvas, NULL)
    2223        PHP_FE(caca_manage_canvas, NULL)
     
    3536        PHP_FE(caca_get_char, NULL)
    3637        PHP_FE(caca_put_str, NULL)
    37         PHP_FE(caca_printf, NULL)
    3838        PHP_FE(caca_clear_canvas, NULL)
    3939        PHP_FE(caca_set_canvas_handle, NULL)
     
    6767        PHP_FE(caca_draw_box, NULL)
    6868        PHP_FE(caca_draw_thin_box, NULL)
     69        PHP_FE(caca_draw_cp437_box, NULL)
    6970        PHP_FE(caca_fill_box, NULL)
    7071        PHP_FE(caca_draw_triangle, NULL)
     
    168169}
    169170
    170 //--------CACA'S RESSOURCES DESTRUCTORS-----------//
     171//-------- Caca's ressources destructors -----------//
    171172
    172173static void php_caca_canvas_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
     
    190191
    191192static void php_caca_event_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
    192 }
    193 
    194 //--------INITIALIZATION---------//
     193        efree((caca_event_t *) rsrc->ptr);
     194}
     195
     196//-------- Initialization ---------//
    195197
    196198PHP_MINIT_FUNCTION(caca) {
     
    292294}
    293295
    294 //----------SOME USEFULL MACROS---------------//
     296//---------- Some usefull macros ---------------//
    295297
    296298#define FETCH_CANVAS(canvas) \
     
    321323        RETURN_STRING(str, 0);
    322324
    323 
    324 //-------CACA'S FUNCTIONS----------------//
     325//------- PHP Binding's specific functions ----------//
     326
     327PHP_FUNCTION(caca_create_event) {
     328        caca_event_t *event;
     329        event = emalloc(sizeof(caca_event_t));
     330        ZEND_REGISTER_RESOURCE(return_value, event, le_caca_event);
     331}
     332
     333//------- Caca's functions ----------------//
    325334
    326335PHP_FUNCTION(caca_create_canvas) {
     
    414423PHP_FUNCTION(caca_put_char) {
    415424        zval *_zval;
    416         long x, y, c = 0;
    417         if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlll", &_zval, &x, &y, &c) == FAILURE) {
    418                 RETURN_FALSE;
    419         }
    420         caca_canvas_t *canvas;
    421         ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
    422         RETURN_BOOL(caca_put_char(canvas, x, y, c) == 0);
     425        char *str;
     426        long str_len, x, y = 0;
     427        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlls", &_zval, &x, &y, &str, &str_len) == FAILURE) {
     428                RETURN_FALSE;
     429        }
     430        caca_canvas_t *canvas;
     431        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     432        if (str_len != 1) {
     433                RETURN_FALSE;
     434        }
     435        RETURN_BOOL(caca_put_char(canvas, x, y, str[0]) == 0);
    423436}
    424437
     
    444457        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
    445458        RETURN_BOOL(caca_put_str(canvas, x, y, str) == 0);
    446 }
    447 
    448 PHP_FUNCTION(caca_printf) {
    449459}
    450460
     
    620630
    621631PHP_FUNCTION(caca_draw_ellipse) {
     632        zval *_zval;
     633        char *str;
     634        long str_len, xa, ya, xb, yb = 0;
     635        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
     636                RETURN_FALSE;
     637        }
     638        caca_canvas_t *canvas;
     639        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     640        if (str_len != 1) {
     641                RETURN_FALSE;
     642        }
     643        RETURN_BOOL(caca_draw_ellipse(canvas, xa, ya, xb, yb, str[0]) == 0);
    622644}
    623645
    624646PHP_FUNCTION(caca_draw_thin_ellipse) {
     647        zval *_zval;
     648        long xa, ya, xb, yb = 0;
     649        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &xa, &ya, &xb, &yb) == FAILURE) {
     650                RETURN_FALSE;
     651        }
     652        caca_canvas_t *canvas;
     653        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     654        RETURN_BOOL(caca_draw_thin_ellipse(canvas, xa, ya, xb, yb) == 0);
    625655}
    626656
    627657PHP_FUNCTION(caca_fill_ellipse) {
     658        zval *_zval;
     659        char *str;
     660        long str_len, xa, ya, xb, yb = 0;
     661        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
     662                RETURN_FALSE;
     663        }
     664        caca_canvas_t *canvas;
     665        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     666        if (str_len != 1) {
     667                RETURN_FALSE;
     668        }
     669        RETURN_BOOL(caca_fill_ellipse(canvas, xa, ya, xb, yb, str[0]) == 0);
    628670}
    629671
    630672PHP_FUNCTION(caca_draw_box) {
     673        zval *_zval;
     674        char *str;
     675        long str_len, xa, ya, xb, yb = 0;
     676        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
     677                RETURN_FALSE;
     678        }
     679        caca_canvas_t *canvas;
     680        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     681        if (str_len != 1) {
     682                RETURN_FALSE;
     683        }
     684        RETURN_BOOL(caca_draw_box(canvas, xa, ya, xb, yb, str[0]) == 0);
    631685}
    632686
    633687PHP_FUNCTION(caca_draw_thin_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_BOOL(caca_draw_thin_box(canvas, xa, ya, xb, yb) == 0);
     696}
     697
     698PHP_FUNCTION(caca_draw_cp437_box) {
     699        zval *_zval;
     700        long xa, ya, xb, yb = 0;
     701        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &_zval, &xa, &ya, &xb, &yb) == 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        RETURN_BOOL(caca_draw_cp437_box(canvas, xa, ya, xb, yb) == 0);
    634707}
    635708
    636709PHP_FUNCTION(caca_fill_box) {
     710        zval *_zval;
     711        char *str;
     712        long str_len, xa, ya, xb, yb = 0;
     713        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllls", &_zval, &xa, &ya, &xb, &yb, &str, &str_len) == FAILURE) {
     714                RETURN_FALSE;
     715        }
     716        caca_canvas_t *canvas;
     717        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
     718        if (str_len != 1) {
     719                RETURN_FALSE;
     720        }
     721        RETURN_BOOL(caca_fill_box(canvas, xa, ya, xb, yb, str[0]) == 0);
    637722}
    638723
     
    901986                ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval2, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event);
    902987        }
    903         RETURN_BOOL(caca_get_event(display, g, event, aa) == 0);
     988        RETURN_LONG(caca_get_event(display, g, event, aa));
    904989}
    905990
     
    9171002
    9181003PHP_FUNCTION(caca_get_event_type) {
     1004        caca_event_t *event;
     1005        FETCH_EVENT(event);
     1006        RETURN_LONG(caca_get_event_type(event));
    9191007}
    9201008
    9211009PHP_FUNCTION(caca_get_event_key_ch) {
     1010        caca_event_t *event;
     1011        FETCH_EVENT(event);
     1012        RETURN_LONG(caca_get_event_key_ch(event));
    9221013}
    9231014
  • libcaca/trunk/caca-php/php_caca.h

    r3092 r3108  
    3636PHP_MINFO_FUNCTION(caca);
    3737
     38PHP_FUNCTION(caca_create_event);
     39
    3840PHP_FUNCTION(caca_create_canvas);
    3941PHP_FUNCTION(caca_manage_canvas);
     
    5254PHP_FUNCTION(caca_get_char);
    5355PHP_FUNCTION(caca_put_str);
    54 PHP_FUNCTION(caca_printf);
    5556PHP_FUNCTION(caca_clear_canvas);
    5657PHP_FUNCTION(caca_set_canvas_handle);
     
    8485PHP_FUNCTION(caca_draw_box);
    8586PHP_FUNCTION(caca_draw_thin_box);
     87PHP_FUNCTION(caca_draw_cp437_box);
    8688PHP_FUNCTION(caca_fill_box);
    8789PHP_FUNCTION(caca_draw_triangle);
Note: See TracChangeset for help on using the changeset viewer.