diff options
author | Sterling Hughes <sterling@php.net> | 2000-04-30 19:00:05 +0000 |
---|---|---|
committer | Sterling Hughes <sterling@php.net> | 2000-04-30 19:00:05 +0000 |
commit | 1f64d98753c407afdd788ba123ff077e81a342d3 (patch) | |
tree | f6063c9abef96c8987bb4c1fbd90cc49b0877462 /ext/swf/swf.c | |
parent | a3c17cf766951e15ad777e1c3c845ff3084c71d8 (diff) | |
download | php-git-1f64d98753c407afdd788ba123ff077e81a342d3.tar.gz |
Add LibSWF support to PHP, will be sending an e-mail on the files and
uses shortly.
Diffstat (limited to 'ext/swf/swf.c')
-rw-r--r-- | ext/swf/swf.c | 882 |
1 files changed, 882 insertions, 0 deletions
diff --git a/ext/swf/swf.c b/ext/swf/swf.c new file mode 100644 index 0000000000..3d92ef68a1 --- /dev/null +++ b/ext/swf/swf.c @@ -0,0 +1,882 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_01.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Sterling Hughes <sterling@php.net> | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + + +#include "php.h" + +#if HAVE_SWF +#include "swf.h" +#include "ext/standard/info.h" +#include "php_swf.h" + +function_entry swf_functions[] = { + PHP_FE(swf_openfile, NULL) + PHP_FE(swf_closefile, NULL) + PHP_FE(swf_labelframe, NULL) + PHP_FE(swf_showframe, NULL) + PHP_FE(swf_setframe, NULL) + PHP_FE(swf_getframe, NULL) + PHP_FE(swf_mulcolor, NULL) + PHP_FE(swf_addcolor, NULL) + PHP_FE(swf_placeobject, NULL) + PHP_FE(swf_modifyobject, NULL) + PHP_FE(swf_removeobject, NULL) + PHP_FE(swf_nextid, NULL) + PHP_FE(swf_startdoaction, NULL) + PHP_FE(swf_enddoaction, NULL) + PHP_FE(swf_actiongotoframe, NULL) + PHP_FE(swf_actiongeturl, NULL) + PHP_FE(swf_actionnextframe, NULL) + PHP_FE(swf_actionprevframe, NULL) + PHP_FE(swf_actionplay, NULL) + PHP_FE(swf_actionstop, NULL) + PHP_FE(swf_actiontogglequality, NULL) + PHP_FE(swf_actionwaitforframe, NULL) + PHP_FE(swf_actionsettarget, NULL) + PHP_FE(swf_actiongotolabel, NULL) + PHP_FE(swf_defineline, NULL) + PHP_FE(swf_definerect, NULL) + PHP_FE(swf_startshape, NULL) + PHP_FE(swf_shapelinesolid, NULL) + PHP_FE(swf_shapefilloff, NULL) + PHP_FE(swf_shapefillsolid, NULL) + PHP_FE(swf_shapefillbitmapclip, NULL) + PHP_FE(swf_shapefillbitmaptile, NULL) + PHP_FE(swf_shapemoveto, NULL) + PHP_FE(swf_shapelineto, NULL) + PHP_FE(swf_shapecurveto, NULL) + PHP_FE(swf_shapecurveto3, NULL) + PHP_FE(swf_shapearc, NULL) + PHP_FE(swf_endshape, NULL) + PHP_FE(swf_definefont, NULL) + PHP_FE(swf_setfont, NULL) + PHP_FE(swf_fontsize, NULL) + PHP_FE(swf_fontslant, NULL) + PHP_FE(swf_fonttracking, NULL) + PHP_FE(swf_getfontinfo, NULL) + PHP_FE(swf_definetext, NULL) + PHP_FE(swf_textwidth, NULL) + PHP_FE(swf_definebitmap, NULL) + PHP_FE(swf_getbitmapinfo, NULL) + PHP_FE(swf_startsymbol, NULL) + PHP_FE(swf_endsymbol, NULL) + PHP_FE(swf_startbutton, NULL) + PHP_FE(swf_addbuttonrecord, NULL) + PHP_FE(swf_oncondition, NULL) + PHP_FE(swf_endbutton, NULL) + PHP_FE(swf_viewport, NULL) + PHP_FE(swf_ortho2, NULL) + PHP_FE(swf_perspective, NULL) + PHP_FE(swf_polarview, NULL) + PHP_FE(swf_lookat, NULL) + PHP_FE(swf_pushmatrix, NULL) + PHP_FE(swf_popmatrix, NULL) + PHP_FE(swf_scale, NULL) + PHP_FE(swf_translate, NULL) + PHP_FE(swf_rotate, NULL) + PHP_FE(swf_posround, NULL) + {NULL,NULL,NULL} +}; + +zend_module_entry swf_module_entry = { + "swf", + swf_functions, + PHP_MINIT(swf), + NULL, + NULL, + NULL, + PHP_MINFO(swf), + STANDARD_MODULE_PROPERTIES +}; + +#if COMPILE_DL +DLEXPORT zend_module_entry *get_module() { return &swf_module_entry; }; +#endif + +PHP_MINFO_FUNCTION(swf) +{ + php_info_print_table_start(); + php_info_print_table_row(2, "swf support", "enabled"); + php_info_print_table_end(); +} + + +PHP_MINIT_FUNCTION(swf) +{ + REGISTER_LONG_CONSTANT("TYPE_PUSHBUTTON", TYPE_PUSHBUTTON, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("TYPE_MENUBUTTON", TYPE_MENUBUTTON, CONST_CS | CONST_PERSISTENT); + REGISTER_DOUBLE_CONSTANT("BSHitTest", BSHitTest, CONST_CS | CONST_PERSISTENT); + REGISTER_DOUBLE_CONSTANT("BSDown", BSDown, CONST_CS | CONST_PERSISTENT); + REGISTER_DOUBLE_CONSTANT("BSOver", BSOver, CONST_CS | CONST_PERSISTENT); + REGISTER_DOUBLE_CONSTANT("BSUp", BSUp, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OverDowntoIdle", OverDowntoIdle, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IdletoOverDown", IdletoOverDown, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OutDowntoIdle", OutDowntoIdle, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OutDowntoOverDown", OutDowntoOverDown, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OverDowntoOutDown", OverDowntoOutDown, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OverUptoOverDown", OverUptoOverDown, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OverUptoIdle", OverUptoIdle, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IdletoOverUp", IdletoOverUp, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("ButtonEnter", ButtonEnter, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("ButtonExit", ButtonExit, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MenuEnter", MenuEnter, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MenuExit", MenuExit, CONST_CS | CONST_PERSISTENT); + return SUCCESS; +} + +PHP_FUNCTION(swf_openfile) +{ + zval **name, **sizeX, **sizeY, **frameRate, **r, **g, **b; + if (ARG_COUNT(ht) != 7 || + zend_get_parameters_ex(7, &name, &sizeX, &sizeY, &frameRate, &r, &g, &b) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(name); + convert_to_double_ex(sizeX); + convert_to_double_ex(sizeY); + convert_to_double_ex(frameRate); + convert_to_double_ex(r); + convert_to_double_ex(g); + convert_to_double_ex(b); + + swf_openfile((*name)->value.str.val, (float)(*sizeX)->value.dval, (float)(*sizeY)->value.dval, + (float)(*frameRate)->value.dval, (float)(*r)->value.dval, (float)(*g)->value.dval, (float)(*b)->value.dval); +} + +PHP_FUNCTION(swf_closefile) +{ + swf_closefile(); +} + +PHP_FUNCTION(swf_labelframe) +{ + zval **name; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &name) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(name); + swf_labelframe((*name)->value.str.val); +} + +PHP_FUNCTION(swf_showframe) +{ + swf_showframe(); +} + +PHP_FUNCTION(swf_setframe) +{ + zval **frameno; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &frameno) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(frameno); + + swf_setframe((*frameno)->value.lval); +} + +PHP_FUNCTION(swf_getframe) +{ + RETURN_LONG(swf_getframe()); +} + +void col_swf(INTERNAL_FUNCTION_PARAMETERS, int opt) { + zval **r, **g, **b, **a; + if (ARG_COUNT(ht) != 4 || + zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(r); + convert_to_double_ex(g); + convert_to_double_ex(b); + convert_to_double_ex(a); + if (opt) { + swf_addcolor((float)(*r)->value.dval, (float)(*g)->value.dval, (float)(*b)->value.dval, (float)(*a)->value.dval); + } else { + swf_mulcolor((float)(*r)->value.dval, (float)(*g)->value.dval, (float)(*b)->value.dval, (float)(*a)->value.dval); + } +} + +PHP_FUNCTION(swf_mulcolor) +{ + col_swf(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} + +PHP_FUNCTION(swf_addcolor) +{ + col_swf(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} + +PHP_FUNCTION(swf_placeobject) +{ + zval **objid, **depth; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &objid, &depth) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(objid); + convert_to_long_ex(depth); + swf_placeobject((*objid)->value.lval, (*depth)->value.lval); +} + +PHP_FUNCTION(swf_modifyobject) +{ + zval **depth, **how; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &depth, &how) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(depth); + convert_to_long_ex(how); + + swf_modifyobject((*depth)->value.lval, (*how)->value.lval); +} + +PHP_FUNCTION(swf_removeobject) +{ + zval **depth; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &depth) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(depth); + + swf_removeobject((*depth)->value.lval); +} + +PHP_FUNCTION(swf_nextid) +{ + swf_nextid(); +} + +PHP_FUNCTION(swf_startdoaction) +{ + swf_startdoaction(); +} + +PHP_FUNCTION(swf_enddoaction) +{ + swf_enddoaction(); +} + +PHP_FUNCTION(swf_actiongotoframe) +{ + zval **frameno; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &frameno) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(frameno); + + swf_actionGotoFrame((*frameno)->value.lval); +} + +PHP_FUNCTION(swf_actiongeturl) +{ + zval **url, **target; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &url, &target) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(url); + convert_to_string_ex(target); + + swf_actionGetURL((*url)->value.str.val, (*target)->value.str.val); +} + +PHP_FUNCTION(swf_actionnextframe) +{ + swf_actionNextFrame(); +} + +PHP_FUNCTION(swf_actionprevframe) +{ + swf_actionPrevFrame(); +} + +PHP_FUNCTION(swf_actionplay) +{ + swf_actionPlay(); +} + +PHP_FUNCTION(swf_actionstop) +{ + swf_actionStop(); +} + +PHP_FUNCTION(swf_actiontogglequality) +{ + swf_actionToggleQuality(); +} + +PHP_FUNCTION(swf_actionwaitforframe) +{ + zval **frame, **skipcount; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &frame, &skipcount) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long_ex(frame); + convert_to_long_ex(skipcount); + swf_actionWaitForFrame((*frame)->value.lval, (*skipcount)->value.lval); +} + +PHP_FUNCTION(swf_actionsettarget) +{ + zval **target; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &target) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(target); + swf_actionSetTarget((*target)->value.str.val); +} + +PHP_FUNCTION(swf_actiongotolabel) +{ + zval **label; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &label) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(label); + swf_actionGoToLabel((*label)->value.str.val); +} + +void php_swf_define(INTERNAL_FUNCTION_PARAMETERS, int opt) +{ + zval **objid, **x1, **y1, **x2, **y2, **width; + if (ARG_COUNT(ht) != 6 || + zend_get_parameters_ex(6, &objid, &x1, &y1, &x2, &y2, &width) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long_ex(objid); + convert_to_double_ex(x1); + convert_to_double_ex(y1); + convert_to_double_ex(x2); + convert_to_double_ex(y2); + convert_to_double_ex(width); + + if (opt) { + swf_defineline((*objid)->value.lval, (float)(*x1)->value.dval, (float)(*y1)->value.dval, + (float)(*x2)->value.dval, (float)(*y2)->value.dval, (float)(*width)->value.dval); + } else { + swf_definerect((*objid)->value.lval, (float)(*x1)->value.dval, (float)(*y1)->value.dval, + (float)(*x2)->value.dval, (float)(*y2)->value.dval, (float)(*width)->value.dval); + } +} + +PHP_FUNCTION(swf_defineline) +{ + php_swf_define(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} + +PHP_FUNCTION(swf_definerect) +{ + php_swf_define(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} + + +PHP_FUNCTION(swf_startshape) +{ + zval **objid; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &objid) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(objid); + swf_startshape((*objid)->value.lval); +} + +PHP_FUNCTION(swf_shapelinesolid) +{ + zval **r, **g, **b, **a, **width; + if (ARG_COUNT(ht) != 5 || + zend_get_parameters_ex(5, &r, &g, &b, &a, &width) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(r); + convert_to_double_ex(g); + convert_to_double_ex(b); + convert_to_double_ex(a); + convert_to_double_ex(width); + swf_shapelinesolid((float)(*r)->value.dval, (float)(*g)->value.dval, (float)(*b)->value.dval, (float)(*a)->value.dval, + (float)(*width)->value.dval); +} + +PHP_FUNCTION(swf_shapefilloff) +{ + swf_shapefilloff(); +} + +PHP_FUNCTION(swf_shapefillsolid) +{ + zval **r, **g, **b, **a; + if (ARG_COUNT(ht) != 4 || + zend_get_parameters_ex(4, &r, &g, &b, &a) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_double_ex(r); + convert_to_double_ex(g); + convert_to_double_ex(b); + convert_to_double_ex(a); + + swf_shapefillsolid((float)(*r)->value.dval, (float)(*g)->value.dval, (float)(*b)->value.dval, (float)(*a)->value.dval); +} + +void php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAMETERS, int opt) +{ + zval **bitmapid; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &bitmapid) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(bitmapid); + + if (opt) { + swf_shapefillbitmapclip((*bitmapid)->value.lval); + } else { + swf_shapefillbitmaptile((*bitmapid)->value.lval); + } +} + + +PHP_FUNCTION(swf_shapefillbitmapclip) +{ + php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} + +PHP_FUNCTION(swf_shapefillbitmaptile) +{ + php_swf_fill_bitmap(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} + +void php_swf_shape(INTERNAL_FUNCTION_PARAMETERS, int opt) +{ + zval **x, **y; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &x, &y) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(x); + convert_to_double_ex(y); + + if (opt) { + swf_shapemoveto((float)(*x)->value.dval, (float)(*y)->value.dval); + } else { + swf_shapelineto((float)(*x)->value.dval, (float)(*y)->value.dval); + } +} + +PHP_FUNCTION(swf_shapemoveto) +{ + php_swf_shape(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} + +PHP_FUNCTION(swf_shapelineto) +{ + php_swf_shape(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} + +PHP_FUNCTION(swf_shapecurveto) +{ + zval **x1, **y1, **x2, **y2; + if (ARG_COUNT(ht) != 4 || + zend_get_parameters_ex(4, &x1, &y1, &x2, &y2) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(x1); + convert_to_double_ex(y1); + convert_to_double_ex(x2); + convert_to_double_ex(y2); + + swf_shapecurveto((float)(*x1)->value.dval, (float)(*y1)->value.dval, (float)(*x2)->value.dval, (float)(*y2)->value.dval); +} + + +PHP_FUNCTION(swf_shapecurveto3) +{ + zval **x1, **y1, **x2, **y2, **x3, **y3; + if (ARG_COUNT(ht) != 6 || + zend_get_parameters_ex(6, &x1, &y1, &x2, &y2, &x3, &y3) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(x1); + convert_to_double_ex(y1); + convert_to_double_ex(x2); + convert_to_double_ex(y2); + convert_to_double_ex(x3); + convert_to_double_ex(y3); + + swf_shapecurveto3((float)(*x1)->value.dval, (float)(*y1)->value.dval, (float)(*x2)->value.dval, (float)(*y2)->value.dval, + (float)(*x3)->value.dval, (float)(*y3)->value.dval); +} + +PHP_FUNCTION(swf_shapearc) +{ + zval **x, **y, **r, **ang1, **ang2; + if (ARG_COUNT(ht) != 5 || + zend_get_parameters_ex(5, &x, &y, &r, &ang1, &ang2) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(x); + convert_to_double_ex(y); + convert_to_double_ex(r); + convert_to_double_ex(ang1); + convert_to_double_ex(ang2); + + swf_shapearc((float)(*x)->value.dval, (float)(*y)->value.dval, (float)(*r)->value.dval, (float)(*ang1)->value.dval, + (float)(*ang2)->value.dval); +} + +PHP_FUNCTION(swf_endshape) +{ + swf_endshape(); +} + +PHP_FUNCTION(swf_definefont) +{ + zval **fontid, **name; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &fontid, &name) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(fontid); + convert_to_string_ex(name); + + swf_definefont((*fontid)->value.lval, (*name)->value.str.val); +} + +PHP_FUNCTION(swf_setfont) +{ + zval **fontid; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &fontid) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(fontid); + swf_setfont((*fontid)->value.lval); +} + +PHP_FUNCTION(swf_fontsize) +{ + zval **height; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &height) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(height); + + swf_fontsize((float)(*height)->value.dval); +} + +PHP_FUNCTION(swf_fontslant) +{ + zval **slant; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &slant) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(slant); + + swf_fontslant((float)(*slant)->value.dval); +} + +PHP_FUNCTION(swf_fonttracking) +{ + zval **track; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &track) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(track); + swf_fonttracking((float)(*track)->value.dval); +} + +PHP_FUNCTION(swf_getfontinfo) +{ + float A_height, x_height; + swf_getfontinfo(&A_height, &x_height); + if (array_init(return_value) == FAILURE) { + php_error(E_WARNING, "Cannot initialize return value from swf_getfontinfo"); + RETURN_FALSE; + } + add_assoc_double(return_value, "Aheight", A_height); + add_assoc_double(return_value, "xheight", x_height); +} + +PHP_FUNCTION(swf_definetext) +{ + zval **objid, **str, **docCenter; + if (ARG_COUNT(ht) != 3 || + zend_get_parameters_ex(3, &objid, &str, &docCenter) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(objid); + convert_to_string_ex(str); + convert_to_long_ex(docCenter); + + swf_definetext((*objid)->value.lval, (*str)->value.str.val, (*docCenter)->value.lval); +} + +PHP_FUNCTION(swf_textwidth) +{ + zval **str; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &str) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(str); + RETURN_DOUBLE((double)swf_textwidth((*str)->value.str.val)); +} + +PHP_FUNCTION(swf_definebitmap) +{ + zval **objid, **imgname; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &objid, &imgname) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(objid); + convert_to_string_ex(imgname); + + swf_definebitmap((*objid)->value.lval, (*imgname)->value.str.val); +} + +PHP_FUNCTION(swf_getbitmapinfo) +{ + zval **bitmapid; + int size, width, height; + + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &bitmapid) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(bitmapid); + + size = swf_getbitmapinfo((*bitmapid)->value.lval, &width, &height); + if (array_init(return_value) == FAILURE) { + php_error(E_WARNING, "Cannot initialize return value from swf_getbitmapinfo"); + RETURN_FALSE; + } + + add_assoc_long(return_value, "size", size); + add_assoc_long(return_value, "width", width); + add_assoc_long(return_value, "height", height); +} + +PHP_FUNCTION(swf_startsymbol) +{ + zval **objid; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &objid) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(objid); + + swf_startsymbol((*objid)->value.lval); +} + +PHP_FUNCTION(swf_endsymbol) +{ + swf_endsymbol(); +} + +PHP_FUNCTION(swf_startbutton) +{ + zval **objid, **type; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &objid, &type) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(objid); + convert_to_long_ex(type); + + swf_startbutton((*objid)->value.lval, (*type)->value.lval); /* TYPE_MENUBUTTON, TYPE_PUSHBUTTON */ +} + +PHP_FUNCTION(swf_addbuttonrecord) +{ + zval **state, **objid, **depth; + if (ARG_COUNT(ht) != 3 || + zend_get_parameters_ex(3, &state, &objid, &depth) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(state); + convert_to_long_ex(objid); + convert_to_long_ex(depth); + + swf_addbuttonrecord((*state)->value.lval, (*objid)->value.lval, (*depth)->value.lval); +} + +PHP_FUNCTION(swf_oncondition) +{ + zval **transitions; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &transitions) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(transitions); + + swf_oncondition((*transitions)->value.lval); +} + +PHP_FUNCTION(swf_endbutton) +{ + swf_endbutton(); +} + +void php_swf_geo_same(INTERNAL_FUNCTION_PARAMETERS, int opt) +{ + zval **arg1, **arg2, **arg3, **arg4; + if (ARG_COUNT(ht) != 4 || + zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(arg1); + convert_to_double_ex(arg2); + convert_to_double_ex(arg3); + convert_to_double_ex(arg4); + + if (opt == 0) { + swf_viewport((*arg1)->value.dval, (*arg2)->value.dval, (*arg3)->value.dval, + (*arg4)->value.dval); + } else if (opt == 1) { + swf_ortho2((*arg1)->value.dval, (*arg2)->value.dval, (*arg3)->value.dval, + (*arg4)->value.dval); + } else if (opt == 2) { + swf_polarview((*arg1)->value.dval, (*arg2)->value.dval, (*arg3)->value.dval, + (*arg4)->value.dval); + } else if (opt == 3) { + swf_perspective((*arg1)->value.dval, (*arg2)->value.dval, (*arg3)->value.dval, + (*arg4)->value.dval); + } +} + +PHP_FUNCTION(swf_viewport) +{ + php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} + +PHP_FUNCTION(swf_ortho2) +{ + php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} + +PHP_FUNCTION(swf_polarview) +{ + php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2); +} + +PHP_FUNCTION(swf_perspective) +{ + php_swf_geo_same(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3); +} + +PHP_FUNCTION(swf_lookat) +{ + zval **vx, **vy, **vz, **px, **py, **pz, **twist; + if (ARG_COUNT(ht) != 7 || + zend_get_parameters_ex(7, &vx, &vy, &vz, &px, &py, &pz, &twist) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(vx); + convert_to_double_ex(vy); + convert_to_double_ex(vz); + convert_to_double_ex(px); + convert_to_double_ex(py); + convert_to_double_ex(pz); + convert_to_double_ex(twist); + + swf_lookat((*vx)->value.dval, (*vy)->value.dval, (*vz)->value.dval, + (*px)->value.dval, (*py)->value.dval, (*pz)->value.dval, (*twist)->value.dval); +} + +PHP_FUNCTION(swf_pushmatrix) +{ + swf_pushmatrix(); +} + +PHP_FUNCTION(swf_popmatrix) +{ + swf_popmatrix(); +} + +PHP_FUNCTION(swf_scale) +{ + zval **x, **y, **z; + if (ARG_COUNT(ht) != 3 || + zend_get_parameters_ex(3, &x, &y, &z) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(x); + convert_to_double_ex(y); + convert_to_double_ex(z); + + swf_scale((*x)->value.dval, (*y)->value.dval, (*z)->value.dval); +} + +PHP_FUNCTION(swf_translate) +{ + zval **x, **y, **z; + if (ARG_COUNT(ht) != 3 || + zend_get_parameters_ex(3, &x, &y, &z) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(x); + convert_to_double_ex(y); + convert_to_double_ex(z); + + swf_translate((*x)->value.dval, (*y)->value.dval, (*z)->value.dval); +} + +PHP_FUNCTION(swf_rotate) +{ + zval **angle, **axis; + if (ARG_COUNT(ht) != 2 || + zend_get_parameters_ex(2, &angle, &axis) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_double_ex(angle); + convert_to_string_ex(axis); + + swf_rotate((*angle)->value.dval, (*axis)->value.str.val); +} + +PHP_FUNCTION(swf_posround) +{ + zval **doit; + if (ARG_COUNT(ht) != 1 || + zend_get_parameters_ex(1, &doit) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long_ex(doit); + + swf_posround((*doit)->value.lval); +} + +#endif |