]> granicus.if.org Git - php/commitdiff
Moved ext/yaz to PECL.
authorWez Furlong <wez@php.net>
Wed, 21 Apr 2004 08:56:34 +0000 (08:56 +0000)
committerWez Furlong <wez@php.net>
Wed, 21 Apr 2004 08:56:34 +0000 (08:56 +0000)
ext/yaz/CREDITS [deleted file]
ext/yaz/README [deleted file]
ext/yaz/config.m4 [deleted file]
ext/yaz/config.w32 [deleted file]
ext/yaz/package.xml [deleted file]
ext/yaz/php_yaz.c [deleted file]
ext/yaz/php_yaz.h [deleted file]
ext/yaz/yaz.dsp [deleted file]

diff --git a/ext/yaz/CREDITS b/ext/yaz/CREDITS
deleted file mode 100644 (file)
index e44f215..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-YAZ
-Adam Dickmeiss
diff --git a/ext/yaz/README b/ext/yaz/README
deleted file mode 100644 (file)
index 2ee3ac1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-This extension implements a Z39.50 client for PHP using the YAZ toolkit.
-
-Find more information at:
-  http://www.indexdata.dk/phpyaz/
-  http://www.indexdata.dk/yaz/
diff --git a/ext/yaz/config.m4 b/ext/yaz/config.m4
deleted file mode 100644 (file)
index c6a950c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-dnl
-dnl $Id$
-dnl
-
-PHP_ARG_WITH(yaz,for YAZ support,
-[  --with-yaz[=DIR]        Include YAZ support (ANSI/NISO Z39.50). 
-                          DIR is the YAZ bin install directory.])
-
-
-if test "$PHP_YAZ" != "no"; then
-  yazconfig=NONE
-  if test "$PHP_YAZ" = "yes"; then
-    AC_PATH_PROG(yazconfig, yaz-config, NONE)
-  else
-    if test -r ${PHP_YAZ}/yaz-config; then
-      yazconfig=${PHP_YAZ}/yaz-config
-    else
-      yazconfig=${PHP_YAZ}/bin/yaz-config
-    fi
-  fi
-
-  if test -f $yazconfig; then
-    AC_DEFINE(HAVE_YAZ,1,[Whether you have YAZ])
-    . $yazconfig
-
-    dnl Check version (2.0.13 or greater required)
-    AC_MSG_CHECKING([for YAZ version])
-    yaz_version=`echo $YAZVERSION | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
-    echo $yaz_version
-    if test "$yaz_version" -ge 2000013; then
-      AC_MSG_RESULT([$YAZVERSION])
-    else
-      AC_MSG_ERROR([YAZ version 2.0.13 or later required.])
-    fi
-
-    for c in $YAZLIB; do
-      case $c in
-       -L*)
-         dir=`echo $c|cut -c 3-|sed 's%/\.libs%%g'`
-         PHP_ADD_LIBPATH($dir,YAZ_SHARED_LIBADD)
-        ;;
-       -l*)
-         lib=`echo $c|cut -c 3-`
-         PHP_ADD_LIBRARY($lib,,YAZ_SHARED_LIBADD)
-        ;;
-      esac
-    done
-    PHP_EVAL_INCLINE($YAZINC)
-    PHP_NEW_EXTENSION(yaz, php_yaz.c, $ext_shared)
-    PHP_SUBST(YAZ_SHARED_LIBADD)
-  else
-    AC_MSG_ERROR([YAZ not found (missing $yazconfig)])
-  fi
-fi
diff --git a/ext/yaz/config.w32 b/ext/yaz/config.w32
deleted file mode 100644 (file)
index b4c6551..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-ARG_WITH("yaz", "YAZ support (ANSI/NISO Z39.50)", "no");
-
-// this is a temporary hack
-function yaz_check_version()
-{
-       var c = null;
-       var v;
-       var yaz_h = CHECK_HEADER_ADD_INCLUDE("yaz/yaz-version.h", "CFLAGS_YAZ", PHP_YAZ);
-
-       if (!yaz_h) {
-               return false;
-       }
-
-       c = file_get_contents(yaz_h + "\\yaz\\yaz-version.h");
-       if (c.match(/YAZ_VERSIONL\s+(0x[a-zA-Z0-9]+)/)) {
-               v = RegExp.$1;
-               if (parseInt(v) >= 0x20000) {
-                       return true;
-               }
-               WARNING("yaz not enabled; version 2.0 or higher required; you have version " + v);
-       }
-       return false;
-}
-
-if (PHP_YAZ != "no") {
-       if (yaz_check_version() && CHECK_LIB("yaz.lib", "yaz", PHP_YAZ)) {
-               EXTENSION('yaz', 'php_yaz.c');
-               AC_DEFINE('HAVE_YAZ', 1);
-       } else {
-               WARNING("yaz not enabled; libraries and headers not found");
-       }
-}
-
diff --git a/ext/yaz/package.xml b/ext/yaz/package.xml
deleted file mode 100644 (file)
index e7de1ed..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "../pear/package.dtd">
-<package>
- <name>yaz</name>
- <summary>a Z39.50 client for PHP</summary>
- <maintainers>
-  <maintainer>
-   <user>dickmeiss</user>
-   <name>Adam Dickmeiss</name>
-   <email>adam@indexdata.dk</email>
-   <role>lead</role>
-  </maintainer>
- </maintainers>
- <description>
-This extension implements a Z39.50 client for PHP using the YAZ toolkit.
-
-Find more information at:
-  http://www.indexdata.dk/phpyaz/
-  http://www.indexdata.dk/yaz/
- </description>
- <license>PHP</license>
- <release>
-  <state>beta</state>
-  <version>5.0rc1</version>
-  <date>2004-03-19</date>
-  <notes>
-package.xml added to support intallation using pear installer
-  </notes>
-  <configureoptions>
-    <configureoption name="with-pdf" default="autodetect" prompt="path to pdflib installation?"/>
-  </configureoptions>
-  <filelist>
-   <file role="doc" name="CREDITS"/>
-   <file role="doc" name="README"/>
-   <file role="src" name="config.m4"/>
-   <file role="src" name="config.mw32"/>
-   <file role="src" name="yaz.dsp"/>
-   <file role="src" name="php_yaz.c"/>
-   <file role="src" name="php_yaz.h"/>
-  </filelist>
-  <deps>
-   <dep type="php" rel="ge" version="5" />
-  </deps>
- </release>
-</package>
-<!--
-vim:et:ts=1:sw=1
--->
diff --git a/ext/yaz/php_yaz.c b/ext/yaz/php_yaz.c
deleted file mode 100644 (file)
index 7364eb4..0000000
+++ /dev/null
@@ -1,1876 +0,0 @@
-/*
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2004 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.0 of the PHP license,       |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_0.txt.                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Author: Adam Dickmeiss <adam@indexdata.dk>                           |
-   +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-
-#if HAVE_YAZ
-
-#include "ext/standard/info.h"
-#include "php_yaz.h"
-
-#include <yaz/yaz-version.h>
-
-#ifndef YAZ_VERSIONL
-#error YAZ version 2.0.13 or later must be used.
-#elif YAZ_VERSIONL < 0x02000D
-#error YAZ version 2.0.13 or later must be used.
-#endif
-
-#ifdef PHP_WIN32
-#include <process.h>
-#endif
-
-#include <yaz/proto.h>
-#include <yaz/marcdisp.h>
-#include <yaz/yaz-util.h>
-#include <yaz/yaz-ccl.h>
-#include <yaz/zoom.h>
-
-#define MAX_ASSOC 200
-
-typedef struct Yaz_AssociationInfo *Yaz_Association;
-
-struct Yaz_AssociationInfo {
-       CCL_parser ccl_parser;
-       ZOOM_connection zoom_conn;
-       ZOOM_resultset zoom_set;
-       ZOOM_scanset zoom_scan;
-       ZOOM_package zoom_package;
-       char *sort_criteria;
-       int persistent;
-       int in_use;
-       int order;
-       int zval_resource;
-       long time_stamp;
-};
-
-static Yaz_Association yaz_association_mk()
-{
-       Yaz_Association p = xmalloc (sizeof(*p));
-
-       p->zoom_conn = ZOOM_connection_create (0);
-       p->zoom_set = 0;
-       p->zoom_scan = 0;
-       p->zoom_package = 0;
-       ZOOM_connection_option_set(p->zoom_conn, "implementationName", "PHP");
-       ZOOM_connection_option_set(p->zoom_conn, "async", "1");
-       p->sort_criteria = 0;
-       p->in_use = 0;
-       p->order = 0;
-       p->persistent = 0;
-       p->ccl_parser = ccl_parser_create();
-       p->ccl_parser->bibset = 0;
-       p->time_stamp = 0;
-       return p;
-}
-
-static void yaz_association_destroy (Yaz_Association p)
-{
-       if (!p) {
-               return;
-       }
-
-       ZOOM_resultset_destroy(p->zoom_set);
-       ZOOM_scanset_destroy(p->zoom_scan);
-       ZOOM_package_destroy(p->zoom_package);
-       ZOOM_connection_destroy(p->zoom_conn);
-       xfree(p->sort_criteria);
-       ccl_qual_rm(&p->ccl_parser->bibset);
-       ccl_parser_destroy(p->ccl_parser);
-}
-
-#ifdef ZTS
-static MUTEX_T yaz_mutex;
-#endif
-
-ZEND_DECLARE_MODULE_GLOBALS(yaz);
-
-static Yaz_Association *shared_associations;
-static int order_associations;
-static int le_link;
-
-
-#ifdef COMPILE_DL_YAZ
-ZEND_GET_MODULE(yaz)
-#endif
-
-#ifdef ZEND_BEGIN_ARG_INFO
-    ZEND_BEGIN_ARG_INFO(second_argument_force_ref, 0)
-        ZEND_ARG_PASS_INFO(0)
-        ZEND_ARG_PASS_INFO(1)
-    ZEND_END_ARG_INFO();
-
-    ZEND_BEGIN_ARG_INFO(third_argument_force_ref, 0)
-        ZEND_ARG_PASS_INFO(0)
-        ZEND_ARG_PASS_INFO(1)
-    ZEND_END_ARG_INFO();
-#else
-static unsigned char second_argument_force_ref[] = {
-        2, BYREF_NONE, BYREF_FORCE };
-static unsigned char third_argument_force_ref[] = {
-        3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-#endif
-
-
-function_entry yaz_functions [] = {
-       PHP_FE(yaz_connect, NULL)
-       PHP_FE(yaz_close, NULL)
-       PHP_FE(yaz_search, NULL)
-       PHP_FE(yaz_wait, second_argument_force_ref)
-       PHP_FE(yaz_errno, NULL)
-       PHP_FE(yaz_error, NULL)
-       PHP_FE(yaz_addinfo, NULL)
-       PHP_FE(yaz_hits, NULL)
-       PHP_FE(yaz_record, NULL)
-       PHP_FE(yaz_syntax, NULL)
-       PHP_FE(yaz_element, NULL)
-       PHP_FE(yaz_range, NULL)
-       PHP_FE(yaz_itemorder, NULL)
-       PHP_FE(yaz_es_result, NULL)
-       PHP_FE(yaz_scan, NULL)
-       PHP_FE(yaz_scan_result, second_argument_force_ref)
-       PHP_FE(yaz_present, NULL)
-       PHP_FE(yaz_ccl_conf, NULL)
-       PHP_FE(yaz_ccl_parse, third_argument_force_ref)
-       PHP_FE(yaz_database, NULL)
-       PHP_FE(yaz_sort, NULL)
-       PHP_FE(yaz_schema, NULL)
-       PHP_FE(yaz_set_option, NULL)
-       PHP_FE(yaz_get_option, NULL)
-       PHP_FE(yaz_es, NULL)
-       {NULL, NULL, NULL}
-};
-
-static void get_assoc(INTERNAL_FUNCTION_PARAMETERS, pval **id, Yaz_Association *assocp)
-{
-       Yaz_Association *as = 0;
-       
-       *assocp = 0;
-#ifdef ZTS
-       tsrm_mutex_lock (yaz_mutex);
-#endif
-
-       ZEND_FETCH_RESOURCE(as, Yaz_Association *, id, -1, "YAZ link", le_link);
-
-       if (as && *as && (*as)->order == YAZSG(assoc_seq) && (*as)->in_use) {
-               *assocp = *as;
-       } else {
-#ifdef ZTS
-               tsrm_mutex_unlock (yaz_mutex);
-#endif
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid YAZ handle");
-       }
-}
-
-static void release_assoc(Yaz_Association assoc)
-{
-#ifdef ZTS
-       if (assoc) {
-               tsrm_mutex_unlock(yaz_mutex);
-       }
-#endif
-}
-
-static const char *array_lookup_string(HashTable *ht, const char *idx)
-{
-       pval **pvalue;
-
-       if (ht && zend_hash_find(ht, (char *) idx, strlen(idx) + 1, (void **) &pvalue) == SUCCESS) {
-               SEPARATE_ZVAL(pvalue);
-               convert_to_string(*pvalue);
-               return (*pvalue)->value.str.val;
-       }
-       return 0;
-}
-
-static long *array_lookup_long(HashTable *ht, const char *idx)
-{
-       pval **pvalue;
-
-       if (ht && zend_hash_find(ht, (char *) idx, strlen(idx) + 1, (void **) &pvalue) == SUCCESS) {
-               SEPARATE_ZVAL(pvalue);
-               convert_to_long(*pvalue);
-               return &(*pvalue)->value.lval;
-       }
-       return 0;
-}
-
-static long *array_lookup_bool(HashTable *ht, const char *idx)
-{
-       pval **pvalue;
-
-       if (ht && zend_hash_find(ht, (char *) idx, strlen(idx) + 1, (void **) &pvalue) == SUCCESS) {
-               SEPARATE_ZVAL(pvalue);
-               convert_to_boolean(*pvalue);
-               return &(*pvalue)->value.lval;
-       }
-       return 0;
-}
-
-static const char *option_get(Yaz_Association as, const char *name)
-{
-       if (!as) {
-               return 0;
-       }
-       return ZOOM_connection_option_get(as->zoom_conn, name);
-}
-
-static int option_get_int(Yaz_Association as, const char *name, int def)
-{
-       const char *v;
-
-       v = ZOOM_connection_option_get(as->zoom_conn, name);
-
-       if (!v) {
-               return def;
-       }
-
-       return atoi(v);
-}
-
-static void option_set(Yaz_Association as, const char *name, const char *value)
-{
-       if (as && value) {
-               ZOOM_connection_option_set(as->zoom_conn, name, value);
-       }
-}
-
-static void option_set_int(Yaz_Association as, const char *name, int v)
-{
-       if (as) {
-               char s[30];
-
-               sprintf (s, "%d", v);
-               ZOOM_connection_option_set(as->zoom_conn, name, s);
-       }
-}
-
-static int strcmp_null(const char *s1, const char *s2)
-{
-       if (s1 == 0 && s2 == 0) {
-               return 0;
-       }
-       if (s1 == 0 || s2 == 0) {
-               return -1;
-       }
-       return strcmp(s1, s2);
-}
-
-/* {{{ proto resource yaz_connect(string zurl [, array options])
-   Create target with given zurl. Returns positive id if successful. */
-PHP_FUNCTION(yaz_connect)
-{
-       int i;
-       char *cp;
-       char *zurl_str;
-       const char *user_str = 0, *group_str = 0, *pass_str = 0;
-       const char *cookie_str = 0, *proxy_str = 0;
-       const char *charset_str = 0;
-       const char *client_IP = 0;
-       const char *otherInfo[3];
-       int persistent = 1;
-       int piggyback = 1;
-       pval **zurl, **user = 0;
-       Yaz_Association as;
-
-       otherInfo[0] = otherInfo[1] = otherInfo[2] = 0;
-
-       if (ZEND_NUM_ARGS() == 1) {
-               if (zend_get_parameters_ex (1, &zurl) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-       } else if (ZEND_NUM_ARGS() == 2) {
-               if (zend_get_parameters_ex (2, &zurl, &user) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-
-               if (Z_TYPE_PP(user) == IS_ARRAY) {
-                       long *persistent_val;
-                       long *piggyback_val;
-                       HashTable *ht = Z_ARRVAL_PP(user);
-
-                       user_str = array_lookup_string(ht, "user");
-                       group_str = array_lookup_string(ht, "group");
-                       pass_str = array_lookup_string(ht, "password");
-                       cookie_str = array_lookup_string(ht, "cookie");
-                       proxy_str = array_lookup_string(ht, "proxy");
-                       charset_str = array_lookup_string(ht, "charset");
-                       persistent_val = array_lookup_bool(ht, "persistent");
-                       if (persistent_val) {
-                               persistent = *persistent_val;
-                       }
-                       piggyback_val = array_lookup_bool(ht, "piggyback");
-                       if (piggyback_val) {
-                               piggyback = *piggyback_val;
-                       }
-                       otherInfo[0] = array_lookup_string(ht, "otherInfo0");
-                       otherInfo[1] = array_lookup_string(ht, "otherInfo1");
-                       otherInfo[2] = array_lookup_string(ht, "otherInfo2");
-               } else if (Z_TYPE_PP(user) == IS_STRING) {
-                       convert_to_string_ex(user);
-                       if (*(*user)->value.str.val)
-                               user_str = (*user)->value.str.val;
-               }
-       } else {
-               WRONG_PARAM_COUNT;
-       }
-       convert_to_string_ex(zurl);
-       zurl_str = (*zurl)->value.str.val;
-       for (cp = zurl_str; *cp && strchr("\t\n ", *cp); cp++);
-       if (!*cp) {
-               RETURN_LONG(0);
-       }
-       /* see if we have it already ... */
-#ifdef ZTS
-       tsrm_mutex_lock(yaz_mutex);
-#endif
-       for (i = 0; i < YAZSG(max_links); i++) {
-               as = shared_associations[i];
-               if (persistent && as && !as->in_use &&
-                       !strcmp_null(option_get(as, "host"), zurl_str) &&
-                       !strcmp_null(option_get(as, "proxy"), proxy_str) &&
-                       !strcmp_null(option_get(as, "user"), user_str) &&
-                       !strcmp_null(option_get(as, "group"), group_str) &&
-                       !strcmp_null(option_get(as, "pass"), pass_str) &&
-                       !strcmp_null(option_get(as, "cookie"), cookie_str) &&
-                       !strcmp_null(option_get(as, "charset"), charset_str))
-                       break;
-       }
-       if (i == YAZSG(max_links)) {
-               /* we didn't have it (or already in use) */
-               int i0 = -1;
-               int min_order = 2000000000;
-
-               /* find completely free slot or the oldest one */
-               for (i = 0; i < YAZSG(max_links) && shared_associations[i]; i++) {
-                       as = shared_associations[i];
-                       if (persistent && !as->in_use && as->order < min_order) {
-                               min_order = as->order;
-                               i0 = i;
-                       }
-               }
-
-               if (i == YAZSG(max_links)) {
-                       i = i0;
-                       if (i == -1) {
-#ifdef ZTS
-                               tsrm_mutex_unlock (yaz_mutex);
-#endif
-                               RETURN_LONG(0);                  /* no free slot */
-                       } else {                                         /* "best" free slot */
-                               yaz_association_destroy(shared_associations[i]);
-                       }
-               }
-               shared_associations[i] = as = yaz_association_mk ();
-
-               option_set(as, "proxy", proxy_str);
-               option_set(as, "user", user_str);
-               option_set(as, "group", group_str);
-               option_set(as, "pass", pass_str);
-               option_set(as, "cookie", cookie_str);
-               option_set(as, "charset", charset_str);
-       }
-       option_set(as, "otherInfo0", otherInfo[0]);
-       option_set(as, "otherInfo1", otherInfo[1]);
-       option_set(as, "otherInfo2", otherInfo[2]);
-       option_set(as, "clientIP", client_IP);
-       option_set(as, "piggyback", piggyback ? "1" : "0");
-       ZOOM_connection_connect(as->zoom_conn, zurl_str, 0);
-       as->in_use = 1;
-       as->persistent = persistent;
-       as->order = YAZSG(assoc_seq);
-       as->time_stamp = time(0);
-#ifdef ZTS
-       tsrm_mutex_unlock (yaz_mutex);
-#endif
-
-       ZEND_REGISTER_RESOURCE(return_value, &shared_associations[i], le_link);
-       as->zval_resource = Z_LVAL_P(return_value);
-}
-/* }}} */
-
-/* {{{ proto bool yaz_close(resource id)
-   Destory and close target */
-PHP_FUNCTION(yaz_close)
-{
-       Yaz_Association p;
-       pval **id;
-
-       if (ZEND_NUM_ARGS() != 1) {
-               WRONG_PARAM_COUNT;
-       }
-       if (zend_get_parameters_ex (1, &id) == FAILURE) {
-               RETURN_FALSE;
-       }
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (!p) {
-               RETURN_FALSE;
-       }
-       release_assoc(p);
-       zend_list_delete((*id)->value.lval);
-
-       RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool yaz_search(resource id, string type, string query)
-   Specify query of type for search - returns true if successful */
-PHP_FUNCTION(yaz_search)
-{
-       char *query_str, *type_str;
-       pval **id, **type, **query;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() == 3) {
-               if (zend_get_parameters_ex(3, &id, &type, &query) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-       } else {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (!p) {
-               RETURN_FALSE;
-       }
-
-       convert_to_string_ex(type);
-       type_str = (*type)->value.str.val;
-       convert_to_string_ex(query);
-       query_str = (*query)->value.str.val;
-
-       ZOOM_resultset_destroy(p->zoom_set);
-       p->zoom_set = 0;
-
-       if (!strcmp(type_str, "rpn")) {
-               ZOOM_query q = ZOOM_query_create();
-               ZOOM_query_prefix(q, query_str);
-               if (p->sort_criteria) {
-                       ZOOM_query_sortby(q, p->sort_criteria);
-               }
-               xfree(p->sort_criteria);
-               p->sort_criteria = 0;
-               p->zoom_set = ZOOM_connection_search(p->zoom_conn, q);
-               ZOOM_query_destroy(q);
-               RETVAL_TRUE;
-       }
-       if (!strcmp(type_str, "cql")) {
-               ZOOM_query q = ZOOM_query_create();
-               ZOOM_query_cql(q, query_str);
-               if (p->sort_criteria) {
-                       ZOOM_query_sortby(q, p->sort_criteria);
-               }
-               xfree (p->sort_criteria);
-               p->sort_criteria = 0;
-               p->zoom_set = ZOOM_connection_search(p->zoom_conn, q);
-               ZOOM_query_destroy(q);
-               RETVAL_TRUE;
-       } else {
-               RETVAL_FALSE;
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto bool yaz_present(resource id)
-   Retrieve records */
-PHP_FUNCTION(yaz_present)
-{
-       pval **id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 1) {
-               WRONG_PARAM_COUNT;
-       }
-       if (zend_get_parameters_ex(1, &id) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (!p) {
-               RETURN_FALSE;
-       }
-
-       if (p->zoom_set) {
-               size_t start = option_get_int(p, "start", 0);
-               size_t count = option_get_int(p, "count", 0);
-               if (count > 0) {
-                       ZOOM_resultset_records(p->zoom_set, 0 /* recs */, start, count);
-               }
-       }
-       release_assoc(p);
-       RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto bool yaz_wait([array options])
-   Process events. */
-PHP_FUNCTION(yaz_wait)
-{
-       pval **pval_options = 0;
-       int event_mode = 0;
-       int no = 0;
-       ZOOM_connection conn_ar[MAX_ASSOC];
-       Yaz_Association conn_as[MAX_ASSOC];
-       int i, timeout = 15;
-
-       if (ZEND_NUM_ARGS() == 1) {
-               long *val = 0;
-               long *event_bool = 0;
-               HashTable *options_ht = 0;
-               if (zend_get_parameters_ex(1, &pval_options) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-               if (Z_TYPE_PP(pval_options) != IS_ARRAY) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array parameter");
-                       RETURN_FALSE;
-               }
-               options_ht = Z_ARRVAL_PP(pval_options);
-               val = array_lookup_long(options_ht, "timeout");
-               if (val) {
-                       timeout = *val;
-               }
-               event_bool = array_lookup_bool(options_ht, "event");
-               if (event_bool && *event_bool)
-                       event_mode = 1;
-       }
-#ifdef ZTS
-       tsrm_mutex_lock(yaz_mutex);
-#endif
-       for (i = 0; i<YAZSG(max_links); i++) {
-               Yaz_Association p = shared_associations[i];
-               if (p && p->order == YAZSG(assoc_seq)) {
-                       char str[20];
-
-                       sprintf(str, "%d", timeout);
-                       ZOOM_connection_option_set(p->zoom_conn, "timeout", str);
-                       conn_as[no] = p;
-                       conn_ar[no++] = p->zoom_conn;
-               }
-       }
-#ifdef ZTS
-       tsrm_mutex_unlock(yaz_mutex);
-#endif
-       if (event_mode) {
-               long ev = ZOOM_event(no, conn_ar);
-               if (ev <= 0) {
-                       RETURN_FALSE;
-               } else {
-                       Yaz_Association p = conn_as[ev-1];
-                       int event_code = ZOOM_connection_last_event(p->zoom_conn);
-
-                       add_assoc_long(*pval_options, "connid", ev);
-
-                       add_assoc_long(*pval_options, "eventcode", event_code);
-
-                       zend_list_addref(p->zval_resource);
-                       Z_LVAL_P(return_value) = p->zval_resource;
-                       Z_TYPE_P(return_value) = IS_RESOURCE;
-                       return;
-               }
-       }
-
-       if (no) {
-               while (ZOOM_event (no, conn_ar))
-                       ;
-       }
-       RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto int yaz_errno(resource id)
-   Return last error number (>0 for bib-1 diagnostic, <0 for other error, 0 for no error */
-PHP_FUNCTION(yaz_errno)
-{
-       pval **id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (!p) {
-               RETURN_LONG(0);
-       }
-       RETVAL_LONG(ZOOM_connection_errcode(p->zoom_conn));
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto string yaz_error(resource id)
-   Return last error message */
-PHP_FUNCTION(yaz_error)
-{
-       pval **id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (p) {
-               int code = ZOOM_connection_errcode(p->zoom_conn);
-               const char *msg = ZOOM_connection_errmsg(p->zoom_conn);
-
-               if (!code) {
-                       msg = "";
-               }
-               return_value->value.str.len = strlen(msg);
-               return_value->value.str.val = estrndup(msg, return_value->value.str.len);
-               return_value->type = IS_STRING;
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto string yaz_addinfo(resource id)
-   Return additional info for last error (empty string if none) */
-PHP_FUNCTION(yaz_addinfo)
-{
-       pval **id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (p) {
-               const char *addinfo = ZOOM_connection_addinfo(p->zoom_conn);
-
-               return_value->value.str.len = strlen(addinfo);
-               return_value->value.str.val = estrndup(addinfo, return_value->value.str.len);
-               return_value->type = IS_STRING;
-       }                
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto int yaz_hits(resource id)
-   Return number of hits (result count) for last search */
-PHP_FUNCTION(yaz_hits)
-{
-       pval **id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &id) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, id, &p);
-       if (p && p->zoom_set) {
-               RETVAL_LONG(ZOOM_resultset_size(p->zoom_set));
-       } else {
-               RETVAL_LONG(0);
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-static Z_GenericRecord *marc_to_grs1(const char *buf, ODR o)
-{
-       int entry_p;
-       int record_length;
-       int indicator_length;
-       int identifier_length;
-       int base_address;
-       int length_data_entry;
-       int length_starting;
-       int length_implementation;
-       int max_elements = 256;
-       Z_GenericRecord *r = odr_malloc (o, sizeof(*r));
-       r->elements = odr_malloc (o, sizeof(*r->elements) * max_elements);
-       r->num_elements = 0;
-       
-       record_length = atoi_n(buf, 5);
-       if (record_length < 25) {
-               return 0;
-       }
-       indicator_length = atoi_n(buf + 10, 1);
-       identifier_length = atoi_n(buf + 11, 1);
-       base_address = atoi_n(buf + 12, 5);
-       
-       length_data_entry = atoi_n(buf + 20, 1);
-       length_starting = atoi_n(buf + 21, 1);
-       length_implementation = atoi_n(buf + 22, 1);
-       
-       for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) {
-               entry_p += 3 + length_data_entry + length_starting;
-               if (entry_p >= record_length) {
-                       return 0;
-               }
-       }
-       base_address = entry_p + 1;
-       for (entry_p = 24; buf[entry_p] != ISO2709_FS; ) {
-               Z_TaggedElement *tag;
-               int data_length;
-               int data_offset;
-               int end_offset;
-               int i;
-               char tag_str[4];
-               int identifier_flag = 1;
-               
-               memcpy(tag_str, buf+entry_p, 3);
-               entry_p += 3;
-               tag_str[3] = '\0';
-               
-               if ((r->num_elements + 1) >= max_elements) {
-                       Z_TaggedElement **tmp = r->elements;
-                       
-                       /* double array space, throw away old buffer (nibble memory) */
-                       r->elements = odr_malloc(o, sizeof(*r->elements) * (max_elements *= 2));
-                       memcpy(r->elements, tmp, r->num_elements * sizeof(*tmp));
-               }
-               tag = r->elements[r->num_elements++] = odr_malloc(o, sizeof(*tag));
-               tag->tagType = odr_malloc(o, sizeof(*tag->tagType));
-               *tag->tagType = 3;
-               tag->tagOccurrence = 0;
-               tag->metaData = 0;
-               tag->appliedVariant = 0;
-               tag->tagValue = odr_malloc (o, sizeof(*tag->tagValue));
-               tag->tagValue->which = Z_StringOrNumeric_string;
-               tag->tagValue->u.string = odr_strdup(o, tag_str);
-               
-               tag->content = odr_malloc(o, sizeof(*tag->content));
-               tag->content->which = Z_ElementData_subtree;
-               
-               tag->content->u.subtree = odr_malloc(o, sizeof(*tag->content->u.subtree));
-               tag->content->u.subtree->elements = odr_malloc(o, sizeof(*r->elements));
-               tag->content->u.subtree->num_elements = 1;
-               
-               tag = tag->content->u.subtree->elements[0] = odr_malloc(o, sizeof(**tag->content->u.subtree->elements));
-               
-               tag->tagType = odr_malloc(o, sizeof(*tag->tagType));
-               *tag->tagType = 3;
-               tag->tagOccurrence = 0;
-               tag->metaData = 0;
-               tag->appliedVariant = 0;
-               tag->tagValue = odr_malloc(o, sizeof(*tag->tagValue));
-               tag->tagValue->which = Z_StringOrNumeric_string;
-               tag->content = odr_malloc(o, sizeof(*tag->content));
-               
-               data_length = atoi_n(buf + entry_p, length_data_entry);
-               entry_p += length_data_entry;
-               data_offset = atoi_n(buf + entry_p, length_starting);
-               entry_p += length_starting;
-               i = data_offset + base_address;
-               end_offset = i + data_length - 1;
-
-               if (indicator_length > 0 && indicator_length < 5) {
-                       if (buf[i + indicator_length] != ISO2709_IDFS) {
-                               identifier_flag = 0;
-                       }
-               } else if (!memcmp (tag_str, "00", 2)) {
-                       identifier_flag = 0;
-               }
-               
-               if (identifier_flag && indicator_length) {
-                       /* indicator */
-                       tag->tagValue->u.string = odr_malloc(o, indicator_length + 1);
-                       memcpy(tag->tagValue->u.string, buf + i, indicator_length);
-                       tag->tagValue->u.string[indicator_length] = '\0';
-                       i += indicator_length;
-                       
-                       tag->content->which = Z_ElementData_subtree;
-
-                       tag->content->u.subtree = odr_malloc(o, sizeof(*tag->content->u.subtree));
-                       tag->content->u.subtree->elements = odr_malloc(o, 256 * sizeof(*r->elements));
-                       tag->content->u.subtree->num_elements = 0;
-                       
-                       while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset) {
-                               int i0;
-                               /* prepare tag */
-                               Z_TaggedElement *parent_tag = tag;
-                               Z_TaggedElement *tag = odr_malloc (o, sizeof(*tag));
-                               
-                               if (parent_tag->content->u.subtree->num_elements < 256) {
-                                       parent_tag->content->u.subtree->elements[
-                                       parent_tag->content->u.subtree->num_elements++] = tag;
-                               }
-                                                               
-                               tag->tagType = odr_malloc(o, sizeof(*tag->tagType));
-                               *tag->tagType = 3;
-                               tag->tagOccurrence = 0;
-                               tag->metaData = 0;
-                               tag->appliedVariant = 0;
-                               tag->tagValue = odr_malloc (o, sizeof(*tag->tagValue));
-                               tag->tagValue->which = Z_StringOrNumeric_string;
-                               
-                               /* sub field */
-                               tag->tagValue->u.string = odr_malloc(o, identifier_length);
-                               memcpy(tag->tagValue->u.string, buf + i + 1, identifier_length - 1);
-                               tag->tagValue->u.string[identifier_length - 1] = '\0';
-                               i += identifier_length;
-                               
-                               /* data ... */
-                               tag->content = odr_malloc(o, sizeof(*tag->content));
-                               tag->content->which = Z_ElementData_string;
-                               
-                               i0 = i;
-                               while ( buf[i] != ISO2709_RS && 
-                                               buf[i] != ISO2709_IDFS && 
-                                               buf[i] != ISO2709_FS && i < end_offset) {
-                                       i++;
-                               }
-                                                               
-                               tag->content->u.string = odr_malloc(o, i - i0 + 1);
-                               memcpy(tag->content->u.string, buf + i0, i - i0);
-                               tag->content->u.string[i - i0] = '\0';
-                       }
-               } else {
-                       int i0 = i;
-                       
-                       tag->tagValue->u.string = "@";
-                       tag->content->which = Z_ElementData_string;
-                       
-                       while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset) {
-                               i++;
-                       }
-                       tag->content->u.string = odr_malloc(o, i - i0 +1);
-                       memcpy(tag->content->u.string, buf + i0, i - i0);
-                       tag->content->u.string[i-i0] = '\0';
-               }
-       }
-       return r;
-}
-static void retval_array2_grs1(zval *return_value, Z_GenericRecord *p)
-{
-       int i;
-       
-       array_init(return_value);
-       
-       for (i = 0; i<p->num_elements; i++)
-       {
-               zval *zval_element;
-               zval *zval_sub;
-               Z_TaggedElement *e = p->elements[i];
-               
-               MAKE_STD_ZVAL(zval_element);
-               array_init(zval_element);
-               
-               if (e->tagType)
-                       add_assoc_long(zval_element, "tagType", *e->tagType);
-
-               if (e->tagValue->which == Z_StringOrNumeric_string)
-                       add_assoc_string(zval_element, "tag", e->tagValue->u.string, 1);
-               else if (e->tagValue->which == Z_StringOrNumeric_numeric)
-                       add_assoc_long(zval_element, "tag", *e->tagValue->u.numeric);
-
-               switch (e->content->which) {
-               case Z_ElementData_string:
-                       add_assoc_string(zval_element, "content",e->content->u.string, 1);
-                       break;
-               case Z_ElementData_numeric:
-                       add_assoc_long(zval_element, "content",*e->content->u.numeric);
-                       break;
-               case Z_ElementData_trueOrFalse:
-                       add_assoc_bool(zval_element, "content",*e->content->u.trueOrFalse);
-                       break;
-               case Z_ElementData_subtree:
-                       MAKE_STD_ZVAL(zval_sub);
-                       retval_array2_grs1(zval_sub, e->content->u.subtree);
-                       add_assoc_zval(zval_element, "content", zval_sub);
-               }
-               add_next_index_zval(return_value, zval_element);
-       }
-}
-
-static int iconv_grs1(Z_GenericRecord *p, ODR odr,
-                                          const char *to, const char *from)
-{
-       size_t outbuf_size = 10;
-       char *outbuf = (char*) odr_malloc(odr, outbuf_size);
-
-       Z_GenericRecord *grs[20];
-       int eno[20];
-       int level = 0;
-       yaz_iconv_t cd;
-       if (!to || to[0]==0)
-               to = "UTF-8";
-       if (!from || !to)
-               return 0;
-       cd = yaz_iconv_open(to, from);
-       if (!cd)
-               return -1;
-
-       eno[level] = 0;
-       grs[level] = p;
-
-       while(level >= 0) {
-               Z_TaggedElement *e = 0;
-               Z_GenericRecord *p = grs[level];
-
-               if (eno[level] >= p->num_elements) {
-                       --level;
-                       if (level >= 0)
-                               eno[level]++;
-                       continue;
-               }
-               e = grs[level]->elements[eno[level]];
-               switch (e->content->which) {
-               case Z_ElementData_string:
-                       while(1) {
-                               size_t inbytesleft = strlen(e->content->u.string);
-                               const char *inp = e->content->u.string;
-                               size_t outbytesleft = outbuf_size;
-                               char *outp = outbuf;
-                               size_t r = yaz_iconv(cd, (char**) &inp, &inbytesleft,
-                                                                  &outp, &outbytesleft);
-                               if (r == (size_t) (-1)) {
-                                       int e = yaz_iconv_error(cd);
-                                       if (e != YAZ_ICONV_E2BIG || outbuf_size > 200000)
-                                               break;
-                                       outbuf_size = outbuf_size * 2 + 30;
-                                       outbuf = (char*) odr_malloc(odr, outbuf_size);
-                               } else {
-                                       e->content->u.string = odr_malloc(odr, 1+(outp-outbuf));
-                                       memcpy(e->content->u.string, outbuf, outp-outbuf);
-                                       e->content->u.string[outp-outbuf] = '\0';
-                                       break;
-                               }
-                       }
-                       break;
-               case Z_ElementData_subtree:
-                       if (level < 20) {
-                               level++;
-                               grs[level] = e->content->u.subtree;
-                               eno[level] = -1;
-                       }
-               }
-               eno[level]++;
-       }
-       yaz_iconv_close(cd);
-       return 0;
-}
-
-static void retval_array1_grs1(zval *return_value, Z_GenericRecord *p)
-{
-       Z_GenericRecord *grs[20];
-       int eno[20];
-       int level = 0;
-
-       array_init(return_value);
-       eno[level] = 0;
-       grs[level] = p;
-
-       while (level >= 0) {
-               zval *my_zval;
-               Z_TaggedElement *e = 0;
-               Z_GenericRecord *p = grs[level];
-               int i;
-               char tag[256];
-               int taglen = 0;
-
-               if (eno[level] >= p->num_elements) {
-                       --level;
-                       if (level >= 0)
-                               eno[level]++;
-                       continue;
-               }
-               *tag = '\0';
-               for (i = 0; i <= level; i++) {
-                       int tag_type = 3;
-                       e = grs[i]->elements[eno[i]];
-
-                       if (e->tagType) {
-                               tag_type = *e->tagType;
-                       }
-                       taglen = strlen(tag);
-                       sprintf(tag + taglen, "(%d,", tag_type);
-                       taglen = strlen(tag);
-
-                       if (e->tagValue->which == Z_StringOrNumeric_string) {
-                               int len = strlen(e->tagValue->u.string);
-
-                               memcpy(tag + taglen, e->tagValue->u.string, len);
-                               tag[taglen+len] = '\0';
-                       } else if (e->tagValue->which == Z_StringOrNumeric_numeric) {
-                               sprintf(tag + taglen, "%d", *e->tagValue->u.numeric);
-                       }
-                       taglen = strlen(tag);
-                       strcpy(tag + taglen, ")");
-               }
-
-               ALLOC_ZVAL(my_zval);
-               array_init(my_zval);
-               INIT_PZVAL(my_zval);
-               
-               add_next_index_string(my_zval, tag, 1);
-
-               switch (e->content->which) {
-                       case Z_ElementData_string:
-                               add_next_index_string(my_zval, e->content->u.string, 1);
-                               break;
-                       case Z_ElementData_numeric:
-                               add_next_index_long(my_zval, *e->content->u.numeric);
-                               break;
-                       case Z_ElementData_trueOrFalse:
-                               add_next_index_long(my_zval, *e->content->u.trueOrFalse);
-                               break;
-                       case Z_ElementData_subtree:
-                               if (level < 20) {
-                                       level++;
-                                       grs[level] = e->content->u.subtree;
-                                       eno[level] = -1;
-                               }
-               }
-               zend_hash_next_index_insert(return_value->value.ht, (void *) &my_zval, sizeof(zval *), NULL);
-               eno[level]++;
-       }
-}
-
-
-/* {{{ proto string yaz_record(resource id, int pos, string type)
-   Return record information at given result set position */
-PHP_FUNCTION(yaz_record)
-{
-       pval **pval_id, **pval_pos, **pval_type;
-       Yaz_Association p;
-       int pos;
-       char *type;
-
-       if (ZEND_NUM_ARGS() != 3) {
-               WRONG_PARAM_COUNT;
-       }
-       if (zend_get_parameters_ex(3, &pval_id, &pval_pos, &pval_type) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-
-       convert_to_long_ex(pval_pos);
-       pos = (*pval_pos)->value.lval;
-       convert_to_string_ex(pval_type);
-       type = (*pval_type)->value.str.val;
-
-       if (p && p->zoom_set) {
-               char type_args[4][60];  /*  0; 1=2,3  (1 is assumed charset) */
-               type_args[0][0] = 0;
-               type_args[1][0] = 0;
-               type_args[2][0] = 0;
-               type_args[3][0] = 0;
-               sscanf(type, "%59[^;];%59[^=]=%59[^,],%59[^,]", type_args[0],
-                          type_args[1], type_args[2], type_args[3]);
-               ZOOM_record r = ZOOM_resultset_record(p->zoom_set, pos-1);
-               if (!strcmp(type_args[0], "string")) {
-                       type = "render";
-               }
-               if (r) {
-                       if (!strcmp(type_args[0], "array") ||
-                               !strcmp(type_args[0], "array1")) {
-                               Z_External *ext = (Z_External *) ZOOM_record_get(r, "ext", 0);
-                               if (ext->which == Z_External_OPAC)
-                                       ext = ext->u.opac->bibliographicRecord;
-                               if (ext) {
-                                       oident *ent = oid_getentbyoid(ext->direct_reference);
-                                       ODR odr = odr_createmem(ODR_DECODE);
-                                       
-                                       if (ext->which == Z_External_grs1 && ent->value == VAL_GRS1) {
-                                               if (type_args[2][0])
-                                                       iconv_grs1(ext->u.grs1, odr, type_args[3],
-                                                                          type_args[2]);
-                                               retval_array1_grs1(return_value, ext->u.grs1);
-                                       } else if (ext->which == Z_External_octet) {
-                                               char *buf = (char *) (ext->u.octet_aligned->buf);
-                                               Z_GenericRecord *rec = 0;
-                                               
-                                               switch (ent->value) {
-                                               case VAL_SOIF:
-                                               case VAL_HTML:
-                                               case VAL_TEXT_XML:
-                                               case VAL_APPLICATION_XML:
-                                                       break;
-                                               default:
-                                                       rec = marc_to_grs1(buf, odr);
-                                               }
-                                               if (rec) {
-                                                       if (type_args[2][0])
-                                                               iconv_grs1(rec, odr, type_args[3], type_args[2]);
-                                                       retval_array1_grs1(return_value, rec);
-                                               }
-                                       }
-                                       odr_destroy(odr);
-                               }
-                       } else if (!strcmp(type_args[0], "array2")) {
-                               Z_External *ext = (Z_External *) ZOOM_record_get(r, "ext", 0);
-                               if (ext->which == Z_External_OPAC)
-                                       ext = ext->u.opac->bibliographicRecord;
-                               if (ext) {
-                                       oident *ent = oid_getentbyoid(ext->direct_reference);
-                                       ODR odr = odr_createmem(ODR_DECODE);
-                                       
-                                       if (ext->which == Z_External_grs1 && ent->value == VAL_GRS1) {
-                                               if (type_args[2][0])
-                                                       iconv_grs1(ext->u.grs1, odr, type_args[3],
-                                                                          type_args[2]);
-                                               retval_array2_grs1(return_value, ext->u.grs1);
-                                       } else if (ext->which == Z_External_octet) {
-                                               char *buf = (char *) (ext->u.octet_aligned->buf);
-                                               Z_GenericRecord *rec = 0;
-                                               
-                                               switch (ent->value) {
-                                               case VAL_SOIF:
-                                               case VAL_HTML:
-                                                       break;
-                                               case VAL_TEXT_XML:
-                                               case VAL_APPLICATION_XML:
-                                                       /* text2grs1(&buf, &len, t->odr_in, 0, 0); */
-                                                       break;
-                                               default:
-                                                       rec = marc_to_grs1(buf, odr);
-                                               }
-                                               if (rec) {
-                                                       if (type_args[2][0])
-                                                               iconv_grs1(rec, odr, type_args[3], type_args[2]);
-                                                       retval_array2_grs1(return_value, rec);
-                                               }
-                                       }
-                                       odr_destroy(odr);
-                               }
-                       } else {
-                               int rlen;
-                               const char *info = ZOOM_record_get(r, type, &rlen);
-                               if (info) {
-                                       return_value->value.str.len = (rlen > 0) ? rlen : 0;
-                                       return_value->value.str.val =
-                                               estrndup(info, return_value->value.str.len);
-                                       return_value->type = IS_STRING;
-                               }
-                       }
-               }
-       }
-       release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_syntax(resource id, string syntax)
-   Set record syntax for retrieval */
-PHP_FUNCTION(yaz_syntax)
-{
-       pval **pval_id, **pval_syntax;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_syntax) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       convert_to_string_ex(pval_syntax);
-       option_set(p, "preferredRecordSyntax", (*pval_syntax)->value.str.val);
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_element(resource id, string elementsetname)
-   Set Element-Set-Name for retrieval */
-PHP_FUNCTION(yaz_element)
-{
-       pval **pval_id, **pval_element;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_element) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-
-       convert_to_string_ex(pval_element);
-       option_set(p, "elementSetName", (*pval_element)->value.str.val);
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_schema(resource id, string schema)
-   Set Schema for retrieval */
-PHP_FUNCTION(yaz_schema)
-{
-       pval **pval_id, **pval_element;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_element) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       convert_to_string_ex(pval_element);
-       option_set(p, "schema", (*pval_element)->value.str.val);
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_set_option(resource id, mixed options)
-   Set Option(s) for connection */
-PHP_FUNCTION(yaz_set_option)
-{
-       pval **pval_ar, **pval_name, **pval_val, **pval_id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() == 2) {
-               if (zend_get_parameters_ex(2, &pval_id, &pval_ar) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-               if (Z_TYPE_PP(pval_ar) != IS_ARRAY) {
-                       WRONG_PARAM_COUNT;
-               }
-               get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-               if (p) {
-                       HashPosition pos;
-                       HashTable *ht;
-                       zval **ent;
-                       
-                       ht = Z_ARRVAL_PP(pval_ar);
-                       for(zend_hash_internal_pointer_reset_ex(ht, &pos);
-                               zend_hash_get_current_data_ex(ht, (void**) &ent, &pos) == SUCCESS;
-                               zend_hash_move_forward_ex(ht, &pos)
-                       ) {
-                               char *key;
-                               ulong idx;
-#if PHP_API_VERSION > 20010101
-                               int type = zend_hash_get_current_key_ex(ht, &key, 0, &idx, 0, &pos);
-#else
-                               int type = zend_hash_get_current_key_ex(ht, &key, 0, &idx, &pos);
-#endif
-                               if (type != HASH_KEY_IS_STRING || Z_TYPE_PP(ent) != IS_STRING) {
-                                       continue;
-                               }
-                               option_set(p, key, (*ent)->value.str.val);
-                       }
-                       release_assoc (p);
-               }
-       } else if (ZEND_NUM_ARGS() == 3) {
-               if (zend_get_parameters_ex(3, &pval_id, &pval_name, &pval_val) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-               get_assoc (INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-               convert_to_string_ex(pval_name);
-               convert_to_string_ex(pval_val);
-               option_set(p, (*pval_name)->value.str.val, (*pval_val)->value.str.val);
-               
-               release_assoc(p);
-       } else {
-               WRONG_PARAM_COUNT;
-       }
-}
-/* }}} */
-
-/* {{{ proto string yaz_get_option(resource id, string name)
-   Set Option(s) for connection */
-PHP_FUNCTION(yaz_get_option)
-{
-       pval **pval_id, **pval_name;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2) {
-               WRONG_PARAM_COUNT;
-       }
-       if (zend_get_parameters_ex(2, &pval_id, &pval_name) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p) {
-               const char *name_str, *v;
-               convert_to_string_ex (pval_name);
-               name_str = (*pval_name)->value.str.val;
-
-               v = option_get(p, name_str);
-               if (!v) {
-                       v = "";
-               }
-               return_value->value.str.len = strlen(v);
-               return_value->value.str.val = estrndup(v, return_value->value.str.len);
-               return_value->type = IS_STRING;
-       } else {
-               RETVAL_FALSE;
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_range(resource id, int start, int number)
-   Set result set start point and number of records to request */
-PHP_FUNCTION(yaz_range)
-{
-       pval **pval_id, **pval_start, **pval_number;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pval_id, &pval_start, &pval_number) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       convert_to_long_ex(pval_start);
-       convert_to_long_ex(pval_number);
-       option_set_int(p, "start", (*pval_start)->value.lval - 1);
-       option_set_int(p, "count", (*pval_number)->value.lval);
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_sort(resource id, string sortspec)
-   Set result set sorting criteria */
-PHP_FUNCTION(yaz_sort)
-{
-       pval **pval_id, **pval_criteria;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_criteria) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p) {
-               convert_to_string_ex(pval_criteria);
-               xfree(p->sort_criteria);
-               p->sort_criteria = xstrdup((*pval_criteria)->value.str.val);
-               if (p->zoom_set)
-                       ZOOM_resultset_sort(p->zoom_set, "yaz",
-                                                               (*pval_criteria)->value.str.val);
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-const char *ill_array_lookup (void *handle, const char *name)
-{
-       return array_lookup_string((HashTable *) handle, name);
-}
-
-/* {{{ proto void yaz_itemorder(resource id, array package)
-   Sends Item Order request */
-PHP_FUNCTION(yaz_itemorder)
-{
-       pval **pval_id, **pval_package;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_package) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       if (Z_TYPE_PP(pval_package) != IS_ARRAY) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array parameter");
-               RETURN_FALSE;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p) {
-               ZOOM_options options = ZOOM_options_create();
-               
-               ZOOM_options_set_callback(options, ill_array_lookup, Z_ARRVAL_PP(pval_package));
-               ZOOM_package_destroy(p->zoom_package);
-               p->zoom_package = ZOOM_connection_package(p->zoom_conn, options);
-               ZOOM_package_send(p->zoom_package, "itemorder");
-               ZOOM_options_destroy (options);
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_es(resource id, string type, array package)
-   Sends Extended Services Request */
-PHP_FUNCTION(yaz_es)
-{
-       pval **pval_id, **pval_type, **pval_package;
-       Yaz_Association p;
-       
-       if (ZEND_NUM_ARGS() != 3 ||
-               zend_get_parameters_ex(3, &pval_id, &pval_type, 
-                                                          &pval_package) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       if (Z_TYPE_PP(pval_type) != IS_STRING) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected string parameter");
-               RETURN_FALSE;
-       }
-       
-       if (Z_TYPE_PP(pval_package) != IS_ARRAY) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array parameter");
-               RETURN_FALSE;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p) {
-               ZOOM_options options = ZOOM_options_create();
-               
-               ZOOM_options_set_callback(options, ill_array_lookup, Z_ARRVAL_PP(pval_package));
-               ZOOM_package_destroy(p->zoom_package);
-               p->zoom_package = ZOOM_connection_package(p->zoom_conn, options);
-               ZOOM_package_send(p->zoom_package, (*pval_type)->value.str.val);
-               ZOOM_options_destroy (options);
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_scan(resource id, type, query [, flags])
-   Sends Scan Request */
-PHP_FUNCTION(yaz_scan)
-{
-       pval **pval_id, **pval_type, **pval_query, **pval_flags = 0;
-       HashTable *flags_ht = 0;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() == 3) {
-               if (zend_get_parameters_ex(3, &pval_id, &pval_type, &pval_query) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-       } else if (ZEND_NUM_ARGS() == 4) {
-               if (zend_get_parameters_ex(4, &pval_id, &pval_type, &pval_query, &pval_flags) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-               if (Z_TYPE_PP(pval_flags) != IS_ARRAY) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad flags parameter");
-                       RETURN_FALSE;
-               }
-               flags_ht = Z_ARRVAL_PP(pval_flags);
-       } else {
-               WRONG_PARAM_COUNT;
-       }
-
-       convert_to_string_ex(pval_type);
-       convert_to_string_ex(pval_query);
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       ZOOM_scanset_destroy(p->zoom_scan);
-       p->zoom_scan = 0;
-       if (p) {
-               option_set(p, "number", array_lookup_string(flags_ht, "number"));
-               option_set(p, "position", array_lookup_string(flags_ht, "position"));
-               option_set(p, "stepSize", array_lookup_string(flags_ht, "stepsize"));
-               p->zoom_scan = ZOOM_connection_scan(p->zoom_conn, Z_STRVAL_PP(pval_query));
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto array yaz_es_result(resource id)
-   Inspects Extended Services Result */
-PHP_FUNCTION(yaz_es_result)
-{
-       pval **pval_id;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pval_id) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       array_init(return_value);
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p && p->zoom_package) {
-               const char *str = ZOOM_package_option_get(p->zoom_package, "targetReference");
-
-               if (str) {
-                       add_assoc_string(return_value, "targetReference", (char *) str, 1);
-               }
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto array yaz_scan_result(resource id [, array options])
-   Inspects Scan Result */
-PHP_FUNCTION(yaz_scan_result)
-{
-       pval **pval_id, **pval_opt = 0;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() == 2) {
-               if (zend_get_parameters_ex(2, &pval_id, &pval_opt) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-       } else if (ZEND_NUM_ARGS() == 1) {
-               if (zend_get_parameters_ex(1, &pval_id) == FAILURE) {
-                       WRONG_PARAM_COUNT;
-               }
-       } else {
-               WRONG_PARAM_COUNT;
-       }
-
-       array_init(return_value);
-
-       if (pval_opt && array_init(*pval_opt) == FAILURE) {
-               RETURN_FALSE;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p && p->zoom_scan) {
-               int pos = 0;
-               int occ, len;
-               int size = ZOOM_scanset_size(p->zoom_scan);
-               
-               for (pos = 0; pos < size; pos++) {
-                       const char *term = ZOOM_scanset_term(p->zoom_scan, pos, &occ, &len);
-                       zval *my_zval;
-
-                       ALLOC_ZVAL(my_zval);
-                       array_init(my_zval);
-                       INIT_PZVAL(my_zval);
-                       
-                       add_next_index_string(my_zval, "term", 1);
-
-                       if (term) {
-                               add_next_index_stringl(my_zval, (char*) term, len, 1);
-                       } else {
-                               add_next_index_string(my_zval, "?", 1);
-                       }
-                       add_next_index_long(my_zval, occ);
-
-                       term = ZOOM_scanset_display_term(p->zoom_scan, pos, &occ, &len);
-
-                       if (term) {
-                               add_next_index_stringl(my_zval, (char*) term, len, 1);
-                       } else {
-                               add_next_index_string(my_zval, "?", 1);
-                       }
-
-                       zend_hash_next_index_insert(return_value->value.ht, (void *) &my_zval, sizeof(zval *), NULL);
-               }
-
-               if (pval_opt) {
-                       const char *v;
-       
-                       add_assoc_long(*pval_opt, "number", size);
-                       
-                       v = ZOOM_scanset_option_get(p->zoom_scan, "stepSize");
-                       if (v) {
-                               add_assoc_long(*pval_opt, "stepsize", atoi(v));
-                       }
-                       v = ZOOM_scanset_option_get(p->zoom_scan, "position");
-                       if (v) {
-                               add_assoc_long(*pval_opt, "position", atoi(v));
-                       }
-                       v = ZOOM_scanset_option_get(p->zoom_scan, "scanStatus");
-                       if (v) {
-                               add_assoc_long(*pval_opt, "status", atoi(v));
-                       }
-               }
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto void yaz_ccl_conf(resource id, array package)
-   Configure CCL package */
-PHP_FUNCTION(yaz_ccl_conf)
-{
-       pval **pval_id, **pval_package;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_package) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       if (Z_TYPE_PP(pval_package) != IS_ARRAY) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array parameter");
-               RETURN_FALSE;
-       }
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p) {
-               HashTable *ht = Z_ARRVAL_PP(pval_package);
-               HashPosition pos;
-               zval **ent;
-               char *key;
-
-               ccl_qual_rm(&p->ccl_parser->bibset);
-               p->ccl_parser->bibset = ccl_qual_mk();
-
-               for(zend_hash_internal_pointer_reset_ex(ht, &pos);
-                       zend_hash_get_current_data_ex(ht, (void**) &ent, &pos) == SUCCESS;
-                       zend_hash_move_forward_ex(ht, &pos)
-               ) {
-                       ulong idx;
-#if PHP_API_VERSION > 20010101
-                       int type = zend_hash_get_current_key_ex(ht, &key, 0, &idx, 0, &pos);
-#else
-                       int type = zend_hash_get_current_key_ex(ht, &key, 0, &idx, &pos);
-#endif
-                       if (type != HASH_KEY_IS_STRING || Z_TYPE_PP(ent) != IS_STRING) {
-                               continue;
-                       }
-                       ccl_qual_fitem(p->ccl_parser->bibset, (*ent)->value.str.val, key);
-               }
-       }
-       release_assoc (p);
-}
-/* }}} */
-
-/* {{{ proto bool yaz_ccl_parse(resource id, string query, array res)
-   Parse a CCL query */
-PHP_FUNCTION(yaz_ccl_parse)
-{
-       pval **pval_id, **pval_query, **pval_res = 0;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pval_id, &pval_query, &pval_res) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       
-       pval_destructor(*pval_res);
-       array_init(*pval_res);
-       convert_to_string_ex (pval_query);
-
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       if (p) {
-               const char *query_str = (*pval_query)->value.str.val;
-               struct ccl_rpn_node *rpn;
-               struct ccl_token *token_list = ccl_parser_tokenize(p->ccl_parser, query_str);
-
-               rpn = ccl_parser_find(p->ccl_parser, token_list);
-               ccl_token_del(token_list);
-               add_assoc_long(*pval_res, "errorcode", p->ccl_parser->error_code);
-
-               if (p->ccl_parser->error_code) {
-                       add_assoc_string(*pval_res, "errorstring", (char *) ccl_err_msg(p->ccl_parser->error_code), 1);
-                       add_assoc_long(*pval_res, "errorpos", p->ccl_parser->error_pos - query_str);
-                       RETVAL_FALSE;
-               } else {
-                       WRBUF wrbuf_pqf = wrbuf_alloc();
-                       ccl_pquery(wrbuf_pqf, rpn);
-                       add_assoc_stringl(*pval_res, "rpn", wrbuf_buf(wrbuf_pqf), wrbuf_len(wrbuf_pqf), 1);
-                       wrbuf_free(wrbuf_pqf, 1);
-                       RETVAL_TRUE;
-               }
-               ccl_rpn_delete(rpn);
-       } else {
-               RETVAL_FALSE;
-       }
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ proto bool yaz_database (resource id, string databases)
-   Specify the databases within a session */
-PHP_FUNCTION(yaz_database)
-{
-       pval **pval_id, **pval_database;
-       Yaz_Association p;
-
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pval_id, &pval_database) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-
-       convert_to_string_ex(pval_database);
-       get_assoc(INTERNAL_FUNCTION_PARAM_PASSTHRU, pval_id, &p);
-       option_set(p, "databaseName", (*pval_database)->value.str.val);
-       RETVAL_TRUE;
-       release_assoc(p);
-}
-/* }}} */
-
-/* {{{ php_yaz_init_globals
- */
-static void php_yaz_init_globals(zend_yaz_globals *yaz_globals)
-{
-       yaz_globals->assoc_seq = 0;
-}
-/* }}} */
-
-static void yaz_close_session(Yaz_Association *as TSRMLS_DC)
-{
-       if (*as && (*as)->order == YAZSG(assoc_seq)) {
-               if ((*as)->persistent) {
-                       (*as)->in_use = 0;
-               } else {
-                       yaz_association_destroy(*as);
-                       *as = 0;
-               }
-       }
-}
-
-static void yaz_close_link (zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-       Yaz_Association *as = (Yaz_Association *) rsrc->ptr;
-       yaz_close_session(as TSRMLS_CC);
-}
-
-/* {{{ PHP_INI_BEGIN
- */
-PHP_INI_BEGIN()
-#if PHP_MAJOR_VERSION >= 5
-       STD_PHP_INI_ENTRY("yaz.max_links", "100", PHP_INI_ALL, OnUpdateLong, max_links, zend_yaz_globals, yaz_globals)
-#else
-       STD_PHP_INI_ENTRY("yaz.max_links", "100", PHP_INI_ALL, OnUpdateInt, max_links, zend_yaz_globals, yaz_globals)
-#endif
-#if PHP_MAJOR_VERSION >= 5
-       STD_PHP_INI_ENTRY("yaz.keepalive", "120", PHP_INI_ALL, OnUpdateLong, keepalive, zend_yaz_globals, yaz_globals)
-#else
-       STD_PHP_INI_ENTRY("yaz.keepalive", "120", PHP_INI_ALL, OnUpdateInt, keepalive, zend_yaz_globals, yaz_globals)
-#endif
-       STD_PHP_INI_ENTRY("yaz.log_file", NULL, PHP_INI_ALL, OnUpdateString, log_file, zend_yaz_globals, yaz_globals)
-PHP_INI_END()
-/* }}} */
-       
-PHP_MINIT_FUNCTION(yaz)
-{
-       int i;
-       const char *fname;
-       nmem_init();
-#ifdef ZTS
-       yaz_mutex = tsrm_mutex_alloc();
-#endif
-
-       ZEND_INIT_MODULE_GLOBALS(yaz, php_yaz_init_globals, NULL);
-
-       REGISTER_INI_ENTRIES();
-
-       fname = YAZSG(log_file);
-       if (fname && *fname)
-       {
-               yaz_log_init_file(fname);
-               yaz_log_init_level(LOG_ALL);
-       }
-       else
-               yaz_log_init_level(0);
-
-       le_link = zend_register_list_destructors_ex (yaz_close_link, 0, "YAZ link", module_number);
-
-       order_associations = 1;
-       shared_associations = xmalloc(sizeof(*shared_associations) * MAX_ASSOC);
-       for (i = 0; i < MAX_ASSOC; i++) {
-               shared_associations[i] = 0;
-       }
-       return SUCCESS;
-}
-
-PHP_MSHUTDOWN_FUNCTION(yaz)
-{
-       int i;
-
-       if (shared_associations) {
-               for (i = 0; i < MAX_ASSOC; i++) {
-                       yaz_association_destroy (shared_associations[i]);
-               }
-               xfree(shared_associations);
-               shared_associations = 0;
-               nmem_exit();
-       }
-#ifdef ZTS
-       tsrm_mutex_free (yaz_mutex);
-#endif
-
-       yaz_log_init_file(0);
-       return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(yaz)
-{
-       char version_str[20];
-
-#if WIN32
-       HINSTANCE h = LoadLibrary("yaz");
-       unsigned long (__cdecl *p)(char *version_str, char *sys_str) = 0;
-       strcpy(version_str, "unknown");
-
-       if (h && (p = (unsigned long(__cdecl*)(char*,char*))
-                               GetProcAddress(h, "yaz_version")))
-               p(version_str, 0);
-       if (h)
-               FreeLibrary(h);
-#else
-       yaz_version(version_str, 0);
-#endif
-       php_info_print_table_start();
-       php_info_print_table_row(2, "YAZ Support", "enabled");
-       php_info_print_table_row(2, "YAZ Version", version_str);
-       php_info_print_table_row(2, "Compiled with YAZ version", YAZ_VERSION);
-       php_info_print_table_end();
-}
-
-PHP_RSHUTDOWN_FUNCTION(yaz)
-{
-       long now = time(0);
-       int i;
-
-       yaz_log(LOG_LOG, "rshutdown keepalive=%ld", YAZSG(keepalive));
-#ifdef ZTS
-       tsrm_mutex_lock(yaz_mutex);
-#endif
-       for (i = 0; i < YAZSG(max_links); i++) {
-               Yaz_Association *as = shared_associations + i;
-               if (*as)
-               {
-                       if (now - (*as)->time_stamp > YAZSG(keepalive))
-                       {
-                               const char *host = option_get(*as, "host");
-                               if (host)
-                                       yaz_log(LOG_LOG, "shutdown of %s", host);
-                               
-                               yaz_association_destroy(*as);
-                               *as = 0;
-                       }
-               }
-       }
-#ifdef ZTS
-       tsrm_mutex_unlock(yaz_mutex);
-#endif
-       return SUCCESS;
-}
-
-PHP_RINIT_FUNCTION(yaz)
-{
-       char pidstr[20];
-
-       sprintf(pidstr, "%ld", (long) getpid());
-#ifdef ZTS
-       tsrm_mutex_lock(yaz_mutex);
-#endif
-       YAZSG(assoc_seq) = order_associations++;
-#ifdef ZTS
-       tsrm_mutex_unlock(yaz_mutex);
-#endif
-       yaz_log_init_prefix(pidstr);
-       return SUCCESS;
-}
-
-zend_module_entry yaz_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
-       STANDARD_MODULE_HEADER,
-#endif
-       "yaz",
-       yaz_functions,
-       PHP_MINIT(yaz),
-       PHP_MSHUTDOWN(yaz),
-       PHP_RINIT(yaz),
-       PHP_RSHUTDOWN(yaz),
-       PHP_MINFO(yaz),
-#if ZEND_MODULE_API_NO >= 20010901
-       NO_VERSION_YET,
-#endif
-       STANDARD_MODULE_PROPERTIES
-};
-
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/ext/yaz/php_yaz.h b/ext/yaz/php_yaz.h
deleted file mode 100644 (file)
index 6b861ec..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/* 
-   +----------------------------------------------------------------------+
-   | PHP Version 5                                                        |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 1997-2004 The PHP Group                                |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.0 of the PHP license,       |
-   | that is bundled with this package in the file LICENSE, and is        |
-   | available through the world-wide-web at the following url:           |
-   | http://www.php.net/license/3_0.txt.                                  |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Author: Adam Dickmeiss <adam@indexdata.dk>                           |
-   +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-#ifndef PHP_YAZ_H
-#define PHP_YAZ_H
-
-#if HAVE_YAZ
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-extern zend_module_entry yaz_module_entry;
-#define yaz_module_ptr &yaz_module_entry
-
-PHP_FUNCTION(yaz_connect);
-PHP_FUNCTION(yaz_close);
-PHP_FUNCTION(yaz_search);
-PHP_FUNCTION(yaz_wait);
-PHP_FUNCTION(yaz_errno);
-PHP_FUNCTION(yaz_error);
-PHP_FUNCTION(yaz_addinfo);
-PHP_FUNCTION(yaz_hits);
-PHP_FUNCTION(yaz_record);
-PHP_FUNCTION(yaz_syntax);
-PHP_FUNCTION(yaz_element);
-PHP_FUNCTION(yaz_range);
-PHP_FUNCTION(yaz_itemorder);
-PHP_FUNCTION(yaz_scan);
-PHP_FUNCTION(yaz_scan_result);
-PHP_FUNCTION(yaz_es_result);
-PHP_FUNCTION(yaz_present);
-PHP_FUNCTION(yaz_ccl_conf);
-PHP_FUNCTION(yaz_ccl_parse);
-PHP_FUNCTION(yaz_database);
-PHP_FUNCTION(yaz_sort);
-PHP_FUNCTION(yaz_schema);
-PHP_FUNCTION(yaz_set_option);
-PHP_FUNCTION(yaz_get_option);
-PHP_FUNCTION(yaz_es);
-
-ZEND_BEGIN_MODULE_GLOBALS(yaz)
-       int assoc_seq;
-       long max_links;
-       long keepalive;
-       char *log_file;
-ZEND_END_MODULE_GLOBALS(yaz)
-    
-#ifdef ZTS
-#define YAZSG(v) TSRMG(yaz_globals_id, zend_yaz_globals *, v)
-#else
-#define YAZSG(v) (yaz_globals.v)
-#endif
-
-#else
-
-#define yaz_module_ptr NULL
-#endif
-
-#define phpext_yaz_ptr yaz_module_ptr
-#endif
diff --git a/ext/yaz/yaz.dsp b/ext/yaz/yaz.dsp
deleted file mode 100644 (file)
index e662cb6..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="yaz" - Package Owner=<4>\r
-# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
-# ** DO NOT EDIT **\r
-\r
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
-\r
-CFG=yaz - Win32 Debug_TS\r
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
-!MESSAGE use the Export Makefile command and run\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "yaz.mak".\r
-!MESSAGE \r
-!MESSAGE You can specify a configuration when running NMAKE\r
-!MESSAGE by defining the macro CFG on the command line. For example:\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "yaz.mak" CFG="yaz - Win32 Debug_TS"\r
-!MESSAGE \r
-!MESSAGE Possible choices for configuration are:\r
-!MESSAGE \r
-!MESSAGE "yaz - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE "yaz - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")\r
-!MESSAGE \r
-\r
-# Begin Project\r
-# PROP AllowPerConfigDependencies 0\r
-# PROP Scc_ProjName ""\r
-# PROP Scc_LocalPath ""\r
-CPP=cl.exe\r
-MTL=midl.exe\r
-RSC=rc.exe\r
-\r
-!IF  "$(CFG)" == "yaz - Win32 Release_TS"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "Release_TS"\r
-# PROP BASE Intermediate_Dir "Release_TS"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "Release_TS"\r
-# PROP Intermediate_Dir "Release_TS"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "YAZ_EXPORTS" /YX /FD /c\r
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_YAZ" /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_YAZ=1 /D ZTS=1 /YX /FD /c\r
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
-# ADD BASE RSC /l 0x407 /d "NDEBUG"\r
-# ADD RSC /l 0x407 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
-# ADD LINK32 php5ts.lib yaz.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_yaz.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"\r
-\r
-!ELSEIF  "$(CFG)" == "yaz - Win32 Debug_TS"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "Debug_TS"\r
-# PROP BASE Intermediate_Dir "Debug_TS"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "Debug_TS"\r
-# PROP Intermediate_Dir "Debug_TS"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "YAZ_EXPORTS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_YAZ" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_YAZ=1 /YX /FD /GZ /c\r
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
-# ADD BASE RSC /l 0x407 /d "_DEBUG"\r
-# ADD RSC /l 0x407 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 php5ts_debug.lib yaz.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_yaz.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"\r
-\r
-!ENDIF \r
-\r
-# Begin Target\r
-\r
-# Name "yaz - Win32 Release_TS"\r
-# Name "yaz - Win32 Debug_TS"\r
-# Begin Group "Source Files"\r
-\r
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
-# Begin Source File\r
-\r
-SOURCE=.\php_yaz.c\r
-# End Source File\r
-# End Group\r
-# Begin Group "Header Files"\r
-\r
-# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
-# Begin Source File\r
-\r
-SOURCE=.\php_yaz.h\r
-# End Source File\r
-# End Group\r
-# Begin Source File\r
-\r
-SOURCE=.\README\r
-# End Source File\r
-# End Target\r
-# End Project\r