sniper          Fri Apr  6 16:17:32 2001 EDT

  Modified files:              
    /php4/ext/fdf       fdf.c php_fdf.h 
  Log:
  Fixed some bugs.
  
Index: php4/ext/fdf/fdf.c
diff -u php4/ext/fdf/fdf.c:1.43 php4/ext/fdf/fdf.c:1.44
--- php4/ext/fdf/fdf.c:1.43     Wed Apr  4 22:38:18 2001
+++ php4/ext/fdf/fdf.c  Fri Apr  6 16:17:31 2001
@@ -17,58 +17,24 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: fdf.c,v 1.43 2001/04/05 05:38:18 sniper Exp $ */
+/* $Id: fdf.c,v 1.44 2001/04/06 23:17:31 sniper Exp $ */
 
 /* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from
    http://beta1.adobe.com/ada/acrosdk/forms.html. */
 
 /* Note that there is no code from the FdfTk lib in this file */
 
-#if !PHP_31 && defined(THREAD_SAFE)
-#undef THREAD_SAFE
-#endif
-
 #include "php.h"
-#include "SAPI.h"
-#include "ext/standard/head.h"
-#include "php_open_temporary_file.h"
-#include "php_variables.h"
-
-#include <math.h>
-#include "php_fdf.h"
-
-#if HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef PHP_WIN32
-# include <io.h>
-# include <fcntl.h>
-#endif
 
 #if HAVE_FDFLIB
 
+#include "SAPI.h"
 #include "ext/standard/info.h"
+#include "php_open_temporary_file.h"
+#include "php_variables.h"
+#include "php_fdf.h"
 
-#ifdef THREAD_SAFE
-DWORD FDFlibTls;
-static int numthreads=0;
-
-typedef struct fdflib_global_struct{
-       int le_fdf;
-} fdflib_global_struct;
-
-# define FDF_GLOBAL(a) fdflib_globals->a
-# define FDF_TLS_VARS fdflib_global_struct *fdflib_globals=TlsGetValue(FDFlibTls)
-
-#else
-#  define FDF_GLOBAL(a) a
-#  define FDF_TLS_VARS
-int le_fdf_info;
-int le_fdf;
-#endif
+static int le_fdf;
 
 SAPI_POST_HANDLER_FUNC(fdf_post_handler);
 
@@ -85,7 +51,7 @@
        PHP_FE(fdf_get_status,                                                  NULL)
        PHP_FE(fdf_set_file,                                                    NULL)
        PHP_FE(fdf_get_file,                                                    NULL)
-       PHP_FE(fdf_add_template,                                                       
 NULL)
+       PHP_FE(fdf_add_template,                                                NULL)
        PHP_FE(fdf_set_flags,                                                   NULL)
        PHP_FE(fdf_set_opt,                                                            
 NULL)
        PHP_FE(fdf_set_submit_form_action,                              NULL)
@@ -94,20 +60,28 @@
 };
 
 zend_module_entry fdf_module_entry = {
-       "fdf", fdf_functions, PHP_MINIT(fdf), PHP_MSHUTDOWN(fdf), NULL, NULL,
-       PHP_MINFO(fdf), STANDARD_MODULE_PROPERTIES
+       "fdf", 
+       fdf_functions, 
+       PHP_MINIT(fdf), 
+       PHP_MSHUTDOWN(fdf), 
+       NULL, 
+       NULL,
+       PHP_MINFO(fdf), 
+       STANDARD_MODULE_PROPERTIES
 };
 
 #ifdef COMPILE_DL_FDF
 ZEND_GET_MODULE(fdf)
 #endif
 
+
 static void phpi_FDFClose(zend_rsrc_list_entry *rsrc)
 {
        FDFDoc fdf = (FDFDoc)rsrc->ptr;
-       (void)FDFClose(fdf);
+       (void) FDFClose(fdf);
 }
 
+
 #define FDF_POST_CONTENT_TYPE  "application/vnd.fdf"
 
 static sapi_post_entry php_fdf_post_entry =    {
@@ -118,15 +92,16 @@
 };
 
 
-
 PHP_MINIT_FUNCTION(fdf)
 {
        FDFErc err;
-       FDF_GLOBAL(le_fdf) = zend_register_list_destructors_ex(phpi_FDFClose, NULL, 
"fdf", module_number);
+       
+       le_fdf = zend_register_list_destructors_ex(phpi_FDFClose, NULL, "fdf", 
+module_number);
 
        /* add handler for Acrobat FDF form post requests */
        sapi_register_post_entry(&php_fdf_post_entry);
 
+
        /* Constants used by fdf_set_opt() */
        REGISTER_LONG_CONSTANT("FDFValue", FDFValue, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("FDFStatus", FDFStatus, CONST_CS | CONST_PERSISTENT);
@@ -158,9 +133,7 @@
 #ifdef PHP_WIN32
        return SUCCESS;
 #endif
-       err = FDFInitialize();
-       if(err == FDFErcOK)
-               return SUCCESS;
+       if((err = FDFInitialize()) == FDFErcOK) return SUCCESS;
        return FAILURE;
 }
 
@@ -183,181 +156,154 @@
 #ifdef PHP_WIN32
        return SUCCESS;
 #endif
-       err = FDFFinalize();
-       if(err == FDFErcOK)
-               return SUCCESS;
+       if((err = FDFFinalize()) == FDFErcOK) return SUCCESS;
        return FAILURE;
 }
 
+
 /* {{{ proto int fdf_open(string filename)
-   Opens a new FDF document */
-PHP_FUNCTION(fdf_open) {
-       pval **file;
-       int id;
+   Open a new FDF document */
+PHP_FUNCTION(fdf_open) 
+{
+       zval **file;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
-
 
        if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
        convert_to_string_ex(file);
-
-       err = FDFOpen((*file)->value.str.val, 0, &fdf);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-       if(!fdf)
-               RETURN_FALSE;
-
-       id = zend_list_insert(fdf,FDF_GLOBAL(le_fdf));
-       RETURN_LONG(id);
-} /* }}} */
-
-/* {{{ proto boolean fdf_close(int fdfdoc)
-   Closes the FDF document */
-PHP_FUNCTION(fdf_close) {
-       pval **arg1;
-       int id, type;
-       FDFDoc fdf;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
+       err = FDFOpen(Z_STRVAL_PP(file), 0, &fdf);
 
-       convert_to_long_ex(arg1);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       if(err != FDFErcOK || !fdf) {
+               php_error(E_WARNING, "Could not open fdf document: %s", 
+Z_STRVAL_PP(file));
                RETURN_FALSE;
        }
 
-/*     FDFClose(fdf); */
-       zend_list_delete(id);
+       ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
+} 
+/* }}} */
 
-       RETURN_TRUE;
-} /* }}} */
 
 /* {{{ proto int fdf_create(void)
-   Creates a new FDF document */
-PHP_FUNCTION(fdf_create) {
-       int id;
+   Create a new FDF document */
+PHP_FUNCTION(fdf_create) 
+{
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
        err = FDFCreate(&fdf);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-       if(!fdf)
+
+       if(err != FDFErcOK || !fdf) {
+               php_error(E_WARNING, "Error creating new fdf document!");
                RETURN_FALSE;
+       }
 
-       id = zend_list_insert(fdf,FDF_GLOBAL(le_fdf));
-       RETURN_LONG(id);
+       ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf);
 }
 /* }}} */
 
+
+/* {{{ proto bool fdf_close(int fdfdoc)
+   Close the FDF document */
+PHP_FUNCTION(fdf_close) 
+{
+       zval **fdfp;
+       FDFDoc fdf;
+
+       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+       zend_list_delete(Z_RESVAL_PP(fdfp));
+} 
+/* }}} */
+
+
 /* {{{ proto string fdf_get_value(int fdfdoc, string fieldname)
-   Gets the value of a field as string */
-PHP_FUNCTION(fdf_get_value) {
-       pval **arg1, **arg2;
-       int id, type;
-       ASInt32 nr;
+   Get the value of a field as string */
+PHP_FUNCTION(fdf_get_value) 
+{
+       zval **fdfp, **fieldname;
+       ASInt32 nr, size = 256;
        char *buffer;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
+       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &fieldname) == 
+FAILURE) {
                WRONG_PARAM_COUNT;
        }
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       convert_to_string_ex(fieldname);
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       buffer = emalloc(size);
+       err = FDFGetValue(fdf, Z_STRVAL_PP(fieldname), buffer, size-1, &nr);
+       if(err == FDFErcBufTooShort && nr > 0 ) {
+               buffer = erealloc(buffer,nr+1); 
+               err = FDFGetValue(fdf, Z_STRVAL_PP(fieldname), buffer, nr, &nr);
+       } 
+
+       if(err != FDFErcOK) {
+               php_error(E_WARNING, "Error getting value of %s", 
+Z_STRVAL_PP(fieldname));
+               efree(buffer);
                RETURN_FALSE;
        }
-
-       err = FDFGetValue(fdf, (*arg2)->value.str.val, NULL, 0, &nr);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-  /* In the inofficial version of FdfTK 4.0 (as FDFGetVersion says. The
-     library has a name with version 3.0, don't know what adobe has in
-     mind) the number of bytes of the value doesn't include the trailing
-     '\0'. This was not the case in 2.0
-  */
-       if(strcmp(FDFGetVersion(), "2.0"))
-               nr++;
-       buffer = emalloc(nr);
-       err = FDFGetValue(fdf, (*arg2)->value.str.val, buffer, nr, &nr);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
 
-       RETURN_STRING(buffer, 0);
+       RETVAL_STRING(buffer, 1);
+       efree(buffer);
 }
 /* }}} */
+
 
-/* {{{ proto boolean fdf_set_value(int fdfdoc, string fieldname, string value, int 
isname)
-   Sets the value of a field */
-PHP_FUNCTION(fdf_set_value) {
-       pval **arg1, **arg2, **arg3, **arg4;
-       int id, type;
+/* {{{ proto bool fdf_set_value(int fdfdoc, string fieldname, string value, int 
+isname)
+   Set the value of a field */
+PHP_FUNCTION(fdf_set_value) 
+{
+       zval **fdfp, **fieldname, **value, **isname;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2,&arg3, 
&arg4) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, 
+&value, &isname) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       convert_to_string_ex(arg3);
-       convert_to_long_ex(arg4);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
-               RETURN_FALSE;
-       }
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
 
-       err = FDFSetValue(fdf, (*arg2)->value.str.val,(*arg3)->value.str.val, (ASBool) 
(*arg4)->value.lval);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
+       convert_to_string_ex(fieldname);
+       convert_to_string_ex(value);
+       convert_to_long_ex(isname);
 
+       err = FDFSetValue(fdf, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value), (ASBool) 
+Z_LVAL_PP(isname));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING, "Error setting field: %s to value: %s", 
+Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value));
+               RETURN_FALSE;
+       }
        RETURN_TRUE;
 }
 /* }}} */
 
+
 /* {{{ proto string fdf_next_field_name(int fdfdoc [, string fieldname])
-   Gets the name of the next field name or the first field name */
+   Get the name of the next field name or the first field name */
 PHP_FUNCTION(fdf_next_field_name) 
 {
-       zval **fdfdoc, **field;
-       int id, type, argc=ZEND_NUM_ARGS();
+       zval **fdfp, **field;
+       int argc=ZEND_NUM_ARGS();
        ASInt32 length=256, nr;
        char *buffer=NULL, *fieldname=NULL;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfdoc, &field) == 
FAILURE) {
+       if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfp, &field) == 
+FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(fdfdoc);
-       id=Z_LVAL_PP(fdfdoc);
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
-               RETURN_FALSE;
-       }
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
 
        if(argc == 2) {
                convert_to_string_ex(field);
@@ -366,401 +312,382 @@
 
        buffer = emalloc(length);
        err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);
+
        if(err == FDFErcBufTooShort && nr > 0 ) {
                buffer = erealloc(buffer,nr+1); 
                err = FDFNextFieldName(fdf, fieldname, buffer, length-1,&nr);
        } 
+
        if(err != FDFErcOK) {
                efree(buffer);
-               php_error(E_WARNING,"Unable to get next fieldname");
+               php_error(E_WARNING,"Error getting next fieldname!");
                RETURN_FALSE;
        } 
+
        RETVAL_STRING(buffer, 1);
        efree(buffer);
 }
 /* }}} */
+
 
-/* {{{ proto boolean fdf_set_ap(int fdfdoc, string fieldname, int face, string 
filename, int pagenr)
-   Sets the value of a field */
-PHP_FUNCTION(fdf_set_ap) {
-       pval **arg1, **arg2, **arg3, **arg4, **arg5;
-       int id, type;
+/* {{{ proto bool fdf_set_ap(int fdfdoc, string fieldname, int face, string filename, 
+int pagenr)
+   Set the appearence of a field */
+PHP_FUNCTION(fdf_set_ap) 
+{
+       zval **fdfp, **fieldname, **face, **filename, **pagenr;
        FDFDoc fdf;
        FDFErc err;
-       FDFAppFace face;
-       FDF_TLS_VARS;
+       FDFAppFace facenr;
 
-       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2,&arg3, 
&arg4, &arg5) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, 
+&face, &filename, &pagenr) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       convert_to_long_ex(arg3);
-       convert_to_string_ex(arg4);
-       convert_to_long_ex(arg5);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
-               RETURN_FALSE;
-       }
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       convert_to_string_ex(fieldname);
+       convert_to_long_ex(face);
+       convert_to_string_ex(filename);
+       convert_to_long_ex(pagenr);
 
-       switch((*arg3)->value.lval) {
+       switch(Z_LVAL_PP(face)) {
                case 1:
-                       face = FDFNormalAP;
+                       facenr = FDFNormalAP;
                        break;
                case 2:
-                       face = FDFRolloverAP;
+                       facenr = FDFRolloverAP;
                        break;
                case 3:
-                       face = FDFDownAP;
+                       facenr = FDFDownAP;
                        break;
                default:
-                       face = FDFNormalAP;
+                       facenr = FDFNormalAP;
        }
+
+       err = FDFSetAP(fdf, Z_STRVAL_PP(fieldname), facenr, NULL, 
+Z_STRVAL_PP(filename), (ASInt32) Z_LVAL_PP(pagenr));
 
-       err = FDFSetAP(fdf, (*arg2)->value.str.val, face, NULL,
-(*arg4)->value.str.val, (ASInt32) (*arg5)->value.lval);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
+       /* This should be made more intelligent, ie. use switch() with the 
+          possible errors this function can return. Or create global error handler 
+function.
+        */
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting appearence of field: %s", 
+Z_STRVAL_PP(fieldname));
+               RETURN_FALSE;
+       }
 
        RETURN_TRUE;
+
 }
 /* }}} */
+
 
-/* {{{ proto boolean fdf_set_status(int fdfdoc, string status)
-   Sets the value in the /Status key */
-PHP_FUNCTION(fdf_set_status) {
-       pval **arg1, **arg2;
-       int id, type;
+/* {{{ proto bool fdf_set_status(int fdfdoc, string status)
+   Set the value of /Status key */
+PHP_FUNCTION(fdf_set_status) 
+{
+       zval **fdfp, **status;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
+       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &status) == 
+FAILURE) {
                WRONG_PARAM_COUNT;
        }
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       convert_to_string_ex(status);
+
+       err = FDFSetStatus(fdf, Z_STRVAL_PP(status));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting fdf document status key to: %s", 
+Z_STRVAL_PP(status));
                RETURN_FALSE;
        }
 
-       err = FDFSetStatus(fdf, (*arg2)->value.str.val);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-
        RETURN_TRUE;
 }
 /* }}} */
 
+
 /* {{{ proto string fdf_get_status(int fdfdoc)
-   Gets the value in the /Status key */
-PHP_FUNCTION(fdf_get_status) {
-       pval **arg1;
-       int id, type;
-       ASInt32 nr;
+   Get the value of /Status key */
+PHP_FUNCTION(fdf_get_status) 
+{
+       zval **fdfp;
+       ASInt32 nr, size = 256;
        char *buf;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(arg1);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       buf = emalloc(size);
+       err = FDFGetStatus(fdf, buf, size-1,  &nr);
+
+       if(err == FDFErcBufTooShort && nr > 0 ) {
+               buf = erealloc(buf,nr+1); 
+               err = FDFGetStatus(fdf, buf, size-1,  &nr);
+       }
+       
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error getting fdf document status key!");
+               efree(buf);
                RETURN_FALSE;
        }
-
-       err = FDFGetStatus(fdf, NULL, 0,  &nr);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-       if(nr == 0)
-               RETURN_STRING(empty_string, 1);
-       buf = emalloc(nr);
-       err = FDFGetStatus(fdf, buf, nr,  &nr);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
 
-       RETURN_STRING(buf, 0);
+       RETVAL_STRING(buf, 1);
+       efree(buf);
 }
 /* }}} */
+
 
-/* {{{ proto boolean fdf_set_file(int fdfdoc, string filename)
-   Sets the value of the FDF's /F key */
-PHP_FUNCTION(fdf_set_file) {
-       pval **arg1, **arg2;
-       int id, type;
+/* {{{ proto bool fdf_set_file(int fdfdoc, string filename)
+   Set the value of /F key */
+PHP_FUNCTION(fdf_set_file) 
+{
+       zval **fdfp, **filename;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
+       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &filename) == 
+FAILURE) {
                WRONG_PARAM_COUNT;
        }
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       convert_to_string_ex(filename);
+
+       err = FDFSetFile(fdf, Z_STRVAL_PP(filename));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting filename key to: %s", 
+Z_STRVAL_PP(filename));
                RETURN_FALSE;
        }
 
-       err = FDFSetFile(fdf, (*arg2)->value.str.val);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-
        RETURN_TRUE;
 }
 /* }}} */
 
+
 /* {{{ proto string fdf_get_file(int fdfdoc)
-   Gets the value in the /F key */
-PHP_FUNCTION(fdf_get_file) {
-       pval **arg1;
-       int id, type;
-       ASInt32 nr;
+   Get the value of /F key */
+PHP_FUNCTION(fdf_get_file) 
+{
+       zval **fdfp;
+       ASInt32 nr, size = 256;
        char *buf;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(arg1);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       buf = emalloc(size);
+       err = FDFGetFile(fdf, buf, size-1,  &nr);
+
+       if(err == FDFErcBufTooShort && nr > 0 ) {
+               buf = erealloc(buf,nr+1); 
+               err = FDFGetFile(fdf, buf, size-1,  &nr);
+       }
+       
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error getting fdf document filename key!");
+               efree(buf);
                RETURN_FALSE;
        }
-
-       err = FDFGetFile(fdf, NULL, 0,  &nr);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-       if(nr == 0)
-               RETURN_STRING(empty_string, 1);
-       buf = emalloc(nr);
-       err = FDFGetFile(fdf, buf, nr,  &nr);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
 
-       RETURN_STRING(buf, 0);
+       RETVAL_STRING(buf, 1);
+       efree(buf);
 }
 /* }}} */
+
 
-/* {{{ proto boolean fdf_save(int fdfdoc, string filename)
-   Writes out an FDF file */
-PHP_FUNCTION(fdf_save) {
-       pval **arg1, **arg2;
-       int id, type;
+/* {{{ proto bool fdf_save(int fdfdoc, string filename)
+   Write out the FDF file */
+PHP_FUNCTION(fdf_save) 
+{
+       zval **fdfp, **filename;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
+       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &filename) == 
+FAILURE) {
                WRONG_PARAM_COUNT;
        }
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       convert_to_string_ex(filename);
+       err = FDFSave(fdf, Z_STRVAL_PP(filename));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error saving fdf document into filename: %s", 
+Z_STRVAL_PP(filename));
                RETURN_FALSE;
        }
 
-       err = FDFSave(fdf, (*arg2)->value.str.val);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
-
        RETURN_TRUE;
-} /* }}} */
+
+} 
+/* }}} */
+
 
-/* {{{ proto boolean fdf_add_template(int fdfdoc, int newpage, string filename, 
string template, int rename)
-   Adds a template to the FDF */
-PHP_FUNCTION(fdf_add_template) {
-       pval **arg1, **arg2, **arg3, **arg4, **arg5;
-       int id, type;
+/* {{{ proto bool fdf_add_template(int fdfdoc, int newpage, string filename, string 
+template, int rename)
+   Add a template into the FDF document */
+PHP_FUNCTION(fdf_add_template) 
+{
+       zval **fdfp, **newpage, **filename, **template, **rename;
        FDFDoc fdf;
        FDFErc err;
        pdfFileSpecRec filespec;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2,&arg3, 
&arg4, &arg5) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &newpage, 
+&filename, &template, &rename) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(arg1);
-       convert_to_long_ex(arg2);
-       convert_to_string_ex(arg3);
-       convert_to_string_ex(arg4);
-       convert_to_long_ex(arg5);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
-               RETURN_FALSE;
-       }
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
 
+       convert_to_long_ex(newpage);
+       convert_to_string_ex(filename);
+       convert_to_string_ex(template);
+       convert_to_long_ex(rename);
+
        filespec.FS = NULL;
-       filespec.F = (*arg3)->value.str.val;
+       filespec.F = Z_STRVAL_PP(filename);
        filespec.Mac = NULL;
        filespec.DOS = NULL;
        filespec.Unix = NULL;
        filespec.ID[0] = NULL;
        filespec.ID[1] = NULL;
        filespec.bVolatile = false;
-       err = FDFAddTemplate(fdf, (*arg2)->value.lval, 
&filespec,(*arg4)->value.str.val, (*arg5)->value.lval);
-       if(err != FDFErcOK)
-               printf("Aiii, error\n");
+
+       err = FDFAddTemplate(fdf, Z_LVAL_PP(newpage), &filespec, 
+Z_STRVAL_PP(template), Z_LVAL_PP(rename));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error adding template: %s into fdf document", 
+Z_STRVAL_PP(template));
+               RETURN_FALSE;
+       }
 
        RETURN_TRUE;
 }
 /* }}} */
 
-/* {{{ proto boolean fdf_set_flags(int fdfdoc, string fieldname, int whichflags, int 
newflags)
-   Modifies a flag for a field in the FDF */
-PHP_FUNCTION(fdf_set_flags) {
-       pval **arg1, **arg2, **arg3, **arg4;
-       int id, type;
+
+/* {{{ proto bool fdf_set_flags(int fdfdoc, string fieldname, int whichflags, int 
+newflags)
+   Set flags for a field in the FDF document. */
+PHP_FUNCTION(fdf_set_flags) 
+{
+       zval **fdfp, **fieldname, **flags, **newflags;
        FDFDoc fdf;
        FDFErc err;
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2,&arg3, 
&arg4) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, 
+&flags, &newflags) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       convert_to_long_ex(arg3);
-       convert_to_long_ex(arg4);       
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       convert_to_string_ex(fieldname);
+       convert_to_long_ex(flags);
+       convert_to_long_ex(newflags);   
+
+       err=FDFSetFlags(fdf,Z_STRVAL_PP(fieldname), Z_LVAL_PP(flags), 
+Z_LVAL_PP(newflags));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting flags for field: %s", 
+Z_STRVAL_PP(fieldname));
                RETURN_FALSE;
        }
 
-       
err=FDFSetFlags(fdf,(*arg2)->value.str.val,(*arg3)->value.lval,(*arg4)->value.lval);
-       if(err != FDFErcOK)
-               printf("Error setting FDF flags: %d\n",err);
-
        RETURN_TRUE;
 }
 /* }}} */
+
 
-/* {{{ proto boolean fdf_set_opt(int fdfdoc, string fieldname, int element, string 
value, string name)
-   Sets a value in the opt array for a field in the FDF */
-PHP_FUNCTION(fdf_set_opt) {
-       pval **arg1, **arg2, **arg3, **arg4, **arg5;
-       int id, type;
+/* {{{ proto bool fdf_set_opt(int fdfdoc, string fieldname, int element, string 
+value, string name)
+   Set a value in the opt array for a field. */
+PHP_FUNCTION(fdf_set_opt)
+{
+       zval **fdfp, **fieldname, **element, **value, **name;
        FDFDoc fdf;
        FDFErc err;     
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2,&arg3, 
&arg4, &arg5) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, 
+&element, &value, &name) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       convert_to_string_ex(fieldname);
+       convert_to_long_ex(element);
+       convert_to_string_ex(value);
+       convert_to_string_ex(name);
 
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       convert_to_long_ex(arg3);
-       convert_to_string_ex(arg4);
-       convert_to_string_ex(arg5);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+       err = FDFSetOpt(fdf,Z_STRVAL_PP(fieldname), Z_LVAL_PP(element), 
+Z_STRVAL_PP(value), Z_STRVAL_PP(name));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting FDF option for field: %s", 
+Z_STRVAL_PP(fieldname));
                RETURN_FALSE;
        }
-       
-       err = 
FDFSetOpt(fdf,(*arg2)->value.str.val,(*arg3)->value.lval,(*arg4)->value.str.val,(*arg5)->value.str.val);
-       if(err != FDFErcOK)
-               printf("Error setting FDF option: %d",err);
-
        RETURN_TRUE;
 }
 /* }}} */
+
 
-/* {{{ proto booelan fdf_set_submit_form_action(int fdfdoc, string fieldname, int 
whichtrigger, string url, int flags)
-   Sets the submit form action for a field in the FDF */
-PHP_FUNCTION(fdf_set_submit_form_action) {
-       pval **arg1, **arg2, **arg3, **arg4, **arg5;
-       int id, type;
+/* {{{ proto bool fdf_set_submit_form_action(int fdfdoc, string fieldname, int 
+whichtrigger, string url, int flags)
+   Set the submit form action for a field. */
+PHP_FUNCTION(fdf_set_submit_form_action) 
+{
+       zval **fdfp, **fieldname, **trigger, **url, **flags;
        FDFDoc fdf;
        FDFErc err;     
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2,&arg3, 
&arg4, &arg5) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, 
+&trigger, &url, &flags) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       convert_to_long_ex(arg3);
-       convert_to_string_ex(arg4);
-       convert_to_long_ex(arg5);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       convert_to_string_ex(fieldname);
+       convert_to_long_ex(trigger);
+       convert_to_string_ex(url);
+       convert_to_long_ex(flags);
+
+       err = FDFSetSubmitFormAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), 
+Z_STRVAL_PP(url), Z_LVAL_PP(flags));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting FDF submit action for field: %s", 
+Z_STRVAL_PP(fieldname));
                RETURN_FALSE;
        }
-       
-       err = 
FDFSetSubmitFormAction(fdf,(*arg2)->value.str.val,(*arg3)->value.lval,(*arg4)->value.str.val,(*arg5)->value.lval);
-       if(err != FDFErcOK)
-               printf("Error setting FDF submit action: %d",err);
-
        RETURN_TRUE;
 }
+/* }}} */
 
-/* {{{ proto boolean fdf_set_javascript_action(int fdfdoc, string fieldname, int 
whichtrigger, string script)
-   Sets the javascript action for a field in the FDF */
-PHP_FUNCTION(fdf_set_javascript_action) {
-       pval **arg1, **arg2, **arg3, **arg4;
-       int id, type;
+
+/* {{{ proto bool fdf_set_javascript_action(int fdfdoc, string fieldname, int 
+whichtrigger, string script)
+   Set the javascript action for a field. */
+PHP_FUNCTION(fdf_set_javascript_action) 
+{
+       zval **fdfp, **fieldname, **trigger, **script;
        FDFDoc fdf;
        FDFErc err;     
-       FDF_TLS_VARS;
 
-       if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &arg1, &arg2,&arg3, 
&arg4) == FAILURE) {
+       if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, 
+&trigger, &script) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long_ex(arg1);
-       convert_to_string_ex(arg2);
-       convert_to_long_ex(arg3);
-       convert_to_string_ex(arg4);
-       id=(*arg1)->value.lval;
-       fdf = zend_list_find(id,&type);
-       if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
-               php_error(E_WARNING,"Unable to find file identifier %d",id);
+
+       ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf);
+
+       convert_to_string_ex(fieldname);
+       convert_to_long_ex(trigger);
+       convert_to_string_ex(script);
+       
+       err = FDFSetJavaScriptAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), 
+Z_STRVAL_PP(script));
+       if(err != FDFErcOK) {
+               php_error(E_WARNING,"Error setting FDF javascript action for field: 
+%s", Z_STRVAL_PP(fieldname));
                RETURN_FALSE;
        }
-       
-       err = 
FDFSetJavaScriptAction(fdf,(*arg2)->value.str.val,(*arg3)->value.lval,(*arg4)->value.str.val);
-       if(err != FDFErcOK)
-               printf("Error setting FDF JavaScript action: %d",err);
-
        RETURN_TRUE;
 }
-
+/* }}} */
 
+/* SAPI post handler for FDF forms */
 SAPI_POST_HANDLER_FUNC(fdf_post_handler)
 {
        FILE *fp;
Index: php4/ext/fdf/php_fdf.h
diff -u php4/ext/fdf/php_fdf.h:1.11 php4/ext/fdf/php_fdf.h:1.12
--- php4/ext/fdf/php_fdf.h:1.11 Sun Feb 25 22:06:54 2001
+++ php4/ext/fdf/php_fdf.h      Fri Apr  6 16:17:31 2001
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_fdf.h,v 1.11 2001/02/26 06:06:54 andi Exp $ */
+/* $Id: php_fdf.h,v 1.12 2001/04/06 23:17:31 sniper Exp $ */
 
 #ifndef PHP_FDF_H
 #define PHP_FDF_H
@@ -32,8 +32,8 @@
 extern zend_module_entry fdf_module_entry;
 #define fdf_module_ptr &fdf_module_entry
 
-extern PHP_MINIT_FUNCTION(fdf);
-extern PHP_MSHUTDOWN_FUNCTION(fdf);
+PHP_MINIT_FUNCTION(fdf);
+PHP_MSHUTDOWN_FUNCTION(fdf);
 PHP_MINFO_FUNCTION(fdf);
 
 PHP_FUNCTION(fdf_open);
@@ -53,6 +53,7 @@
 PHP_FUNCTION(fdf_set_opt);
 PHP_FUNCTION(fdf_set_submit_form_action);
 PHP_FUNCTION(fdf_set_javascript_action);
+
 #else
 #define fdf_module_ptr NULL
 #endif

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to