+diff -urN php-4.3.1.org/ext/mnogosearch/php_mnogo.c php-4.3.1/ext/mnogosearch/php_mnogo.c
+--- php-4.3.1.org/ext/mnogosearch/php_mnogo.c Mon Feb 24 21:42:43 2003
++++ php-4.3.1/ext/mnogosearch/php_mnogo.c Mon Dec 16 20:17:09 2002
+@@ -1,5 +1,5 @@
+ /* $Source$ */
+-/* $Id$ */
++/* $Id$ */
+
+ /*
+ +----------------------------------------------------------------------+
+@@ -163,6 +163,8 @@
+ #if UDM_VERSION_ID >= 30204
+ PHP_FE(udm_parse_query_string, NULL)
+ PHP_FE(udm_make_excerpt, NULL)
++ PHP_FE(udm_set_agent_param_ex, NULL)
++ PHP_FE(udm_get_res_field_ex, NULL)
+ #endif
+ #endif
+
+@@ -466,7 +468,9 @@
+ UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr);
+ if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){
+ sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr);
++#if UDM_VERSION_ID <= 30207
+ Env->errcode=1;
++#endif
+ php_error(E_WARNING,"%s(): Invalid DBAddr", get_active_function_name(TSRMLS_C));
+ RETURN_FALSE;
+ }
+@@ -517,7 +521,9 @@
+ UdmVarListReplaceStr(&Env->Vars,"DBAddr",dbaddr);
+ if(UDM_OK!=UdmDBSetAddr(Env->db,dbaddr,UDM_OPEN_MODE_READ)){
+ sprintf(Env->errstr,"Invalid DBAddr: '%s'",dbaddr);
++#if UDM_VERSION_ID <= 30207
+ Env->errcode=1;
++#endif
+ php_error(E_WARNING,"%s(): Invalid DBAddr", get_active_function_name(TSRMLS_C));
+ RETURN_FALSE;
+ }
+@@ -997,6 +1003,8 @@
+ case UDM_PARAM_VARDIR:
+ #if UDM_VERSION_ID < 30200
+ udm_snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
++#elif UDM_VERSION_ID >= 30208
++ UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val);
+ #elif UDM_VERSION_ID >= 30204
+ UdmVarListReplaceStr(&Agent->Conf->Vars,"Vardir",val);
+ snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
+@@ -1665,6 +1673,106 @@
+ RETURN_TRUE;
+ }
+ /* }}} */
++
++/* {{{ proto int udm_set_agent_param_ex(int agent, string var, string val)
++ Set mnoGoSearch agent session parameters extended */
++DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex)
++{
++ pval **yyagent, **yyvar, **yyval;
++ char *val, *var;
++ UDM_AGENT * Agent;
++
++ switch(ZEND_NUM_ARGS()){
++
++ case 3:
++ if(zend_get_parameters_ex(3,&yyagent,&yyvar,&yyval)==FAILURE){
++ RETURN_FALSE;
++ }
++ convert_to_string_ex(yyvar);
++ convert_to_string_ex(yyval);
++ ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-agent", le_link);
++ var = Z_STRVAL_PP(yyvar);
++ val = Z_STRVAL_PP(yyval);
++
++ break;
++
++ default:
++ WRONG_PARAM_COUNT;
++ break;
++ }
++
++ UdmVarListReplaceStr(&Agent->Conf->Vars,var,val);
++
++ if (!strcasecmp(var,"LocalCharset")) {
++ const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"LocalCharset","iso-8859-1");
++ Agent->Conf->lcs=UdmGetCharSet(charset);
++ } else if (!strcasecmp(var,"BrowserCharset")) {
++ const char * charset=UdmVarListFindStr(&Agent->Conf->Vars,"BrowserCharset","iso-8859-1");
++ Agent->Conf->bcs=UdmGetCharSet(charset);
++ } else if (!strcasecmp(var,"Synonym")) {
++ if (UdmSynonymListLoad(Agent->Conf,val)) {
++ php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C),Agent->Conf->errstr);
++ RETURN_FALSE;
++ } else UdmSynonymListSort(&(Agent->Conf->Synonyms));
++ } else if (!strcasecmp(var,"Stopwordfile")) {
++ if (UdmStopListLoad(Agent->Conf,val)) {
++ php_error(E_WARNING, "%s(): %s", Agent->Conf->errstr, get_active_function_name(TSRMLS_C));
++ RETURN_FALSE;
++ }
++ } else if (!strcasecmp(var,"MinWordLen")) {
++ Agent->Conf->WordParam.min_word_len=atoi(val);
++ } else if (!strcasecmp(var,"MaxWordLen")) {
++ Agent->Conf->WordParam.max_word_len=atoi(val);
++#if UDM_VERSION_ID <= 30207
++ } else if (!strcasecmp(var,"VarDir")) {
++ snprintf(Agent->Conf->vardir,sizeof(Agent->Conf->vardir)-1,"%s%s",val,UDMSLASHSTR);
++#endif
++ }
++
++ RETURN_TRUE;
++}
++
++/* {{{ proto string udm_get_res_field_ex(int res, int row, string field)
++ Fetch mnoGoSearch result field */
++DLEXPORT PHP_FUNCTION(udm_get_res_field_ex)
++{
++ pval **yyres, **yyrow_num, **yyfield_name;
++
++ UDM_RESULT * Res;
++ int row;
++ char *field;
++
++ switch(ZEND_NUM_ARGS()){
++ case 3: {
++ if (zend_get_parameters_ex(3, &yyres,&yyrow_num,&yyfield_name)==FAILURE){
++ RETURN_FALSE;
++ }
++ convert_to_string_ex(yyrow_num);
++ convert_to_string_ex(yyfield_name);
++ field = Z_STRVAL_PP(yyfield_name);
++ row = atoi(Z_STRVAL_PP(yyrow_num));
++ }
++ break;
++ default:
++ WRONG_PARAM_COUNT;
++ break;
++ }
++
++ ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
++ if(row<Res->num_rows){
++ if (!strcasecmp(field,"URL")) {
++ char *al;
++ al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), field, "")));
++ UdmVarListReplaceStr(&Res->Doc[row].Sections,field,al);
++ free(al);
++ }
++ RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,field,""),1);
++ } else {
++ php_error(E_WARNING,"%s(): row number too large", get_active_function_name(TSRMLS_C));
++ RETURN_FALSE;
++ }
++}
++/* }}} */
+ #endif
+
+ /* {{{ proto int udm_find(int agent, string query)
+@@ -2071,7 +2179,13 @@
+ break;
+ }
+ ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", le_link);
+-#if UDM_VERSION_ID >= 30204
++#if UDM_VERSION_ID >= 30208
++ if (UdmEnvErrMsg(Agent->Conf) && strlen(UdmEnvErrMsg(Agent->Conf))) {
++ RETURN_LONG(1);
++ } else {
++ RETURN_LONG(0);
++ }
++#elif UDM_VERSION_ID >= 30204
+ RETURN_LONG(UdmEnvErrCode(Agent->Conf));
+ #else
+ RETURN_LONG(UdmDBErrorCode(Agent->db));
+diff -urN php-4.3.1.org/ext/mnogosearch/php_mnogo.h php-4.3.1/ext/mnogosearch/php_mnogo.h
+--- php-4.3.1.org/ext/mnogosearch/php_mnogo.h Mon Feb 24 21:42:43 2003
++++ php-4.3.1/ext/mnogosearch/php_mnogo.h Sun Nov 24 20:39:46 2002
+@@ -1,5 +1,5 @@
+ /* $Source$ */
+-/* $Id$ */
++/* $Id$ */
+
+ /*
+ +----------------------------------------------------------------------+
+@@ -68,6 +68,8 @@
+ #if UDM_VERSION_ID >= 30204
+ DLEXPORT PHP_FUNCTION(udm_parse_query_string);
+ DLEXPORT PHP_FUNCTION(udm_make_excerpt);
++DLEXPORT PHP_FUNCTION(udm_set_agent_param_ex);
++DLEXPORT PHP_FUNCTION(udm_get_res_field_ex);
+ #endif
+ #endif
+