Changeset 3108
- Timestamp:
- Oct 26, 2008, 1:29:10 PM (12 years ago)
- Location:
- libcaca/trunk/caca-php
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca-php/examples/demo.php
r3107 r3108 1 1 #!/usr/bin/php5 2 2 <? 3 4 function 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 } 3 129 4 130 function display_menu($cv, $dp) { … … 34 160 } 35 161 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) { 162 function 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 175 function demo_lines($cv, $bounds, $outline, $dithering) { 68 176 $w = caca_get_canvas_width($cv); 69 177 $h = caca_get_canvas_height($cv); … … 85 193 } 86 194 195 function 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 218 function 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 87 244 88 245 main(); -
libcaca/trunk/caca-php/php_caca.c
r3107 r3108 19 19 20 20 static function_entry caca_functions[] = { 21 PHP_FE(caca_create_event, NULL) 21 22 PHP_FE(caca_create_canvas, NULL) 22 23 PHP_FE(caca_manage_canvas, NULL) … … 35 36 PHP_FE(caca_get_char, NULL) 36 37 PHP_FE(caca_put_str, NULL) 37 PHP_FE(caca_printf, NULL)38 38 PHP_FE(caca_clear_canvas, NULL) 39 39 PHP_FE(caca_set_canvas_handle, NULL) … … 67 67 PHP_FE(caca_draw_box, NULL) 68 68 PHP_FE(caca_draw_thin_box, NULL) 69 PHP_FE(caca_draw_cp437_box, NULL) 69 70 PHP_FE(caca_fill_box, NULL) 70 71 PHP_FE(caca_draw_triangle, NULL) … … 168 169 } 169 170 170 //-------- CACA'S RESSOURCES DESTRUCTORS-----------//171 //-------- Caca's ressources destructors -----------// 171 172 172 173 static void php_caca_canvas_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { … … 190 191 191 192 static 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 ---------// 195 197 196 198 PHP_MINIT_FUNCTION(caca) { … … 292 294 } 293 295 294 //---------- SOME USEFULL MACROS---------------//296 //---------- Some usefull macros ---------------// 295 297 296 298 #define FETCH_CANVAS(canvas) \ … … 321 323 RETURN_STRING(str, 0); 322 324 323 324 //-------CACA'S FUNCTIONS----------------// 325 //------- PHP Binding's specific functions ----------// 326 327 PHP_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 ----------------// 325 334 326 335 PHP_FUNCTION(caca_create_canvas) { … … 414 423 PHP_FUNCTION(caca_put_char) { 415 424 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); 423 436 } 424 437 … … 444 457 ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas); 445 458 RETURN_BOOL(caca_put_str(canvas, x, y, str) == 0); 446 }447 448 PHP_FUNCTION(caca_printf) {449 459 } 450 460 … … 620 630 621 631 PHP_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); 622 644 } 623 645 624 646 PHP_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); 625 655 } 626 656 627 657 PHP_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); 628 670 } 629 671 630 672 PHP_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); 631 685 } 632 686 633 687 PHP_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 698 PHP_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); 634 707 } 635 708 636 709 PHP_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); 637 722 } 638 723 … … 901 986 ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval2, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event); 902 987 } 903 RETURN_ BOOL(caca_get_event(display, g, event, aa) == 0);988 RETURN_LONG(caca_get_event(display, g, event, aa)); 904 989 } 905 990 … … 917 1002 918 1003 PHP_FUNCTION(caca_get_event_type) { 1004 caca_event_t *event; 1005 FETCH_EVENT(event); 1006 RETURN_LONG(caca_get_event_type(event)); 919 1007 } 920 1008 921 1009 PHP_FUNCTION(caca_get_event_key_ch) { 1010 caca_event_t *event; 1011 FETCH_EVENT(event); 1012 RETURN_LONG(caca_get_event_key_ch(event)); 922 1013 } 923 1014 -
libcaca/trunk/caca-php/php_caca.h
r3092 r3108 36 36 PHP_MINFO_FUNCTION(caca); 37 37 38 PHP_FUNCTION(caca_create_event); 39 38 40 PHP_FUNCTION(caca_create_canvas); 39 41 PHP_FUNCTION(caca_manage_canvas); … … 52 54 PHP_FUNCTION(caca_get_char); 53 55 PHP_FUNCTION(caca_put_str); 54 PHP_FUNCTION(caca_printf);55 56 PHP_FUNCTION(caca_clear_canvas); 56 57 PHP_FUNCTION(caca_set_canvas_handle); … … 84 85 PHP_FUNCTION(caca_draw_box); 85 86 PHP_FUNCTION(caca_draw_thin_box); 87 PHP_FUNCTION(caca_draw_cp437_box); 86 88 PHP_FUNCTION(caca_fill_box); 87 89 PHP_FUNCTION(caca_draw_triangle);
Note: See TracChangeset
for help on using the changeset viewer.