[php-maint] Bug#377288: Please enable the php4-ming module

Stuart Anderson anderson at netsweng.com
Fri Jul 7 22:08:12 UTC 2006


Package: php4
Version: 4:4.4.2-1.1
Severity: wishlist
Tags: patch


Ming, the SWFoutput library has just re-entered Debian as libming0 and friends.
Please enable the ming module in the php4 packages. The attached patch both
enables the module, and updates the extensions code to match the current
libming API.

-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (910, 'testing'), (750, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.10-1-686-smp
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)

Versions of packages php4 depends on:
ii  libapache-mod-php4           4:4.4.2-1.1 server-side, HTML-embedded scripti
ii  libapache2-mod-php4          4:4.4.2-1.1 server-side, HTML-embedded scripti
ii  php4-cgi                     4:4.4.2-1.2 server-side, HTML-embedded scripti
ii  php4-common                  4:4.4.2-1.2 Common files for packages built fr

php4 recommends no packages.

-- debconf information:
  php4/update_apache_php_ini: true
-------------- next part --------------
Index: debian/changelog
===================================================================
RCS file: /var/lib/cvs/php4-4.4/debian/changelog,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 changelog
*** debian/changelog	7 Jul 2006 14:43:40 -0000	1.1.1.1
--- debian/changelog	7 Jul 2006 15:45:54 -0000
***************
*** 1,3 ****
--- 1,9 ----
+ php4 (4:4.4.2-1.2) unstable; urgency=low
+ 
+   * Enable the php4-ming package 
+ 
+  -- Stuart R. Anderson <anderson at netsweng.com>  Fri,  7 Jul 2006 11:45:38 -0400
+ 
  php4 (4:4.4.2-1.1) unstable; urgency=high
  
    * Non-maintainer upload.
Index: debian/control
===================================================================
RCS file: /var/lib/cvs/php4-4.4/debian/control,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 control
*** debian/control	7 Jul 2006 14:43:40 -0000	1.1.1.1
--- debian/control	7 Jul 2006 15:22:44 -0000
***************
*** 3,9 ****
  Priority: optional
  Maintainer: Debian PHP Maintainers <pkg-php-maint at lists.alioth.debian.org>
  Uploaders: Adam Conrad <adconrad at 0c3.net>, Steve Langasek <vorlon at debian.org>, Jeroen van Wolffelaar <jeroen at wolffelaar.nl>
! Build-Depends: apache-dev (>= 1.3.23), apache2-prefork-dev (>= 2.0.53-3), autoconf, automake1.4, bison, chrpath, debhelper (>= 3), flex (>= 2.5.4), freetds-dev, po-debconf, libbz2-dev (>= 1.0.0), libcurl3-openssl-dev | libcurl3-dev, libdb4.3-dev, libexpat1-dev (>= 1.95.2-2.1), libfreetype6-dev, libgcrypt11-dev, libgd2-xpm-dev (>= 2.0.28-3), libgdbm-dev, libjpeg62-dev, libkrb5-dev, libldap2-dev, libmcal0-dev (>= 0.6), libmhash-dev (>= 0.8.8), libmysqlclient15-dev | libmysqlclient12-dev, libncurses5-dev, libpam0g-dev, libpcre3-dev (>= 4.3-1), libpng12-dev, libpq-dev | postgresql-dev, librecode-dev, libsablot0-dev (>= 0.96), libsnmp9-dev | libsnmp-dev, libssl-dev (>= 0.9.6), libt1-dev, libtool (>= 1.4.2-4), libwrap0-dev, libxmltok1-dev, libxml2-dev (>= 2.4.14), libxslt1-dev (>= 1.0.18), libzzip-dev, re2c, unixodbc-dev, zlib1g-dev (>= 1.0.9)
  Build-Conflicts: bind-dev
  Standards-Version: 3.6.2
  
--- 3,9 ----
  Priority: optional
  Maintainer: Debian PHP Maintainers <pkg-php-maint at lists.alioth.debian.org>
  Uploaders: Adam Conrad <adconrad at 0c3.net>, Steve Langasek <vorlon at debian.org>, Jeroen van Wolffelaar <jeroen at wolffelaar.nl>
! Build-Depends: apache-dev (>= 1.3.23), apache2-prefork-dev (>= 2.0.53-3), autoconf, automake1.4, bison, chrpath, debhelper (>= 3), flex (>= 2.5.4), freetds-dev, po-debconf, libbz2-dev (>= 1.0.0), libcurl3-openssl-dev | libcurl3-dev, libdb4.3-dev, libexpat1-dev (>= 1.95.2-2.1), libfreetype6-dev, libgcrypt11-dev, libgd2-xpm-dev (>= 2.0.28-3), libgdbm-dev, libjpeg62-dev, libkrb5-dev, libldap2-dev, libmcal0-dev (>= 0.6), libmhash-dev (>= 0.8.8), libming-dev (>=0.3.0-6), libmysqlclient15-dev | libmysqlclient12-dev, libncurses5-dev, libpam0g-dev, libpcre3-dev (>= 4.3-1), libpng12-dev, libpq-dev | postgresql-dev, librecode-dev, libsablot0-dev (>= 0.96), libsnmp9-dev | libsnmp-dev, libssl-dev (>= 0.9.6), libt1-dev, libtool (>= 1.4.2-4), libwrap0-dev, libxmltok1-dev, libxml2-dev (>= 2.4.14), libxslt1-dev (>= 1.0.18), libzzip-dev, re2c, unixodbc-dev, zlib1g-dev (>= 1.0.9)
  Build-Conflicts: bind-dev
  Standards-Version: 3.6.2
  
***************
*** 223,228 ****
--- 223,239 ----
   in. The goal of the language is to allow web developers to write
   dynamically generated pages quickly.
  
+ Package: php4-ming
+ Architecture: any
+ Depends: ${shlibs:Depends}, ${misc:Depends}, ${php:Depends}, php4-common (= ${Source-Version})
+ Description: MING module for php4
+  This package provides a module for ming functions in PHP scripts.
+  .
+  PHP4 is an HTML-embedded scripting language. Much of its syntax is borrowed
+  from C, Java and Perl with a couple of unique PHP-specific features thrown
+  in. The goal of the language is to allow web developers to write
+  dynamically generated pages quickly.
+ 
  Package: php4-mysql
  Architecture: any
  Depends: ${shlibs:Depends}, ${misc:Depends}, ${php:Depends}, php4-common (= ${Source-Version})
Index: debian/modulelist
===================================================================
RCS file: /var/lib/cvs/php4-4.4/debian/modulelist,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 modulelist
*** debian/modulelist	7 Jul 2006 14:43:40 -0000	1.1.1.1
--- debian/modulelist	7 Jul 2006 19:58:22 -0000
***************
*** 4,9 ****
--- 4,10 ----
  ldap LDAP
  mcal MCAL
  mhash MHASH
+ ming MING
  mysql MySQL
  odbc ODBC
  pgsql PostgreSQL
Index: debian/rules
===================================================================
RCS file: /var/lib/cvs/php4-4.4/debian/rules,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 rules
*** debian/rules	7 Jul 2006 14:43:37 -0000	1.1.1.1
--- debian/rules	7 Jul 2006 15:24:39 -0000
***************
*** 193,198 ****
--- 193,199 ----
  		--with-ldap=shared,/usr \
  		--with-mcal=shared,/usr \
  		--with-mhash=shared,/usr \
+ 		--with-ming=shared,/usr \
  		--with-mysql=shared,/usr \
  		--with-unixODBC=shared,/usr \
  		--with-recode=shared,/usr \
Index: ext/ming/config.m4
===================================================================
RCS file: /var/lib/cvs/php4-4.4/ext/ming/config.m4,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 config.m4
*** ext/ming/config.m4	7 Jul 2006 14:33:58 -0000	1.1.1.1
--- ext/ming/config.m4	7 Jul 2006 19:58:34 -0000
***************
*** 66,72 ****
  yes
  #endif
    ], [
-     AC_DEFINE(HAVE_NEW_MING,  1, [ ]) 
      dnl FIXME: This is now unconditional..better check coming later.
      AC_DEFINE(HAVE_MING_ZLIB, 1, [ ])
    ])
--- 66,71 ----
Index: ext/ming/ming.c
===================================================================
RCS file: /var/lib/cvs/php4-4.4/ext/ming/ming.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 ming.c
*** ext/ming/ming.c	7 Jul 2006 14:34:01 -0000	1.1.1.1
--- ext/ming/ming.c	7 Jul 2006 19:52:02 -0000
***************
*** 17,23 ****
    +----------------------------------------------------------------------+
  */
  
! /* $Id: ming.c,v 1.42.2.13.2.1 2006/01/01 13:46:54 sniper Exp $ */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
--- 17,23 ----
    +----------------------------------------------------------------------+
  */
  
! /* $Id: ming.c,v 1.2 2006/01/30 19:30:51 anderson Exp $ */
  
  #ifdef HAVE_CONFIG_H
  #include "config.h"
***************
*** 48,53 ****
--- 48,55 ----
  	PHP_FALIAS(ming_setscale,           ming_setScale,           NULL)
  	PHP_FALIAS(ming_useswfversion,      ming_useSWFVersion,      NULL)
  	PHP_FALIAS(swfbutton_keypress,      swfbutton_keypress,      NULL)
+ 	PHP_FALIAS(ming_useconstants,       ming_useConstants,       NULL)
+ 	PHP_FALIAS(ming_setswfcompression,  ming_setSWFCompression,  NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 57,62 ****
--- 59,65 ----
  static SWFBitmap getBitmap(zval *id TSRMLS_DC);
  static SWFShape getShape(zval *id TSRMLS_DC);
  static SWFFont getFont(zval *id TSRMLS_DC);
+ static SWFFontCharacter getFontCharacter(zval *id TSRMLS_DC);
  static SWFText getText(zval *id TSRMLS_DC);
  static SWFTextField getTextField(zval *id TSRMLS_DC);
  static SWFDisplayItem getDisplayItem(zval *id TSRMLS_DC);
***************
*** 64,69 ****
--- 67,90 ----
  static SWFAction getAction(zval *id TSRMLS_DC);
  static SWFMorph getMorph(zval *id TSRMLS_DC);
  static SWFMovieClip getSprite(zval *id TSRMLS_DC);
+ static SWFSound getSound(zval *id TSRMLS_DC);
+ static SWFSoundInstance getSoundInstance(zval *id TSRMLS_DC);
+ static SWFVideoStream getVideoStream(zval *id TSRMLS_DC);
+ static SWFPrebuiltClip getPrebuiltClip(zval *id TSRMLS_DC);
+ 
+ 
+ /* {{{ set output compression */
+ PHP_FUNCTION(ming_setSWFCompression)
+ {
+ 	    zval **num;
+ 	    if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE)
+ 	        WRONG_PARAM_COUNT;
+ 
+ 	    convert_to_long_ex(num);
+ 	    Ming_setSWFCompression(Z_LVAL_PP(num));
+ }
+ /* }}} */
+ 
  
  /* {{{ proto void ming_setcubicthreshold (int threshold)
     Set cubic threshold (?) */
***************
*** 107,118 ****
--- 128,154 ----
  }
  /* }}} */
  
+ /* {{{ proto void ming_useconstants(int use)
+  *     Use constant pool (?) */
+ PHP_FUNCTION(ming_useConstants)
+ {
+     zval **num;
+ 
+     if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) {
+ 	    WRONG_PARAM_COUNT;
+ 	}
+     convert_to_long_ex(num);
+     Ming_useConstants(Z_LVAL_PP(num));
+ }
+ /* }}} */
+ 
  static int le_swfmoviep;
  static int le_swfshapep;
  static int le_swffillp;
  static int le_swfgradientp;
  static int le_swfbitmapp;
  static int le_swffontp;
+ static int le_swffontcharp;
  static int le_swftextp;
  static int le_swftextfieldp;
  static int le_swfdisplayitemp;
***************
*** 121,126 ****
--- 157,166 ----
  static int le_swfmorphp;
  static int le_swfspritep;
  static int le_swfinputp;
+ static int le_swfsoundp;
+ static int le_swfsoundinstancep;
+ static int le_swfvideostreamp;
+ static int le_swfprebuiltclipp;
  
  zend_class_entry movie_class_entry;
  zend_class_entry shape_class_entry;
***************
*** 128,133 ****
--- 168,174 ----
  zend_class_entry gradient_class_entry;
  zend_class_entry bitmap_class_entry;
  zend_class_entry font_class_entry;
+ zend_class_entry fontchar_class_entry;
  zend_class_entry text_class_entry;
  zend_class_entry textfield_class_entry;
  zend_class_entry displayitem_class_entry;
***************
*** 135,140 ****
--- 176,185 ----
  zend_class_entry action_class_entry;
  zend_class_entry morph_class_entry;
  zend_class_entry sprite_class_entry;
+ zend_class_entry sound_class_entry;
+ zend_class_entry soundinstance_class_entry;
+ zend_class_entry videostream_class_entry;
+ zend_class_entry prebuiltclip_class_entry;
  
  /* {{{ internal function SWFgetProperty
  */
***************
*** 177,182 ****
--- 222,229 ----
  		return (SWFCharacter)getShape(id TSRMLS_CC);
  	else if (Z_OBJCE_P(id) == &font_class_entry)
  		return (SWFCharacter)getFont(id TSRMLS_CC);
+ 	else if(Z_OBJCE_P(id) == &fontchar_class_entry)
+ 		return (SWFCharacter)getFontCharacter(id TSRMLS_CC);
  	else if (Z_OBJCE_P(id) == &text_class_entry)
  		return (SWFCharacter)getText(id TSRMLS_CC);
  	else if (Z_OBJCE_P(id) == &textfield_class_entry)
***************
*** 189,194 ****
--- 236,249 ----
  		return (SWFCharacter)getSprite(id TSRMLS_CC);
  	else if (Z_OBJCE_P(id) == &bitmap_class_entry)
  		return (SWFCharacter)getBitmap(id TSRMLS_CC);
+     else if(Z_OBJCE_P(id) == &sound_class_entry)
+ 	    return (SWFCharacter)getSound(id TSRMLS_CC);
+     else if(Z_OBJCE_P(id) == &videostream_class_entry)
+ 		return (SWFCharacter)getVideoStream(id TSRMLS_CC);
+     else if(Z_OBJCE_P(id) == &prebuiltclip_class_entry)
+ 		return (SWFCharacter)getPrebuiltClip(id TSRMLS_CC);
+ //    else if(Z_OBJCE_P(id) == &soundinstance_class_entry)
+ //        return (SWFCharacter)getSoundInstance(id TSRMLS_CC);
  	else
  		php_error_docref(NULL TSRMLS_CC, E_ERROR, "Called object is not an SWFCharacter");
  		return NULL;
***************
*** 274,279 ****
--- 329,511 ----
  /* }}} */
  /* }}} */
  
+ /* {{{ SWFVideoStream */
+ 
+ static zend_function_entry swfvideostream_functions[] = {
+ 	PHP_FALIAS(swfvideostream, 	swfvideostream_init,	NULL)
+ 	PHP_FALIAS(setdimension, swfvideostream_setdimension, NULL)
+ 	PHP_FALIAS(getnumframes, swfvideostream_getnumframes, NULL)
+ 	{ NULL, NULL, NULL }
+ };
+ 
+ /* {{{ proto class swfvideostream_init([file])
+    Returns a SWVideoStream object */
+ PHP_FUNCTION(swfvideostream_init)
+ {
+ 	zval **zfile = NULL;
+ 	SWFVideoStream stream;
+ 	SWFInput input;
+ 	int ret;
+ 
+ 	switch(ZEND_NUM_ARGS()) {
+ 		case 1:
+ 			if(zend_get_parameters_ex(1, &zfile) == FAILURE)
+ 				WRONG_PARAM_COUNT;
+ 	
+ 			if(Z_TYPE_PP(zfile) != IS_RESOURCE)
+   			{
+ 			    convert_to_string_ex(zfile);
+ 			    input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
+ 			    zend_list_addref(zend_list_insert(input, le_swfinputp));
+   			}
+   			else
+ 			    input = getInput(zfile TSRMLS_CC);
+ 		
+ 			stream = newSWFVideoStream_fromInput(input);
+ 			break;
+ 		case 0:
+ 			stream = newSWFVideoStream();
+ 			break;
+ 		default:
+ 			WRONG_PARAM_COUNT;
+ 			break;
+ 	}
+ 	
+ 	if(stream) {
+ 		ret = zend_list_insert(stream, le_swfvideostreamp);
+ 		object_init_ex(getThis(), &videostream_class_entry);
+ 		add_property_resource(getThis(), "videostream", ret);
+ 		zend_list_addref(ret);
+ 	}
+ 	
+ }	
+ 
+ static void destroy_SWFVideoStream_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
+ {
+   destroySWFVideoStream((SWFVideoStream)resource->ptr);
+ }
+ /* }}} */
+ 
+ /* {{{ internal function getVideoStream
+    Returns the SWFVideoStream object contained in zval *id */
+                                                                                                                                              
+ static SWFVideoStream getVideoStream(zval *id TSRMLS_DC)
+ {
+   void *stream = SWFgetProperty(id, "videostream", 11, le_swfvideostreamp TSRMLS_CC);
+                                                                                                                                              
+   if(!stream)
+     php_error(E_ERROR, "called object is not an SWFVideoStream!");
+                                                                                                                                              
+   return (SWFVideoStream)stream;
+ }
+ 
+ /* }}} */
+ 
+ /* {{{ setDimension */
+ 
+ PHP_FUNCTION(swfvideostream_setdimension)
+ {
+ 	zval **x, **y;
+ 	SWFVideoStream stream = getVideoStream(getThis() TSRMLS_CC);
+ 	if(!stream)
+ 		 php_error(E_ERROR, "getVideoSTream returned NULL");
+ 
+ 	if( ZEND_NUM_ARGS() != 2 
+ 			|| zend_get_parameters_ex(2, &x, &y) == FAILURE )
+ 		WRONG_PARAM_COUNT;
+ 
+ 	convert_to_long_ex(x);
+ 	convert_to_long_ex(y);
+ 
+ 	SWFVideoStream_setDimension(stream, Z_LVAL_PP(x), Z_LVAL_PP(y));
+ }
+ /* }}} */
+ 
+ /* {{{ getNumFrames */
+ PHP_FUNCTION(swfvideostream_getnumframes) 
+ {
+ 	if(ZEND_NUM_ARGS() != 0)
+ 		WRONG_PARAM_COUNT;
+ 
+ 	RETURN_LONG(SWFVideoStream_getNumFrames(getVideoStream(getThis() TSRMLS_CC)));
+ }
+ /* }}} */
+ /* }}} */
+ 
+ /* {{{ SWFPrebuiltClip */
+ static zend_function_entry swfprebuiltclip_functions[] = {
+ 	PHP_FALIAS(swfprebuiltclip, swfprebuiltclip_init, NULL)
+ 	{ NULL, NULL, NULL }
+ };
+ /* {{{ proto class swfprebuiltclip_init([file])
+     Returns a SWFPrebuiltClip object */
+ 
+ PHP_FUNCTION(swfprebuiltclip_init)
+ {
+ 	zval **zfile = NULL;
+ 	SWFPrebuiltClip clip;
+ 	SWFInput input;
+ 	int ret;
+ 
+ 	switch(ZEND_NUM_ARGS()) {
+ 		case 1:
+ 			if(zend_get_parameters_ex(1, &zfile) == FAILURE)
+ 				WRONG_PARAM_COUNT;
+ 	
+ 			if(Z_TYPE_PP(zfile) != IS_RESOURCE)
+    			{
+ 			    convert_to_string_ex(zfile);
+ 			    input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
+ 			    zend_list_addref(zend_list_insert(input, le_swfinputp));
+    			}
+    			else
+ 			    input = getInput(zfile TSRMLS_CC);
+ 		
+ 			clip = newSWFPrebuiltClip_fromInput(input);
+ 			break;
+ /* not sure whether this makes sense
+    there would have to be a function to add contents
+ 		case 0:
+ 			clip = newSWFPrebuiltClip();
+ 			break; */
+ 		default:
+ 			WRONG_PARAM_COUNT;
+ 			break;
+ 	}
+ 	
+ 	if(clip) {
+ 		ret = zend_list_insert(clip, le_swfprebuiltclipp);
+ 		object_init_ex(getThis(), &prebuiltclip_class_entry);
+ 		add_property_resource(getThis(), "prebuiltclip", ret);
+ 		zend_list_addref(ret);
+ 	}
+ }
+ /* }}} */
+ 
+ /* {{{ internal function destroy_SWFPrebuiltClip */
+ static void destroy_SWFPrebuiltClip_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
+ {
+   destroySWFPrebuiltClip((SWFPrebuiltClip)resource->ptr);
+ }
+ /* }}} */
+ 
+ /* {{{ internal function getPrebuiltClip
+    Returns the SWFPrebuiltClip object contained in zval *id */
+                                                                                                                                              
+ static SWFPrebuiltClip getPrebuiltClip(zval *id TSRMLS_DC)
+ {
+   void *clip = SWFgetProperty(id, "prebuiltclip", 12, le_swfprebuiltclipp TSRMLS_CC);
+                                                                      
+   if(!clip)
+     php_error(E_ERROR, "called object is not an SWFPrebuiltClip!");
+                                                                                                                                              
+   return (SWFPrebuiltClip)clip;
+ }
+ 
+ /* }}} */
+ /* }}} */			
+ 
+ 
  /* {{{ SWFBitmap 
  */
  static zend_function_entry swfbitmap_functions[] = {
***************
*** 289,294 ****
--- 521,527 ----
  {
  	zval **zfile, **zmask = NULL;
  	SWFBitmap bitmap;
+ 	SWFJpegWithAlpha bitmap_alpha;
  	SWFInput input, maskinput;
  	int ret;
  
***************
*** 320,334 ****
  		} else {
  			maskinput = getInput(zmask TSRMLS_CC);
  		}
! 		bitmap = newSWFJpegWithAlpha_fromInput(input, maskinput);
  	} else {
  		bitmap = newSWFBitmap_fromInput(input);
  	}
- 
- 	ret = zend_list_insert(bitmap, le_swfbitmapp);
- 	object_init_ex(getThis(), &bitmap_class_entry);
- 	add_property_resource(getThis(), "bitmap", ret);
- 	zend_list_addref(ret);
  }
  
  static void destroy_SWFBitmap_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
--- 553,574 ----
  		} else {
  			maskinput = getInput(zmask TSRMLS_CC);
  		}
! 		bitmap_alpha = newSWFJpegWithAlpha_fromInput(input, maskinput);
!         if(bitmap_alpha) {
! 	      ret = zend_list_insert(bitmap_alpha, le_swfbitmapp);
! 	      object_init_ex(getThis(), &bitmap_class_entry);
! 	      add_property_resource(getThis(), "bitmap", ret);
! 	      zend_list_addref(ret);
!        }
  	} else {
  		bitmap = newSWFBitmap_fromInput(input);
+         if(bitmap) {	
+ 	        ret = zend_list_insert(bitmap, le_swfbitmapp);
+ 	        object_init_ex(getThis(), &bitmap_class_entry);
+ 	        add_property_resource(getThis(), "bitmap", ret);
+ 	        zend_list_addref(ret);
+         }
  	}
  }
  
  static void destroy_SWFBitmap_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
***************
*** 354,359 ****
--- 594,602 ----
     Returns the width of this bitmap */
  PHP_FUNCTION(swfbitmap_getWidth)
  {
+ 	if(ZEND_NUM_ARGS() != 0) {
+ 	    WRONG_PARAM_COUNT;
+ 	}
  	RETURN_DOUBLE(SWFBitmap_getWidth(getBitmap(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 362,367 ****
--- 605,613 ----
     Returns the height of this bitmap */
  PHP_FUNCTION(swfbitmap_getHeight)
  {
+ 	if(ZEND_NUM_ARGS() != 0) {
+ 	    WRONG_PARAM_COUNT;
+ 	}
  	RETURN_DOUBLE(SWFBitmap_getHeight(getBitmap(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 377,383 ****
--- 623,631 ----
  	PHP_FALIAS(setdown,                swfbutton_setDown,         NULL)
  	PHP_FALIAS(setaction,              swfbutton_setAction,       NULL)
  	PHP_FALIAS(addshape,               swfbutton_addShape,        NULL)
+ 	PHP_FALIAS(setmenu,                swfbutton_setMenu,         NULL)
  	PHP_FALIAS(addaction,              swfbutton_addAction,       NULL)
+ 	PHP_FALIAS(addsound,               swfbutton_addSound,        NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 484,490 ****
  }
  /* }}} */
  
! /* {{{ proto void swfbutton_addShape(object SWFCharacter, int flags)
     Sets the character to display for the condition described in flags */
  PHP_FUNCTION(swfbutton_addShape)
  {
--- 732,738 ----
  }
  /* }}} */
  
! /* {{{ proto void swfbutton_addShape(SWFCharacter character, int flags)
     Sets the character to display for the condition described in flags */
  PHP_FUNCTION(swfbutton_addShape)
  {
***************
*** 503,508 ****
--- 751,772 ----
  }
  /* }}} */
  
+ /* {{{ proto void swfbutton_setMenu(int flag)
+ 	enable track as menu button behaviour */
+ PHP_FUNCTION(swfbutton_setMenu)
+ {
+ 	zval **zflag;
+ 	SWFButton button = getButton(getThis() TSRMLS_CC);
+ 	if(ZEND_NUM_ARGS() != 1 ||
+ 	  zend_get_parameters_ex(1, &zflag) == FAILURE) {
+ 		WRONG_PARAM_COUNT;	
+ 	}
+ 	
+ 	convert_to_long_ex(zflag);
+ 	SWFButton_setMenu(button, Z_LVAL_PP(zflag));
+ }
+ /* }}} */
+ 
  /* {{{ proto void swfbutton_setAction(object SWFAction)
     Sets the action to perform when button is pressed */
  PHP_FUNCTION(swfbutton_setAction)
***************
*** 540,545 ****
--- 804,839 ----
  }
  /* }}} */
  
+ /* {{{ proto SWFSoundInstance * swfbutton_addASound(SWFSound sound, int flags)
+    associates a sound with a button transition
+ 	NOTE: the transitions are all wrong _UP, _OVER, _DOWN _HIT  */
+ PHP_FUNCTION(swfbutton_addSound)
+ {
+   zval **zsound, **flags;
+   SWFButton button = getButton(getThis() TSRMLS_CC);
+   SWFSound sound;
+   SWFSoundInstance item;
+   int ret;
+ 
+   if(ZEND_NUM_ARGS() != 2 ||
+      zend_get_parameters_ex(2, &zsound, &flags) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_object_ex(zsound);
+   sound = getSound(*zsound TSRMLS_CC);
+   convert_to_long_ex(flags);
+   item = SWFButton_addSound(button, sound, Z_LVAL_PP(flags));
+ 
+   if(item != NULL) {
+     /* try and create a soundinstance object */
+     ret = zend_list_insert(item, le_swfsoundinstancep);
+     object_init_ex(return_value, &soundinstance_class_entry);
+     add_property_resource(return_value, "soundinstance", ret);
+   }
+ }
+ /* }}} */
+ 
  /* {{{ proto int swfbutton_keypress(string str)
     Returns the action flag for keyPress(char) */
  PHP_FUNCTION(swfbutton_keypress)
***************
*** 583,588 ****
--- 877,892 ----
  	PHP_FALIAS(multcolor,    swfdisplayitem_multColor,   NULL)
  	PHP_FALIAS(setname,      swfdisplayitem_setName,     NULL)
  	PHP_FALIAS(addaction,    swfdisplayitem_addAction,   NULL)
+     PHP_FALIAS(remove,       swfdisplayitem_remove,      NULL)
+     PHP_FALIAS(setmasklevel, swfdisplayitem_setMaskLevel,NULL)
+     PHP_FALIAS(endmask,      swfdisplayitem_endMask,     NULL)
+     PHP_FALIAS(get_x,        swfdisplayitem_getX,        NULL)
+ 	PHP_FALIAS(get_y,        swfdisplayitem_getY,        NULL)
+ 	PHP_FALIAS(get_xscale,   swfdisplayitem_getXScale,   NULL)
+ 	PHP_FALIAS(get_yscale,   swfdisplayitem_getYScale,   NULL)
+ 	PHP_FALIAS(get_xskew,    swfdisplayitem_getXSkew,    NULL)
+ 	PHP_FALIAS(get_yskew,    swfdisplayitem_getYSkew,    NULL)
+ 	PHP_FALIAS(get_rot,      swfdisplayitem_getRot,      NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 781,787 ****
  	convert_to_double_ex(y);
  
  	SWFDisplayItem_setMatrix( getDisplayItem(getThis() TSRMLS_CC), 
! 		FLOAT_Z_DVAL_PP(a), FLOAT_Z_DVAL_PP(b), FLOAT_Z_DVAL_PP(c), FLOAT_Z_DVAL_PP(d), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y)
  	);
  }
  /* }}} */
--- 1085,1092 ----
  	convert_to_double_ex(y);
  
  	SWFDisplayItem_setMatrix( getDisplayItem(getThis() TSRMLS_CC), 
! 		FLOAT_Z_DVAL_PP(a), FLOAT_Z_DVAL_PP(b), FLOAT_Z_DVAL_PP(c),
! 		FLOAT_Z_DVAL_PP(d), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y)
  	);
  }
  /* }}} */
***************
*** 841,847 ****
  	convert_to_long_ex(g);
  	convert_to_long_ex(b);
  
! 	SWFDisplayItem_setColorAdd(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), a);
  }
  /* }}} */
  
--- 1146,1153 ----
  	convert_to_long_ex(g);
  	convert_to_long_ex(b);
  
! 	SWFDisplayItem_setColorAdd(getDisplayItem(getThis() TSRMLS_CC),
! 			Z_LVAL_PP(r), Z_LVAL_PP(g), Z_LVAL_PP(b), a);
  }
  /* }}} */
  
***************
*** 870,876 ****
  	convert_to_double_ex(g);
  	convert_to_double_ex(b);
  
! 	SWFDisplayItem_setColorMult(getDisplayItem(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(r), FLOAT_Z_DVAL_PP(g), FLOAT_Z_DVAL_PP(b), a);
  }
  /* }}} */
  
--- 1176,1183 ----
  	convert_to_double_ex(g);
  	convert_to_double_ex(b);
  
! 	SWFDisplayItem_setColorMult(getDisplayItem(getThis() TSRMLS_CC),
! 			FLOAT_Z_DVAL_PP(r), FLOAT_Z_DVAL_PP(g), FLOAT_Z_DVAL_PP(b), a);
  }
  /* }}} */
  
***************
*** 908,913 ****
--- 1215,1369 ----
  	SWFDisplayItem_addAction(item, action, Z_LVAL_PP(flags));
  }
  /* }}} */
+ 
+ /* {{{ swfdisplayitem_remove */
+ PHP_FUNCTION(swfdisplayitem_remove)
+ {
+   zval **zchar;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   SWFDisplayItem_remove(item);
+ }
+ /* }}} */
+ 
+ /* {{{ proto void swfdisplayitem_setMaskLevel(int level)
+    defines a MASK layer at level */
+ PHP_FUNCTION(swfdisplayitem_setMaskLevel)
+ {
+   zval **level;
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &level) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_long_ex(level);
+   SWFDisplayItem_setMaskLevel(getDisplayItem(getThis() TSRMLS_CC), Z_LVAL_PP(level));
+ }
+ /* }}} */
+ 
+ /* {{{ proto void swfdisplayitem_endMask()
+    another way of defining a MASK layer */
+ PHP_FUNCTION(swfdisplayitem_endMask)
+ {
+   zval **zchar;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   SWFDisplayItem_endMask(item);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getX */
+ PHP_FUNCTION(swfdisplayitem_getX)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_x(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getY */
+ PHP_FUNCTION(swfdisplayitem_getY)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_y(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getXScale */
+ PHP_FUNCTION(swfdisplayitem_getXScale)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_xScale(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getYScale */
+ PHP_FUNCTION(swfdisplayitem_getYScale)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_yScale(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getXSkew */
+ PHP_FUNCTION(swfdisplayitem_getXSkew)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_xSkew(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getYSkew */
+ PHP_FUNCTION(swfdisplayitem_getYSkew)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_ySkew(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
+ 
+ /* {{{ swfdisplayitem_getRot */
+ PHP_FUNCTION(swfdisplayitem_getRot)
+ {
+   float ret;
+   SWFDisplayItem item = getDisplayItem(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   ret = SWFDisplayItem_get_rot(item);
+   RETURN_DOUBLE(ret);
+ }
+ /* }}} */
  /* }}} */
  
  /* {{{ SWFFill
***************
*** 1035,1048 ****
--- 1491,1564 ----
  /* }}} */
  /* }}} */
  
+ /* {{{ SWFFontCharacter */
+ static zend_function_entry swffontchar_functions[] = {
+   PHP_FALIAS(addchars,         swffontchar_addChars,      NULL)
+   PHP_FALIAS(addutf8chars,     swffontchar_addUTF8Chars,  NULL)
+   { NULL, NULL, NULL }
+ };
+ 
+ /* {{{ internal function SWFText getFont(zval *id)
+    Returns the Font object in zval *id */
+ static
+ SWFFontCharacter getFontCharacter(zval *id TSRMLS_DC)
+ {
+   void *font = SWFgetProperty(id, "fontcharacter", 13, le_swffontcharp TSRMLS_CC);
+ 
+   if(!font) {
+     php_error(E_ERROR, "called object is not an SWFFontCharacter!");
+   }
+ 
+   return (SWFFontCharacter)font;
+ }
+ 
+ static void destroy_SWFFontCharacter_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
+ {
+   destroySWFBlock((SWFBlock)resource->ptr);
+ }
+ 
+ /* {{{ proto void swffontchar_addChars(string)
+    adds characters to a font for exporting font */
+ PHP_FUNCTION(swffontchar_addChars)
+ {
+   zval **zstring;
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_string_ex(zstring);
+   SWFFontCharacter_addChars(getFontCharacter(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
+ 
+ }
+ /* }}} */
+ 
+ /* {{{ proto void swffontchar_addChars(string)
+    adds characters to a font for exporting font */
+ PHP_FUNCTION(swffontchar_addUTF8Chars)
+ {
+   zval **zstring;
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_string_ex(zstring);
+   SWFFontCharacter_addUTF8Chars(getFontCharacter(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
+ }
+ /* }}} */
+ /* }}} */
+ 
  /* {{{ SWFFont
  */
  static zend_function_entry swffont_functions[] = {
  	PHP_FALIAS(swffont,          swffont_init,              NULL)
  	PHP_FALIAS(getwidth,         swffont_getWidth,          NULL)
+ 	PHP_FALIAS(getutf8width,     swffont_getUTF8Width,      NULL)
  	PHP_FALIAS(getascent,        swffont_getAscent,         NULL)
  	PHP_FALIAS(getdescent,       swffont_getDescent,        NULL)
  	PHP_FALIAS(getleading,       swffont_getLeading,        NULL)
+ 	PHP_FALIAS(getshape,         swffont_getShape,          NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 1123,1132 ****
--- 1639,1668 ----
  }
  /* }}} */
  
+ /* {{{ proto int swffont_getUTF8Width(string)
+    Calculates the width of the given string in this font at full height */
+ PHP_FUNCTION(swffont_getUTF8Width)
+ {
+   zval **zstring;
+   float width;
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_string_ex(zstring);
+   width = SWFFont_getUTF8StringWidth(getFont(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
+   RETURN_DOUBLE(width);
+ }
+ /* }}} */
+ 
  /* {{{ proto float swffont_getAscent(void)
     Returns the ascent of the font, or 0 if not available */
  PHP_FUNCTION(swffont_getAscent)
  {
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
  	RETURN_DOUBLE(SWFFont_getAscent(getFont(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 1135,1140 ****
--- 1671,1679 ----
     Returns the descent of the font, or 0 if not available */
  PHP_FUNCTION(swffont_getDescent)
  {
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
  	RETURN_DOUBLE(SWFFont_getDescent(getFont(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 1143,1151 ****
--- 1682,1711 ----
     Returns the leading of the font, or 0 if not available */
  PHP_FUNCTION(swffont_getLeading)
  {
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
  	RETURN_DOUBLE(SWFFont_getLeading(getFont(getThis() TSRMLS_CC)));
  }
  /* }}} */
+ 
+ /* {{{ proto char *swffont_getShape(code)
+    Returns the glyph shape of a char as a text string */
+ PHP_FUNCTION(swffont_getShape)
+ {
+   zval **zcode;
+   char *result;
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zcode) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_long_ex(zcode);
+   result = SWFFont_getShape(getFont(getThis() TSRMLS_CC), Z_LVAL_PP(zcode));
+   RETVAL_STRING(result, 1);
+   free(result);
+ }
+ /* }}} */
  /* }}} */
  
  /* {{{ SWFGradient
***************
*** 1291,1302 ****
--- 1851,2015 ----
  /* }}} */
  /* }}} */
  
+ /* {{{ SWFSound
+ */
+ static zend_function_entry swfsound_functions[] = {
+   PHP_FALIAS(swfsound,         swfsound_init,             NULL)
+   { NULL, NULL, NULL }
+ };
+ 
+ /* {{{ internal function SWFSound getSound(zval *id)
+    Returns the Sound object in zval *id */
+ 
+ SWFSound getSound(zval *id TSRMLS_DC)
+ {
+   void *sound = SWFgetProperty(id, "sound", 5, le_swfsoundp TSRMLS_CC);
+ 
+   if(!sound) {
+     php_error(E_ERROR, "called object is not an SWFSound!");
+   }
+   return (SWFSound)sound;
+ }
+ /* }}} */
+ 
+ /* {{{ proto class swfsound_init(string filename, int flags)
+    Returns a new SWFSound object from given file */
+ PHP_FUNCTION(swfsound_init)
+ {
+   FILE *file;
+   zval **zfile, **zflags;
+   SWFSound sound;
+   SWFInput input;
+   int flags;
+   int ret;
+ 
+   if(ZEND_NUM_ARGS() == 1) {
+     if(zend_get_parameters_ex(1, &zfile) == FAILURE) {
+       WRONG_PARAM_COUNT;
+ 	}
+     flags = 0;
+   } else if(ZEND_NUM_ARGS() == 2) {
+     if(zend_get_parameters_ex(2, &zfile, &zflags) == FAILURE) {
+       WRONG_PARAM_COUNT;
+ 	}
+     convert_to_long_ex(zflags);
+     flags = Z_LVAL_PP(zflags);
+   } else {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   if(Z_TYPE_PP(zfile) != IS_RESOURCE) {
+     convert_to_string_ex(zfile);
+     input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
+     zend_list_addref(zend_list_insert(input, le_swfinputp));
+   } else {
+     input = getInput(zfile TSRMLS_CC);
+   }
+ 
+   sound = newSWFSound_fromInput(input, flags);
+ 
+   ret = zend_list_insert(sound, le_swfsoundp);
+ 
+   object_init_ex(getThis(), &sound_class_entry);
+   add_property_resource(getThis(), "sound", ret);
+   zend_list_addref(ret);
+ }
+ 
+ static void destroy_SWFSound_resource(zend_rsrc_list_entry *resource TSRMLS_DC)
+ {
+   destroySWFBlock((SWFBlock)resource->ptr);
+ }
+ /* }}} */
+ /* }}} */
+ 
+ /* {{{ SWFSoundInstance
+ */
+ static zend_function_entry swfsoundinstance_functions[] = {
+   PHP_FALIAS(nomultiple,     swfsoundinstance_noMultiple,    NULL)
+   PHP_FALIAS(loopinpoint,    swfsoundinstance_loopInPoint,   NULL)
+   PHP_FALIAS(loopoutpoint,   swfsoundinstance_loopOutPoint,  NULL)
+   PHP_FALIAS(loopcount,      swfsoundinstance_loopCount,     NULL)
+   { NULL, NULL, NULL }
+ };
+ 
+ /* {{{ internal function SWFSoundInstance getSoundInstance(zval *id)
+    Returns the SoundInstance object in zval *id */
+ SWFSoundInstance getSoundInstance(zval *id TSRMLS_DC)
+ {
+   void *inst = SWFgetProperty(id, "soundinstance", 13, le_swfsoundinstancep TSRMLS_CC);
+ 
+   if(!inst) {
+     php_error(E_ERROR, "called object is not an SWFSoundInstance!");
+   }
+   return (SWFSoundInstance)inst;
+ }
+ /* }}} */
+ 
+ /* {{{ swfsoundinstance_nomultiple */
+ PHP_FUNCTION(swfsoundinstance_noMultiple)
+ {
+   SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
+   SWFSoundInstance_setNoMultiple(inst);
+ }
+ /* }}} */
+ 
+ /* {{{ swfsoundinstance_loopinpoint(point) */
+ PHP_FUNCTION(swfsoundinstance_loopInPoint)
+ {
+   zval **zpoint;
+   SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
+ 
+   if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &zpoint) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_long_ex(zpoint);
+   SWFSoundInstance_setLoopInPoint(inst, Z_LVAL_PP(zpoint));
+ }
+ /* }}} */
+ 
+ /* {{{ swfsoundinstance_loopoutpoint(point) */
+ PHP_FUNCTION(swfsoundinstance_loopOutPoint)
+ {
+   zval **zpoint;
+   SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
+ 
+   if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &zpoint) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_long_ex(zpoint);
+   SWFSoundInstance_setLoopOutPoint(inst, Z_LVAL_PP(zpoint));
+ }
+ /* }}} */
+ 
+ /* {{{ swfsoundinstance_loopcount(point) */
+ PHP_FUNCTION(swfsoundinstance_loopCount)
+ {
+   zval **zcount;
+   SWFSoundInstance inst = getSoundInstance(getThis() TSRMLS_CC);
+ 
+   if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &zcount) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_long_ex(zcount);
+   SWFSoundInstance_setLoopCount(inst, Z_LVAL_PP(zcount));
+ }
+ /* }}} */
+ /* }}} */
+ 
  /* {{{ SWFMovie
  */
  static zend_function_entry swfmovie_functions[] = {
  	PHP_FALIAS(swfmovie,          swfmovie_init,              NULL)
  	PHP_FALIAS(nextframe,         swfmovie_nextFrame,         NULL)
  	PHP_FALIAS(labelframe,        swfmovie_labelFrame,        NULL)
+ 	PHP_FALIAS(namedanchor,       swfmovie_namedAnchor,       NULL)
  	PHP_FALIAS(add,               swfmovie_add,               NULL)
  	PHP_FALIAS(remove,            swfmovie_remove,            NULL)
  	PHP_FALIAS(output,            swfmovie_output,            NULL)
***************
*** 1306,1314 ****
  	PHP_FALIAS(setrate,           swfmovie_setRate,           NULL)
  	PHP_FALIAS(setdimension,      swfmovie_setDimension,      NULL)
  	PHP_FALIAS(setframes,         swfmovie_setFrames,         NULL)
- #ifdef HAVE_NEW_MING
  	PHP_FALIAS(streammp3,         swfmovie_streamMp3,         NULL)
! #endif
  	{ NULL, NULL, NULL }
  };
  
--- 2019,2032 ----
  	PHP_FALIAS(setrate,           swfmovie_setRate,           NULL)
  	PHP_FALIAS(setdimension,      swfmovie_setDimension,      NULL)
  	PHP_FALIAS(setframes,         swfmovie_setFrames,         NULL)
  	PHP_FALIAS(streammp3,         swfmovie_streamMp3,         NULL)
! 	PHP_FALIAS(addexport,         swfmovie_addExport,         NULL)
! 	PHP_FALIAS(writeexports,      swfmovie_writeExports,      NULL)
! 	PHP_FALIAS(startsound,        swfmovie_startSound,        NULL)
! 	PHP_FALIAS(stopsound,         swfmovie_stopSound,         NULL)
! 	PHP_FALIAS(importchar,        swfmovie_importChar,        NULL)
! 	PHP_FALIAS(importfont,        swfmovie_importFont,        NULL)
! 	PHP_FALIAS(addfont,           swfmovie_addFont,           NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 1325,1333 ****
  			WRONG_PARAM_COUNT;
  		}
  		convert_to_long_ex(version);
! 		movie = newSWFMovie(Z_LVAL_PP(version));
  	} else {
! 		movie = newSWFMovie(4); /* default version 4 */
  	}
  	
  	ret = zend_list_insert(movie, le_swfmoviep);
--- 2043,2051 ----
  			WRONG_PARAM_COUNT;
  		}
  		convert_to_long_ex(version);
! 		movie = newSWFMovieWithVersion(Z_LVAL_PP(version));
  	} else {
! 		movie = newSWFMovie(); /* default version 4 */
  	}
  	
  	ret = zend_list_insert(movie, le_swfmoviep);
***************
*** 1356,1361 ****
--- 2074,2160 ----
  }
  /* }}} */
  
+ /* {{{ proto void swfmovie_importChar(xxx, xxx)
+ */
+ PHP_FUNCTION(swfmovie_importChar)
+ {
+ 	SWFMovie movie;
+ 	SWFCharacter res;
+ 	int ret;
+ 	zval **libswf, **name;
+ 
+ 	if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &libswf, &name) == FAILURE) {
+ 		WRONG_PARAM_COUNT;
+ 	}
+ 	convert_to_string_ex(libswf);
+ 	convert_to_string_ex(name);
+ 	movie = getMovie(getThis() TSRMLS_CC);
+ 	res = SWFMovie_importCharacter(movie, Z_STRVAL_PP(libswf), Z_STRVAL_PP(name));
+ 
+ 	if(res != NULL) {
+ 		/* try and create a sprite object */
+     	ret = zend_list_insert(res, le_swfspritep);
+ 		object_init_ex(return_value, &sprite_class_entry);
+ 		add_property_resource(return_value, "sprite", ret);
+ 	}	
+ }
+ /* }}} */
+ 
+ /* {{{ proto void swfmovie_addFont(xxx)
+ */
+ PHP_FUNCTION(swfmovie_addFont)
+ {
+ 	SWFMovie movie;
+ 	SWFFontCharacter res;
+ 	int ret;
+ 	SWFFont font;
+ 	zval **zfont;
+ 
+ 	if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfont) == FAILURE) {
+ 	    WRONG_PARAM_COUNT;
+ 	}
+ 
+ 	convert_to_object_ex(zfont);
+ 
+ 	movie = getMovie(getThis() TSRMLS_CC);
+ 	font = getFont(*zfont TSRMLS_CC);
+ 	res = SWFMovie_addFont(movie, font);
+ 
+ 	if(res != NULL) {
+ 		/* try and create a fontchar object */
+     	ret = zend_list_insert(res, le_swffontcharp);
+ 		object_init_ex(return_value, &fontchar_class_entry);
+ 		add_property_resource(return_value, "fontcharacter", ret);
+ 	}	
+ }
+ /* }}} */
+ 
+ /* {{{ proto void swfmovie_importFont(xxx, xxx)
+ */
+ PHP_FUNCTION(swfmovie_importFont)
+ {
+ 	SWFMovie movie;
+ 	SWFFontCharacter res;
+ 	int ret;
+ 	zval **libswf, **name;
+ 
+ 	if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &libswf, &name) == FAILURE) {
+ 		WRONG_PARAM_COUNT;
+ 	}
+ 	convert_to_string_ex(libswf);
+ 	convert_to_string_ex(name);
+ 	movie = getMovie(getThis() TSRMLS_CC);
+ 	res = SWFMovie_importFont(movie, Z_STRVAL_PP(libswf), Z_STRVAL_PP(name));
+ 
+ 	if(res != NULL) {
+ 		/* try and create a fontchar object */
+     	ret = zend_list_insert(res, le_swffontcharp);
+ 		object_init_ex(return_value, &fontchar_class_entry);
+ 		add_property_resource(return_value, "fontcharacter", ret);
+ 	}	
+ }
+ /* }}} */
+ 
  /* {{{ proto void swfmovie_nextframe(void)  
  */
  PHP_FUNCTION(swfmovie_nextFrame)
***************
*** 1378,1383 ****
--- 2177,2198 ----
  }
  /* }}} */
  
+ /* {{{ swfmovie_namedanchor
+ */
+ PHP_FUNCTION(swfmovie_namedAnchor)
+ {
+   zval **label;
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &label) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+ 
+   convert_to_string_ex(label);
+ 
+   SWFMovie_namedAnchor(getMovie(getThis() TSRMLS_CC), Z_STRVAL_PP(label));
+ }
+ /* }}} */
+ 
  /* {{{ proto object swfmovie_add(object SWFBlock) 
  */
  PHP_FUNCTION(swfmovie_add)
***************
*** 1412,1418 ****
  }
  /* }}} */
  
! /* {{{ proto void swfmovie_labelframe(object SWFBlock)
  */
  PHP_FUNCTION(swfmovie_remove)
  {
--- 2227,2233 ----
  }
  /* }}} */
  
! /* {{{ proto void swfmovie_remove(object SWFBlock)
  */
  PHP_FUNCTION(swfmovie_remove)
  {
***************
*** 1444,1449 ****
--- 2259,2266 ----
  #ifdef HAVE_MING_ZLIB
  	zval **zlimit = NULL;
  	int limit = -1;
+ 	int oldval = INT_MIN;
+ 	long out;
  	int argc = ZEND_NUM_ARGS();
  
  	if(argc==0) {
***************
*** 1460,1473 ****
  			php_error(E_WARNING,"compression level must be within 0..9");
  			RETURN_FALSE;
  		}
  	}
  #endif
  
! #ifdef HAVE_NEW_MING
! 	RETURN_LONG(SWFMovie_output(movie, &phpByteOutputMethod, NULL, limit));
! #else
! 	RETURN_LONG(SWFMovie_output(movie, &phpByteOutputMethod, NULL));
! #endif
  }
  /* }}} */
  
--- 2277,2292 ----
  			php_error(E_WARNING,"compression level must be within 0..9");
  			RETURN_FALSE;
  		}
+ 
+ 		oldval = Ming_setSWFCompression(limit);
  	}
  #endif
  
! 	  out = SWFMovie_output(movie, &phpByteOutputMethod, NULL);
! 	    if ( oldval >= -1 && oldval <= 9)
! 	        Ming_setSWFCompression(oldval);
! 
!     RETURN_LONG(out);
  }
  /* }}} */
  
***************
*** 1486,1510 ****
  #ifdef HAVE_MING_ZLIB
  	zval **zlimit = NULL;
  	int limit = -1;
  #endif
  	SWFMovie movie = getMovie(getThis() TSRMLS_CC);
  	php_stream *what;
  
  	switch (ZEND_NUM_ARGS()) {
  	case 1:
! 		if (zend_get_parameters_ex(1, &x) == FAILURE)
  			WRONG_PARAM_COUNT;
  		break;
  	case 2:
  #ifdef HAVE_MING_ZLIB
! 		if (zend_get_parameters_ex(2, &x, &zlimit) == FAILURE)
  			WRONG_PARAM_COUNT;
  		convert_to_long_ex(zlimit);
  		limit = Z_LVAL_PP(zlimit);
  		if ((limit < 0) || (limit > 9)) {
  			php_error(E_WARNING,"compression level must be within 0..9");
  			RETURN_FALSE;
  		}
  #endif
  		break;
  	default:
--- 2305,2334 ----
  #ifdef HAVE_MING_ZLIB
  	zval **zlimit = NULL;
  	int limit = -1;
+ 	int oldval = INT_MIN;
+ 	long out;
  #endif
  	SWFMovie movie = getMovie(getThis() TSRMLS_CC);
  	php_stream *what;
  
  	switch (ZEND_NUM_ARGS()) {
  	case 1:
! 		if (zend_get_parameters_ex(1, &x) == FAILURE) {
  			WRONG_PARAM_COUNT;
+ 		}
  		break;
  	case 2:
  #ifdef HAVE_MING_ZLIB
! 		if (zend_get_parameters_ex(2, &x, &zlimit) == FAILURE) {
  			WRONG_PARAM_COUNT;
+ 		}
  		convert_to_long_ex(zlimit);
  		limit = Z_LVAL_PP(zlimit);
  		if ((limit < 0) || (limit > 9)) {
  			php_error(E_WARNING,"compression level must be within 0..9");
  			RETURN_FALSE;
  		}
+ 		oldval = Ming_setSWFCompression(limit);
  #endif
  		break;
  	default:
***************
*** 1512,1522 ****
  	}
  
  	ZEND_FETCH_RESOURCE(what, php_stream *, x, -1,"File-Handle",php_file_le_stream());
! #ifdef HAVE_NEW_MING
! 	RETURN_LONG(SWFMovie_output(movie, &phpStreamOutputMethod, what, limit));
! #else
! 	RETURN_LONG(SWFMovie_output(movie, &phpStreamOutputMethod, what));
! #endif
  }
  /* }}} */
  
--- 2336,2346 ----
  	}
  
  	ZEND_FETCH_RESOURCE(what, php_stream *, x, -1,"File-Handle",php_file_le_stream());
!     out = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, what);
!     if(oldval >= -1 && oldval <=9)
!        Ming_setSWFCompression(oldval);
! 
!     RETURN_LONG(out);
  }
  /* }}} */
  
***************
*** 1528,1533 ****
--- 2352,2358 ----
  #ifdef HAVE_MING_ZLIB
  	zval **zlimit = NULL;
  	int limit = -1;
+ 	int oldval = INT_MIN;
  #endif
  	long retval;
  	php_stream *stream;
***************
*** 1549,1554 ****
--- 2374,2380 ----
  			php_error(E_WARNING,"compression level must be within 0..9");
  			RETURN_FALSE;
  		}
+ 		oldval = Ming_setSWFCompression(limit);
  #endif
  		break;
  	default:
***************
*** 1557,1567 ****
  		  
  	if (Z_TYPE_PP(x) == IS_RESOURCE) {
  		ZEND_FETCH_RESOURCE(stream, php_stream *, x, -1,"File-Handle",php_file_le_stream());
! #ifdef HAVE_NEW_MING
! 		RETURN_LONG(SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, stream, limit));
! #else
! 		RETURN_LONG(SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, stream));
! #endif
  	}
  
  	convert_to_string_ex(x);
--- 2383,2395 ----
  		  
  	if (Z_TYPE_PP(x) == IS_RESOURCE) {
  		ZEND_FETCH_RESOURCE(stream, php_stream *, x, -1,"File-Handle",php_file_le_stream());
! 
!     	retval = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, (void *)stream);
!   
!     	if(oldval >= -1 && oldval <=9)
!               Ming_setSWFCompression(oldval);
!     
!     	RETURN_LONG(retval);
  	}
  
  	convert_to_string_ex(x);
***************
*** 1571,1581 ****
  		RETURN_FALSE;
  	}
  	
! #ifdef HAVE_NEW_MING
! 	retval = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, (void *)stream, limit);
! #else
! 	retval = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, (void *)stream);
! #endif
  	php_stream_close(stream);
  	RETURN_LONG(retval);
  }
--- 2399,2409 ----
  		RETURN_FALSE;
  	}
  	
!     retval = SWFMovie_output(getMovie(getThis() TSRMLS_CC), &phpStreamOutputMethod, (void *)stream);
!   
!     if(oldval >= -1 && oldval <=9)
!               Ming_setSWFCompression(oldval);
!     
  	php_stream_close(stream);
  	RETURN_LONG(retval);
  }
***************
*** 1639,1645 ****
  	zval **frames;
  	SWFMovie movie = getMovie(getThis() TSRMLS_CC);
  
! 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &frames) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  
--- 2467,2473 ----
  	zval **frames;
  	SWFMovie movie = getMovie(getThis() TSRMLS_CC);
  
! 	if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &frames) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  
***************
*** 1648,1667 ****
  }
  /* }}} */
  
- #ifdef HAVE_NEW_MING
  /* {{{ proto void swfmovie_streamMp3(mixed file)
     Sets sound stream of the SWF movie. The parameter can be stream or string. */
  PHP_FUNCTION(swfmovie_streamMp3)
  {
! 	zval **zfile;
  	SWFSoundStream sound;
  	SWFInput input;
  	SWFMovie movie = getMovie(getThis() TSRMLS_CC);
  
! 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zfile) == FAILURE) {
! 		WRONG_PARAM_COUNT;
! 	}
! 	
  	if (Z_TYPE_PP(zfile) != IS_RESOURCE) {
  		convert_to_string_ex(zfile);
  		input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
--- 2476,2508 ----
  }
  /* }}} */
  
  /* {{{ proto void swfmovie_streamMp3(mixed file)
     Sets sound stream of the SWF movie. The parameter can be stream or string. */
  PHP_FUNCTION(swfmovie_streamMp3)
  {
! 	zval **zfile, **zskip;
! 	float skip;
  	SWFSoundStream sound;
  	SWFInput input;
  	SWFMovie movie = getMovie(getThis() TSRMLS_CC);
  
!   switch (ZEND_NUM_ARGS()) {
!   case 1:
!   	if(zend_get_parameters_ex(1, &zfile) == FAILURE) {
! 		WRONG_PARAM_COUNT;
! 	}
! 	skip = 0;
! 	break;
!   case 2:
! 	if(zend_get_parameters_ex(2, &zfile, &zskip) == FAILURE) {
! 		 WRONG_PARAM_COUNT;
! 	}
! 	convert_to_double_ex(zskip);
! 	skip = Z_DVAL_PP(zskip);
! 	break;
!   default:
!     WRONG_PARAM_COUNT;
!   }
  	if (Z_TYPE_PP(zfile) != IS_RESOURCE) {
  		convert_to_string_ex(zfile);
  		input = newSWFInput_buffer(Z_STRVAL_PP(zfile), Z_STRLEN_PP(zfile));
***************
*** 1671,1680 ****
  	}
  	
  	sound = newSWFSoundStream_fromInput(input);
! 	SWFMovie_setSoundStream(movie, sound);
  }
  /* }}} */
- #endif
  /* }}} */
  
  /* {{{ SWFShape
--- 2512,2598 ----
  	}
  	
  	sound = newSWFSoundStream_fromInput(input);
! 	SWFMovie_setSoundStreamAt(movie, sound, skip);
! 	RETURN_LONG(SWFSoundStream_getFrames(sound));
! }
! /* }}} */
! 
! /* {{{ swfmovie_addexport
! */
! PHP_FUNCTION(swfmovie_addExport)
! {
!   zval **zchar, **zname;
!   int ret;
!   SWFBlock block;
!   SWFDisplayItem item;
!   char *name;
!   SWFMovie movie = getMovie(getThis() TSRMLS_CC);
! 
!   if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &zchar, &zname) == FAILURE) {
!     WRONG_PARAM_COUNT;
!   }
! 
!   convert_to_object_ex(zchar);
!   convert_to_string_ex(zname);
!   block = (SWFBlock)getCharacter(*zchar TSRMLS_CC);
!   SWFMovie_addExport(movie, block,  Z_STRVAL_PP(zname));
! }
! /* }}} */
! 
! /* {{{ swfmovie_writeexports
! */
! PHP_FUNCTION(swfmovie_writeExports)
! {
!   SWFMovie movie = getMovie(getThis() TSRMLS_CC);
! 
!   SWFMovie_writeExports(movie);
! }
! /* }}} */
! 
! /* {{{ SWFSoundInstance swfmovie_startsound
! */
! PHP_FUNCTION(swfmovie_startSound)
! {
!   zval **zsound;
!   int ret;
!   SWFSound sound;
!   SWFSoundInstance item;
!   SWFMovie movie = getMovie(getThis() TSRMLS_CC);
! 
!   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE) {
!     WRONG_PARAM_COUNT;
!   }
! 
!   convert_to_object_ex(zsound);
!   sound = (SWFSound)getSound(*zsound TSRMLS_CC);
!   item = SWFMovie_startSound(movie, sound);
! 
!   if(item != NULL) {
!     /* try and create a soundinstance object */
!     ret = zend_list_insert(item, le_swfsoundinstancep);
!     object_init_ex(return_value, &soundinstance_class_entry);
!     add_property_resource(return_value, "soundinstance", ret);
!   }
! }
! /* }}} */
! 
! /* {{{ void swfmovie_stopsound
! */
! PHP_FUNCTION(swfmovie_stopSound)
! {
!   zval **zsound;
!   SWFSound sound;
!   SWFMovie movie = getMovie(getThis() TSRMLS_CC);
! 
!   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE) {
!     WRONG_PARAM_COUNT;
!   }
! 
!   convert_to_object_ex(zsound);
!   sound = (SWFSound)getSound(*zsound TSRMLS_CC);
!   SWFMovie_stopSound(movie, sound);
  }
  /* }}} */
  /* }}} */
  
  /* {{{ SWFShape
***************
*** 1760,1770 ****
  
  	if (ZEND_NUM_ARGS() == 4) {
  		SWFShape_setLine(getShape(getThis() TSRMLS_CC),
! 			(unsigned short)Z_LVAL_PP(w), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), 0xff
  		);
  	} else {
  		SWFShape_setLine(getShape(getThis() TSRMLS_CC),
! 			(unsigned short)Z_LVAL_PP(w), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g), BYTE_Z_LVAL_PP(b), BYTE_Z_LVAL_PP(a)
  		);
  	}
  }
--- 2678,2690 ----
  
  	if (ZEND_NUM_ARGS() == 4) {
  		SWFShape_setLine(getShape(getThis() TSRMLS_CC),
! 			(unsigned short)Z_LVAL_PP(w), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g),
! 			BYTE_Z_LVAL_PP(b), 0xff
  		);
  	} else {
  		SWFShape_setLine(getShape(getThis() TSRMLS_CC),
! 			(unsigned short)Z_LVAL_PP(w), BYTE_Z_LVAL_PP(r), BYTE_Z_LVAL_PP(g),
! 			BYTE_Z_LVAL_PP(b), BYTE_Z_LVAL_PP(a)
  		);
  	}
  }
***************
*** 1958,1969 ****
  {
  	zval **x, **y;
  
! 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
  	convert_to_double_ex(y);
! 	SWFShape_movePenTo(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
  }
  /* }}} */
  
--- 2878,2890 ----
  {
  	zval **x, **y;
  
! 	if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
  	convert_to_double_ex(y);
! 	SWFShape_movePenTo(getShape(getThis() TSRMLS_CC),
! 			FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
  }
  /* }}} */
  
***************
*** 1973,1984 ****
  {
  	zval **x, **y;
  
! 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
  	convert_to_double_ex(y);
! 	SWFShape_movePen(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
  }
  /* }}} */
  
--- 2894,2906 ----
  {
  	zval **x, **y;
  
! 	if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
  	convert_to_double_ex(y);
! 	SWFShape_movePen(getShape(getThis() TSRMLS_CC),
! 			FLOAT_Z_DVAL_PP(x), FLOAT_Z_DVAL_PP(y));
  }
  /* }}} */
  
***************
*** 1988,1994 ****
  {
  	zval **x, **y;
  
! 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
--- 2910,2916 ----
  {
  	zval **x, **y;
  
! 	if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
***************
*** 2003,2009 ****
  {
  	zval **x, **y;
  
! 	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
--- 2925,2931 ----
  {
  	zval **x, **y;
  
! 	if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2, &x, &y) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(x);
***************
*** 2028,2034 ****
  		convert_to_double_ex(ay);
  
  		SWFShape_drawCurveTo(getShape(getThis() TSRMLS_CC),
! 			FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(ax), FLOAT_Z_DVAL_PP(ay)
  		);
  	
  	} else if (ZEND_NUM_ARGS() == 6) {
--- 2950,2957 ----
  		convert_to_double_ex(ay);
  
  		SWFShape_drawCurveTo(getShape(getThis() TSRMLS_CC),
! 			FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy),
! 			FLOAT_Z_DVAL_PP(ax), FLOAT_Z_DVAL_PP(ay)
  		);
  	
  	} else if (ZEND_NUM_ARGS() == 6) {
***************
*** 2045,2051 ****
  		convert_to_double_ex(dy);
  
  		RETURN_LONG(SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC), 
! 			FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  		);
  	} else {
  		WRONG_PARAM_COUNT;
--- 2968,2976 ----
  		convert_to_double_ex(dy);
  
  		RETURN_LONG(SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC), 
! 			FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by),
! 			FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy),
! 			FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  		);
  	} else {
  		WRONG_PARAM_COUNT;
***************
*** 2069,2075 ****
  		convert_to_double_ex(ay);
  
  		SWFShape_drawCurve(getShape(getThis() TSRMLS_CC), 
! 			FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(ax), FLOAT_Z_DVAL_PP(ay)
  		);
  
  	} else if (ZEND_NUM_ARGS() == 6) {
--- 2994,3001 ----
  		convert_to_double_ex(ay);
  
  		SWFShape_drawCurve(getShape(getThis() TSRMLS_CC), 
! 			FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy),
! 			FLOAT_Z_DVAL_PP(ax), FLOAT_Z_DVAL_PP(ay)
  		);
  
  	} else if (ZEND_NUM_ARGS() == 6) {
***************
*** 2086,2092 ****
  		convert_to_double_ex(dy);
  
  		RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC),
! 			 FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  		);
  	} else {
  		WRONG_PARAM_COUNT;
--- 3012,3020 ----
  		convert_to_double_ex(dy);
  
  		RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC),
! 			 FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by),
! 			 FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy),
! 			 FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  		);
  	} else {
  		WRONG_PARAM_COUNT;
***************
*** 2125,2131 ****
  {
  	zval **r;
  
! 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &r) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(r);
--- 3053,3059 ----
  {
  	zval **r;
  
! 	if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1, &r) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(r);
***************
*** 2139,2145 ****
  {
  	zval **r, **start, **end;
  
! 	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &r, &start, &end) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(r);
--- 3067,3073 ----
  {
  	zval **r, **start, **end;
  
! 	if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3, &r, &start, &end) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(r);
***************
*** 2147,2153 ****
  	convert_to_double_ex(end);
  
  	/* convert angles to radians, since that's what php uses elsewhere */
! 	SWFShape_drawArc(getShape(getThis() TSRMLS_CC), FLOAT_Z_DVAL_PP(r), (float)(Z_DVAL_PP(start)*M_PI/180.0), (float)(Z_DVAL_PP(end)*M_PI/180.0));
  }
  /* }}} */
  
--- 3075,3084 ----
  	convert_to_double_ex(end);
  
  	/* convert angles to radians, since that's what php uses elsewhere */
! 	SWFShape_drawArc(getShape(getThis() TSRMLS_CC),
! 			FLOAT_Z_DVAL_PP(r), (float)(Z_DVAL_PP(start)*M_PI/180.0),
! 			(float)(Z_DVAL_PP(end)*M_PI/180.0)
! 	);
  }
  /* }}} */
  
***************
*** 2157,2163 ****
  {
  	zval **bx, **by, **cx, **cy, **dx, **dy;
  
! 	if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(bx);
--- 3088,3094 ----
  {
  	zval **bx, **by, **cx, **cy, **dx, **dy;
  
! 	if((ZEND_NUM_ARGS() != 6) || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(bx);
***************
*** 2168,2174 ****
  	convert_to_double_ex(dy);
  
  	RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC), 
! 		FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  	);
  }
  /* }}} */
--- 3099,3107 ----
  	convert_to_double_ex(dy);
  
  	RETURN_LONG( SWFShape_drawCubic(getShape(getThis() TSRMLS_CC), 
! 		FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by),
! 		FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy),
! 		FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  	);
  }
  /* }}} */
***************
*** 2179,2185 ****
  {
  	zval **bx, **by, **cx, **cy, **dx, **dy;
  
! 	if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(bx);
--- 3112,3118 ----
  {
  	zval **bx, **by, **cx, **cy, **dx, **dy;
  
! 	if((ZEND_NUM_ARGS() != 6) || zend_get_parameters_ex(6, &bx, &by, &cx, &cy, &dx, &dy) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_double_ex(bx);
***************
*** 2190,2196 ****
  	convert_to_double_ex(dy);
  
  	RETURN_LONG( SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC),
! 		FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by), FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy), FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  	);
  }
  /* }}} */
--- 3123,3131 ----
  	convert_to_double_ex(dy);
  
  	RETURN_LONG( SWFShape_drawCubicTo(getShape(getThis() TSRMLS_CC),
! 		FLOAT_Z_DVAL_PP(bx), FLOAT_Z_DVAL_PP(by),
! 		FLOAT_Z_DVAL_PP(cx), FLOAT_Z_DVAL_PP(cy),
! 		FLOAT_Z_DVAL_PP(dx), FLOAT_Z_DVAL_PP(dy))
  	);
  }
  /* }}} */
***************
*** 2205,2210 ****
--- 3140,3147 ----
  	PHP_FALIAS(nextframe,          swfsprite_nextFrame,         NULL)
  	PHP_FALIAS(labelframe,         swfsprite_labelFrame,        NULL)
  	PHP_FALIAS(setframes,          swfsprite_setFrames,         NULL)
+     PHP_FALIAS(startsound,         swfsprite_startSound,        NULL)
+     PHP_FALIAS(stopsound,          swfsprite_stopSound,         NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 2325,2330 ****
--- 3262,3307 ----
  	SWFMovieClip_setNumberOfFrames(sprite, Z_LVAL_PP(frames));
  }
  /* }}} */
+ 
+ /* {{{ SWFSoundInstance swfsprite_startsound */
+ PHP_FUNCTION(swfsprite_startSound)
+ {
+   zval **zsound;
+   int ret;
+   SWFSound sound;
+   SWFSoundInstance item;
+   SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+   convert_to_object_ex(zsound);
+   sound = (SWFSound)getSound(*zsound TSRMLS_CC);
+   item = SWFMovieClip_startSound(sprite, sound);
+   if(item != NULL) {
+     /* try and create a displayitem object */
+     ret = zend_list_insert(item, le_swfsoundinstancep);
+     object_init_ex(return_value, &soundinstance_class_entry);
+     add_property_resource(return_value, "soundinstance", ret);
+   }
+ }
+ /* }}} */
+ 
+ /* {{{ void swfsprite_stopsound */
+ PHP_FUNCTION(swfsprite_stopSound)
+ {
+   zval **zsound;
+   SWFSound sound;
+   SWFMovieClip sprite = getSprite(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zsound) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+   convert_to_object_ex(zsound);
+   sound = (SWFSound)getSound(*zsound TSRMLS_CC);
+   SWFMovieClip_stopSound(sprite, sound);
+ }
+ /* }}} */
  /* }}} */
  
  /* {{{ SWFText
***************
*** 2337,2343 ****
--- 3314,3322 ----
  	PHP_FALIAS(setcolor,               swftext_setColor,          NULL)
  	PHP_FALIAS(moveto,                 swftext_moveTo,            NULL)
  	PHP_FALIAS(addstring,              swftext_addString,         NULL)
+ 	PHP_FALIAS(addutf8string,          swftext_addUTF8String,     NULL)
  	PHP_FALIAS(getwidth,               swftext_getWidth,          NULL)
+ 	PHP_FALIAS(getutf8width,           swftext_getUTF8Width,      NULL)
  	PHP_FALIAS(getascent,              swftext_getAscent,         NULL)
  	PHP_FALIAS(getdescent,             swftext_getDescent,        NULL)
  	PHP_FALIAS(getleading,             swftext_getLeading,        NULL)
***************
*** 2479,2501 ****
  	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
- 
  	convert_to_string_ex(s);
  	SWFText_addString(text, Z_STRVAL_PP(s), NULL);
  }
  /* }}} */
  
  /* {{{ proto float swftext_getWidth(string str)
     Calculates the width of the given string in this text objects current font and size */
  PHP_FUNCTION(swftext_getWidth)
  {
  	zval **zstring;
  
  	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_string_ex(zstring);
! 	RETURN_DOUBLE(SWFText_getStringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring)));
  }
  /* }}} */
  
--- 3458,3532 ----
  	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_string_ex(s);
  	SWFText_addString(text, Z_STRVAL_PP(s), NULL);
  }
  /* }}} */
  
+ /* {{{ proto void swftext_addUTF8String(string text)
+    Writes the given text into this SWFText object at the current pen position,
+    using the current font, height, spacing, and color */
+ PHP_FUNCTION(swftext_addUTF8String)
+ {
+   zval **s;
+   SWFText text = getText(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+   convert_to_string_ex(s);
+   SWFText_addUTF8String(text, Z_STRVAL_PP(s), NULL);
+ }
+ /* }}} */
+ 
+ /* {{{ proto void swftext_addWideString(string text)
+    Writes the given text into this SWFText object at the current pen position,
+    using the current font, height, spacing, and color */
+ /*
+ PHP_FUNCTION(swftext_addWideString)
+ {
+   zval **s;
+   SWFText text = getText(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &s) == FAILURE)
+     WRONG_PARAM_COUNT;
+ 
+   convert_to_string_ex(s);
+ 
+   SWFText_addWideString(text, Z_STRVAL_PP(s), NULL);
+ }
+ */
+ /* }}} */
+ 
  /* {{{ proto float swftext_getWidth(string str)
     Calculates the width of the given string in this text objects current font and size */
  PHP_FUNCTION(swftext_getWidth)
  {
  	zval **zstring;
+ 	int width;
  
  	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_string_ex(zstring);
! 	width = SWFText_getStringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
! 	RETURN_DOUBLE(width);
! }
! /* }}} */
! 
! /* {{{ proto double swftext_getUTF8Width(string)
!    calculates the width of the given string in this text objects current font and size */
! PHP_FUNCTION(swftext_getUTF8Width)
! {
!   zval **zstring;
!   int width;
! 
!   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
!     WRONG_PARAM_COUNT;
!   }
!   convert_to_string_ex(zstring);
!   width = SWFText_getUTF8StringWidth(getText(getThis() TSRMLS_CC), Z_STRVAL_PP(zstring));
!   RETURN_DOUBLE(width);
  }
  /* }}} */
  
***************
*** 2503,2508 ****
--- 3534,3542 ----
     Returns the ascent of the current font at its current size, or 0 if not available */
  PHP_FUNCTION(swftext_getAscent)
  {
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
  	RETURN_DOUBLE(SWFText_getAscent(getText(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 2511,2516 ****
--- 3545,3553 ----
     Returns the descent of the current font at its current size, or 0 if not available */
  PHP_FUNCTION(swftext_getDescent)
  {
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
    RETURN_DOUBLE(SWFText_getDescent(getText(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 2519,2524 ****
--- 3556,3564 ----
     Returns the leading of the current font at its current size, or 0 if not available */
  PHP_FUNCTION(swftext_getLeading)
  {
+   if(ZEND_NUM_ARGS() != 0) {
+     WRONG_PARAM_COUNT;
+   }
    RETURN_DOUBLE(SWFText_getLeading(getText(getThis() TSRMLS_CC)));
  }
  /* }}} */
***************
*** 2537,2545 ****
--- 3577,3587 ----
  	PHP_FALIAS(setmargins,        swftextfield_setMargins,      NULL)
  	PHP_FALIAS(setindentation,    swftextfield_setIndentation,  NULL)
  	PHP_FALIAS(setlinespacing,    swftextfield_setLineSpacing,  NULL)
+ 	PHP_FALIAS(setpadding,        swftextfield_setPadding,      NULL)
  	PHP_FALIAS(setcolor,          swftextfield_setColor,        NULL)
  	PHP_FALIAS(setname,           swftextfield_setName,         NULL)
  	PHP_FALIAS(addstring,         swftextfield_addString,       NULL)
+ 	PHP_FALIAS(addchars,          swftextfield_addChars,        NULL)
  	{ NULL, NULL, NULL }
  };
  
***************
*** 2585,2590 ****
--- 3627,3645 ----
  
  /* {{{ proto void swftextfield_setFont(object font)
     Sets the font for this textfield */
+ static
+ SWFBlock getFontOrFontChar(zval *id TSRMLS_DC)
+ {
+ 	if(Z_OBJCE_P(id) == &font_class_entry) {
+ 		return (SWFBlock)getFont(id TSRMLS_CC);
+ 	} else if(Z_OBJCE_P(id) == &fontchar_class_entry) {
+ 		return (SWFBlock)getFontCharacter(id TSRMLS_CC);
+ 	} else {
+ 		php_error(E_ERROR, "called object is not an SWFFont or SWFFontCharacter");
+ 	}
+ 	return NULL;
+ }
+ 
  PHP_FUNCTION(swftextfield_setFont)
  {
  	zval **font;
***************
*** 2594,2600 ****
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_object_ex(font);
! 	SWFTextField_setFont(field, getFont(*font TSRMLS_CC));
  }
  /* }}} */
  
--- 3649,3655 ----
  		WRONG_PARAM_COUNT;
  	}
  	convert_to_object_ex(font);
! 	SWFTextField_setFont(field, getFontOrFontChar(*font TSRMLS_CC));
  }
  /* }}} */
  
***************
*** 2721,2726 ****
--- 3776,3796 ----
  }
  /* }}} */
  
+ /* {{{ proto void swftextfield_setPadding(float padding)
+    Sets the padding of this textfield */
+ PHP_FUNCTION(swftextfield_setPadding)
+ {
+   zval **padding;
+   SWFTextField field = getTextField(getThis() TSRMLS_CC);
+ 
+   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &padding) == FAILURE) {
+     WRONG_PARAM_COUNT;
+   }
+   convert_to_double_ex(padding);
+   SWFTextField_setPadding(field, Z_DVAL_PP(padding));
+ }
+ /* }}} */
+ 
  /* {{{ proto void swftextfield_setColor(int r, int g, int b [, int a])
     Sets the color of this textfield */
  PHP_FUNCTION(swftextfield_setColor)
***************
*** 2768,2781 ****
     Adds the given string to this textfield */
  PHP_FUNCTION(swftextfield_addString)
  {
! 	zval **string;
! 	SWFTextField field = getTextField(getThis() TSRMLS_CC);
  
! 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &string) == FAILURE) {
! 		WRONG_PARAM_COUNT;
! 	}
! 	convert_to_string_ex(string);
! 	SWFTextField_addString(field, Z_STRVAL_PP(string));
  }
  /* }}} */
  /* }}} */
--- 3838,3865 ----
     Adds the given string to this textfield */
  PHP_FUNCTION(swftextfield_addString)
  {
!   zval **string;
!   SWFTextField field = getTextField(getThis() TSRMLS_CC);
  
!   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &string) == FAILURE) {
!     WRONG_PARAM_COUNT;
!   }
!   convert_to_string_ex(string);
!   SWFTextField_addString(field, Z_STRVAL_PP(string));
! }
! 
! /* {{{ proto void swftextfield_addChars(string)
!  *    adds characters to a font that will be available within a textfield */
! PHP_FUNCTION(swftextfield_addChars)
! {
!   zval **zstring;
!   SWFTextField field = getTextField(getThis() TSRMLS_CC);
! 
!   if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &zstring) == FAILURE) {
!       WRONG_PARAM_COUNT;
!   }
!   convert_to_string_ex(zstring);
!   SWFTextField_addChars(field, Z_STRVAL_PP(zstring));
  }
  /* }}} */
  /* }}} */
***************
*** 2874,2879 ****
--- 3958,3965 ----
  	CONSTANT("SWFTEXTFIELD_DRAWBOX",        SWFTEXTFIELD_DRAWBOX);
  	CONSTANT("SWFTEXTFIELD_NOSELECT",       SWFTEXTFIELD_NOSELECT);
  	CONSTANT("SWFTEXTFIELD_HTML",           SWFTEXTFIELD_HTML);
+ 	CONSTANT("SWFTEXTFIELD_USEFONT",        SWFTEXTFIELD_USEFONT);
+ 	CONSTANT("SWFTEXTFIELD_AUTOSIZE",       SWFTEXTFIELD_AUTOSIZE);
  
  	/* flags for SWFTextField_align */
  	CONSTANT("SWFTEXTFIELD_ALIGN_LEFT",     SWFTEXTFIELD_ALIGN_LEFT);
***************
*** 2892,2897 ****
--- 3978,3998 ----
  	CONSTANT("SWFACTION_KEYUP",             SWFACTION_KEYUP);
  	CONSTANT("SWFACTION_DATA",              SWFACTION_DATA);
  
+   /* flags for SWFSound */
+   CONSTANT("SWF_SOUND_NOT_COMPRESSED",    SWF_SOUND_NOT_COMPRESSED);
+   CONSTANT("SWF_SOUND_ADPCM_COMPRESSED",  SWF_SOUND_ADPCM_COMPRESSED);
+   CONSTANT("SWF_SOUND_MP3_COMPRESSED",    SWF_SOUND_MP3_COMPRESSED);
+   CONSTANT("SWF_SOUND_NOT_COMPRESSED_LE", SWF_SOUND_NOT_COMPRESSED_LE);
+   CONSTANT("SWF_SOUND_NELLY_COMPRESSED",  SWF_SOUND_NELLY_COMPRESSED);
+   CONSTANT("SWF_SOUND_5KHZ",              SWF_SOUND_5KHZ);
+   CONSTANT("SWF_SOUND_11KHZ",             SWF_SOUND_11KHZ);
+   CONSTANT("SWF_SOUND_22KHZ",             SWF_SOUND_22KHZ);
+   CONSTANT("SWF_SOUND_44KHZ",             SWF_SOUND_44KHZ);
+   CONSTANT("SWF_SOUND_8BITS",             SWF_SOUND_8BITS);
+   CONSTANT("SWF_SOUND_16BITS",            SWF_SOUND_16BITS);
+   CONSTANT("SWF_SOUND_MONO",              SWF_SOUND_MONO);
+   CONSTANT("SWF_SOUND_STEREO",            SWF_SOUND_STEREO);
+ 
  	le_swfmoviep = zend_register_list_destructors_ex(destroy_SWFMovie_resource, NULL, "SWFMovie", module_number);
  	le_swfshapep = zend_register_list_destructors_ex(destroy_SWFShape_resource, NULL, "SWFShape", module_number);
  	le_swffillp = zend_register_list_destructors_ex(destroy_SWFFill_resource, NULL, "SWFFill", module_number);
***************
*** 2900,2911 ****
--- 4001,4018 ----
  	le_swftextp = zend_register_list_destructors_ex(destroy_SWFText_resource, NULL, "SWFText", module_number);
  	le_swftextfieldp = zend_register_list_destructors_ex(destroy_SWFTextField_resource, NULL, "SWFTextField", module_number);
  	le_swffontp = zend_register_list_destructors_ex(destroy_SWFFont_resource, NULL, "SWFFont", module_number);
+ 	le_swffontcharp = zend_register_list_destructors_ex(destroy_SWFFontCharacter_resource, NULL, "SWFFontCharacter", module_number);
  	le_swfbuttonp = zend_register_list_destructors_ex(destroy_SWFButton_resource, NULL, "SWFButton", module_number);
  	le_swfmorphp = zend_register_list_destructors_ex(destroy_SWFMorph_resource, NULL, "SWFMorph", module_number);
  	le_swfspritep = zend_register_list_destructors_ex(destroy_SWFSprite_resource, NULL, "SWFSprite", module_number);
  	le_swfdisplayitemp = zend_register_list_destructors_ex(NULL, NULL, "SWFDisplayItem", module_number);
  	le_swfactionp = zend_register_list_destructors_ex(NULL, NULL, "SWFAction", module_number);
  	le_swfinputp = zend_register_list_destructors_ex(destroy_SWFInput_resource, NULL, "SWFInput", module_number);
+ 	le_swfsoundp = zend_register_list_destructors_ex(destroy_SWFSound_resource, NULL, "SWFSound", module_number);
+ 	le_swfsoundinstancep = zend_register_list_destructors_ex(NULL, NULL, "SWFSoundInstance", module_number);
+ 
+     le_swfvideostreamp = zend_register_list_destructors_ex(destroy_SWFVideoStream_resource, NULL, "SWFVideoStream", module_number);
+     le_swfprebuiltclipp = zend_register_list_destructors_ex(destroy_SWFPrebuiltClip_resource, NULL, "SWFPrebuiltClip", module_number);
  
  	INIT_CLASS_ENTRY(shape_class_entry, "swfshape", swfshape_functions);
  	INIT_CLASS_ENTRY(fill_class_entry, "swffill", swffill_functions);
***************
*** 2914,2925 ****
--- 4021,4037 ----
  	INIT_CLASS_ENTRY(text_class_entry, "swftext", swftext_functions);
  	INIT_CLASS_ENTRY(textfield_class_entry, "swftextfield", swftextfield_functions);
  	INIT_CLASS_ENTRY(font_class_entry, "swffont", swffont_functions);
+ 	INIT_CLASS_ENTRY(fontchar_class_entry, "swffontcharacter", swffontchar_functions);
  	INIT_CLASS_ENTRY(displayitem_class_entry, "swfdisplayitem", swfdisplayitem_functions);
  	INIT_CLASS_ENTRY(movie_class_entry, "swfmovie", swfmovie_functions);
  	INIT_CLASS_ENTRY(button_class_entry, "swfbutton", swfbutton_functions);
  	INIT_CLASS_ENTRY(action_class_entry, "swfaction", swfaction_functions);
  	INIT_CLASS_ENTRY(morph_class_entry, "swfmorph", swfmorph_functions);
  	INIT_CLASS_ENTRY(sprite_class_entry, "swfsprite", swfsprite_functions);
+     INIT_CLASS_ENTRY(sound_class_entry, "swfsound", swfsound_functions);
+     INIT_CLASS_ENTRY(soundinstance_class_entry, "swfsoundinstance", swfsoundinstance_functions);
+     INIT_CLASS_ENTRY(videostream_class_entry, "swfvideostream", swfvideostream_functions);
+     INIT_CLASS_ENTRY(prebuiltclip_class_entry, "swfprebuiltclip", swfprebuiltclip_functions);
  
  	zend_register_internal_class(&shape_class_entry TSRMLS_CC);
  	zend_register_internal_class(&fill_class_entry TSRMLS_CC);
***************
*** 2928,2939 ****
--- 4040,4056 ----
  	zend_register_internal_class(&text_class_entry TSRMLS_CC);
  	zend_register_internal_class(&textfield_class_entry TSRMLS_CC);
  	zend_register_internal_class(&font_class_entry TSRMLS_CC);
+ 	zend_register_internal_class(&fontchar_class_entry TSRMLS_CC);
  	zend_register_internal_class(&displayitem_class_entry TSRMLS_CC);
  	zend_register_internal_class(&movie_class_entry TSRMLS_CC);
  	zend_register_internal_class(&button_class_entry TSRMLS_CC);
  	zend_register_internal_class(&action_class_entry TSRMLS_CC);
  	zend_register_internal_class(&morph_class_entry TSRMLS_CC);
  	zend_register_internal_class(&sprite_class_entry TSRMLS_CC);
+ 	zend_register_internal_class(&sound_class_entry TSRMLS_CC);
+ 	zend_register_internal_class(&soundinstance_class_entry TSRMLS_CC);
+ 	zend_register_internal_class(&videostream_class_entry TSRMLS_CC);
+ 	zend_register_internal_class(&prebuiltclip_class_entry TSRMLS_CC);
  
  	return SUCCESS;
  }
Index: ext/ming/php_ming.h
===================================================================
RCS file: /var/lib/cvs/php4-4.4/ext/ming/php_ming.h,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 php_ming.h
*** ext/ming/php_ming.h	7 Jul 2006 14:33:58 -0000	1.1.1.1
--- ext/ming/php_ming.h	7 Jul 2006 20:11:43 -0000
***************
*** 17,29 ****
    +----------------------------------------------------------------------+
  */
  
! /* $Id: php_ming.h,v 1.8.4.5.4.1 2006/01/01 13:46:54 sniper Exp $ */
  
  #ifndef _PHP_MING_H
  #define _PHP_MING_H
  
  #if HAVE_MING
  
  extern zend_module_entry ming_module_entry;
  #define ming_module_ptr &ming_module_entry
  
--- 17,31 ----
    +----------------------------------------------------------------------+
  */
  
! /* $Id: php_ming.h,v 1.2 2006/01/30 21:33:43 anderson Exp $ */
  
  #ifndef _PHP_MING_H
  #define _PHP_MING_H
  
  #if HAVE_MING
  
+ #include <ming.h>
+ 
  extern zend_module_entry ming_module_entry;
  #define ming_module_ptr &ming_module_entry
  
***************
*** 35,40 ****
--- 37,48 ----
  PHP_FUNCTION(swfbitmap_getWidth);
  PHP_FUNCTION(swfbitmap_getHeight);
  
+ PHP_FUNCTION(swfvideostream_init);
+ PHP_FUNCTION(swfvideostream_setdimension);
+ PHP_FUNCTION(swfvideostream_getnumframes);
+ 
+ PHP_FUNCTION(swfprebuiltclip_init);
+ 
  PHP_FUNCTION(swffill_init);
  PHP_FUNCTION(swffill_moveTo);
  PHP_FUNCTION(swffill_scaleTo);
***************
*** 70,83 ****
  PHP_FUNCTION(swfmovie_remove);
  PHP_FUNCTION(swfmovie_nextFrame);
  PHP_FUNCTION(swfmovie_labelFrame);
  PHP_FUNCTION(swfmovie_setBackground);
  PHP_FUNCTION(swfmovie_setRate);
  PHP_FUNCTION(swfmovie_setDimension);
  PHP_FUNCTION(swfmovie_setFrames);
! 
! #ifdef HAVE_NEW_MING
  PHP_FUNCTION(swfmovie_streamMp3);
! #endif
  
  PHP_FUNCTION(swfsprite_init);
  PHP_FUNCTION(swfsprite_add);
--- 78,97 ----
  PHP_FUNCTION(swfmovie_remove);
  PHP_FUNCTION(swfmovie_nextFrame);
  PHP_FUNCTION(swfmovie_labelFrame);
+ PHP_FUNCTION(swfmovie_namedAnchor);
  PHP_FUNCTION(swfmovie_setBackground);
  PHP_FUNCTION(swfmovie_setRate);
  PHP_FUNCTION(swfmovie_setDimension);
  PHP_FUNCTION(swfmovie_setFrames);
! PHP_FUNCTION(swfmovie_Protect);
  PHP_FUNCTION(swfmovie_streamMp3);
! PHP_FUNCTION(swfmovie_addExport);
! PHP_FUNCTION(swfmovie_writeExports);
! PHP_FUNCTION(swfmovie_startSound);
! PHP_FUNCTION(swfmovie_stopSound);
! PHP_FUNCTION(swfmovie_importChar);
! PHP_FUNCTION(swfmovie_importFont);
! PHP_FUNCTION(swfmovie_addFont);
  
  PHP_FUNCTION(swfsprite_init);
  PHP_FUNCTION(swfsprite_add);
***************
*** 85,96 ****
--- 99,114 ----
  PHP_FUNCTION(swfsprite_nextFrame);
  PHP_FUNCTION(swfsprite_labelFrame);
  PHP_FUNCTION(swfsprite_setFrames);
+ PHP_FUNCTION(swfsprite_startSound);
+ PHP_FUNCTION(swfsprite_stopSound);
  
  PHP_FUNCTION(swffont_init);
  PHP_FUNCTION(swffont_getWidth);
+ PHP_FUNCTION(swffont_getUTF8Width);
  PHP_FUNCTION(swffont_getAscent);
  PHP_FUNCTION(swffont_getDescent);
  PHP_FUNCTION(swffont_getLeading);
+ PHP_FUNCTION(swffont_getShape);
  
  PHP_FUNCTION(swftext_init);
  PHP_FUNCTION(swftext_setFont);
***************
*** 99,105 ****
--- 117,125 ----
  PHP_FUNCTION(swftext_setColor);
  PHP_FUNCTION(swftext_moveTo);
  PHP_FUNCTION(swftext_addString);
+ PHP_FUNCTION(swftext_addUTF8String);
  PHP_FUNCTION(swftext_getWidth);
+ PHP_FUNCTION(swftext_getUTF8Width);
  PHP_FUNCTION(swftext_getAscent);
  PHP_FUNCTION(swftext_getDescent);
  PHP_FUNCTION(swftext_getLeading);
***************
*** 117,122 ****
--- 137,147 ----
  PHP_FUNCTION(swftextfield_setColor);
  PHP_FUNCTION(swftextfield_setName);
  PHP_FUNCTION(swftextfield_addString);
+ PHP_FUNCTION(swftextfield_setPadding);
+ PHP_FUNCTION(swftextfield_addChars);
+ 
+ PHP_FUNCTION(swffontchar_addChars);
+ PHP_FUNCTION(swffontchar_addUTF8Chars);
  
  PHP_FUNCTION(swfdisplayitem_move);
  PHP_FUNCTION(swfdisplayitem_moveTo);
***************
*** 135,140 ****
--- 160,175 ----
  PHP_FUNCTION(swfdisplayitem_multColor);
  PHP_FUNCTION(swfdisplayitem_setName);
  PHP_FUNCTION(swfdisplayitem_addAction);
+ PHP_FUNCTION(swfdisplayitem_remove);
+ PHP_FUNCTION(swfdisplayitem_setMaskLevel);
+ PHP_FUNCTION(swfdisplayitem_endMask);
+ PHP_FUNCTION(swfdisplayitem_getX);
+ PHP_FUNCTION(swfdisplayitem_getY);
+ PHP_FUNCTION(swfdisplayitem_getXScale);
+ PHP_FUNCTION(swfdisplayitem_getYScale);
+ PHP_FUNCTION(swfdisplayitem_getXSkew);
+ PHP_FUNCTION(swfdisplayitem_getYSkew);
+ PHP_FUNCTION(swfdisplayitem_getRot);
  
  PHP_FUNCTION(swfbutton_init);
  PHP_FUNCTION(swfbutton_setHit);
***************
*** 143,149 ****
--- 178,186 ----
  PHP_FUNCTION(swfbutton_setDown);
  PHP_FUNCTION(swfbutton_setAction);
  PHP_FUNCTION(swfbutton_addShape);
+ PHP_FUNCTION(swfbutton_setMenu);
  PHP_FUNCTION(swfbutton_addAction);
+ PHP_FUNCTION(swfbutton_addSound);
  
  PHP_FUNCTION(swfbutton_keypress);
  
***************
*** 153,162 ****
  PHP_FUNCTION(swfmorph_getShape1);
  PHP_FUNCTION(swfmorph_getShape2);
  
  PHP_FUNCTION(ming_setCubicThreshold);
  PHP_FUNCTION(ming_setScale);
  PHP_FUNCTION(ming_useSWFVersion);
! 
  #else
  #define ming_module_ptr NULL
  #endif /* HAVE_MING */
--- 190,207 ----
  PHP_FUNCTION(swfmorph_getShape1);
  PHP_FUNCTION(swfmorph_getShape2);
  
+ PHP_FUNCTION(swfsound_init);
+ 
+ PHP_FUNCTION(swfsoundinstance_noMultiple);
+ PHP_FUNCTION(swfsoundinstance_loopInPoint);
+ PHP_FUNCTION(swfsoundinstance_loopOutPoint);
+ PHP_FUNCTION(swfsoundinstance_loopCount);
+ 
  PHP_FUNCTION(ming_setCubicThreshold);
  PHP_FUNCTION(ming_setScale);
  PHP_FUNCTION(ming_useSWFVersion);
! PHP_FUNCTION(ming_useConstants);
! PHP_FUNCTION(ming_setSWFCompression);
  #else
  #define ming_module_ptr NULL
  #endif /* HAVE_MING */


More information about the pkg-php-maint mailing list